Kann ich die Scripte von Freetz einfach benutzen? Wenn ja, welche sind das?
Da sich Freetz selbst nicht um den Update-Prozeß kümmert (das einzige, was ich von Freetz an der Stelle kenne, ist die Entgegennahme eines Firmware-Uploads (/usr/mww/cgi-bin/update/*firmware.cgi) und dessen Verarbeitung (/usr/lib/mww/do_update_handler.sh), gibt es da nicht allzu viel, was man benutzen kann. Da sich das zum größten Teil auf AVM-Skripte (/var/install) stützt, benutze ich das selbst gar nicht mehr.
Kannst du mir vielleicht ein kleines Beispiel geben, wie du es gelöst hast?
Wenn Du in Form eines konkreten Skript-Files meinst: nein. Das ist zu speziell an meine eigenen Bedürfnisse angepaßt und mit einiger Wahrscheinlichkeit nicht allgemein verwendbar und die Arbeit, das auf neutral zu trimmen, ist mir zuviel ... bei zu geringem "Ertrag" beim Leser, denn das kann man ohnehin nicht 1:1 anwenden, wenn das passende Framework (YourFritz) rundherum noch fehlt und damit bin ich noch nicht so weit fertig, daß man es anderen empfehlen könnte. Ich habe bisher noch nicht eine einzige Rückmeldung erhalten, daß es sich jemand wenigstens mal angesehen hätte, obwohl es schon mind. 2 Monate auf dem Server steht und einige Male wohl tatsächlich geladen wurde (und nicht nur von Spidern kontrolliert, ob der Link hier noch stimmt).
Als kurzer Abriß, wie es (das Update, nicht das Framework) funktioniert:
- die FRITZ!Box sieht regelmäßig auf dem (ohnehin konfigurierten und damit in ihrem eigenen Dateisystem gemounteten) WebDAV-Server in einem Verzeichnis "custom/$(hostname)" nach, ob es eine Datei "control.download" gibt - jede FRITZ!Box hat da ihr eigenes "Home-Verzeichnis" auf dem Server
- diese Datei wird - so sie existiert - mittels OpenSSL (openssl enc -d -aes256) decodiert, dabei kommt ein SHA512-Hash (kann die Busybox machen, wenn man sie entsprechend konfiguriert hat) über das Box-Kennwort (mit privatekeypassword ermittelt), den eigenen Hostnamen, die WLAN-SSID des 2,4 GHz-Netzes und den WLAN-PSK (mit queries.lua ermittelt) als Kennwort für die Entschlüsselung zum Einsatz
- da steht dann ganz simpel drin, welche Dateien vom Server geladen werden sollen und was mit denen zu passieren hat
- als Operation werden verschiedene schon vorhandene Skript-Kommandos in einem dafür vorgegebenen Verzeichnis unterstützt, das geht vom simplen Kopieren an eine bestimmte Stelle bis zum Erstellen eines neuen SquashFS-Images, das in die richtige Wrapper-Partition kopiert wird
- alles Downloads wandern durch genau dieselbe Verarbeitung (werden also ebenfalls beim Download entschlüsselt), wie die o.a. "Auftragsliste" - damit kann ich (relativ) sicher sein, daß keine fremden Dateien dort eingeschmuggelt werden können, selbst wenn es ein "öffentlicher" WebDAV-Server ist/wäre
- nach der Abarbeitung der Liste wird sie ganz simpel per rm vom Server entfernt, die abgearbeiteten Dateien selbst lösche ich dann meist manuell oder lasse sie gleich stehen, denn die haben ohnehin eindeutige Namen mit Linux-Timestamps und ihrem eigenen Hash-Wert, weil es dem Automatismus egal ist, wie die heißen und ich dann Übertragungsfehler schon am Dateinamen ausschließen kann, bevor ich OpenSSL darauf ansetze
- das Einpacken solcher "Aufträge" ist natürlich auch automatisiert, die internen Kennwörter der Client-Boxen und die anderen Angaben für die Verschlüsselung stehen in einer sqlite3-Datenbank herum (ist eigentlich ein dmcrypt-Image-File und bildet somit das "Master-Password") und werden automatisch für die richtige Box dort ausgelesen (mit dem CLI-Kommando von sqlite3)
- Probleme macht das nur sehr selten, wenn es größere Downloads auf Boxen sind, die nicht genug Hauptspeicher haben, um zwei Kopien der Datei parallel zu speichern (einmal ver- und einmal entschlüsselt) - da ist dann ggf. ein Fallback auf direktes Lesen des (eben ohnehin im Dateisystem erreichbaren) Files durch das OpenSSL-Kommando angesagt ... aus historischen Gründen (die WebDAV-Sache mit "fuse" kam später erst dazu, weil damit dann auch TLS zum Server problemlos ging, was bei wget der Busybox nicht möglich war und früher mit "stunnel" ausgeglichen werden mußte) ist der vorherige Download (bzw. das Kopieren) mit anschließender Kontrolle des Hash-Wertes in den meisten Fällen noch aktiv, damit könnte ich schnell wieder auf wget oder auch auf einen FTP-Client für den Download umstellen, falls AVM "fuse" irgendwann wieder aus dem Kernel werfen sollte
Man muß sich aber gerade beim TLS einige Sachen in der AVM-Firmware ansehen bzw. am besten die libneon und davfs2 (bei AVM heißt es "mount.davfs") durch eigene Versionen ersetzen - da war früher einiges deaktiviert (alles > TLS 1.0) und ob das heutzutage an die neuen Erkenntnisse/Erfordernisse angeglichen wurde (kein SSLv3 mehr, dafür TLS bis einschließlich 1.2, die libssl.so gäbe das her), weiß ich nicht genau. SSLv3 als "no go" kann eigentlich erst in der 06.30 so richtig aktuell sein, wobei die AVM-Variante m.W. ohnehin keine Server-Zertifikate prüft und sich damit eigentlich generell disqualifiziert für meine Zwecke.
Wenn da durch DNS-Spoofing jeder x-beliebige Server mit passendem "self signed"-Zertifikat von sich behaupten kann, der richtige zu sein und sich der WebDAV-Client dort auch noch brav mit Benutzernamen und Kennwort authentifiziert (was so ein Server als MITM dann bei "basic auth" problemlos mitliest - wobei der nicht mal ständig als MITM tätig sein muß, wenn er die Credentials erst einmal abgegriffen hat), dann ist das wieder ein Ritt auf der Rasierklinge.
Auf der einen Seite will AVM sicherlich keine Server mit "self signed"-Zertifikaten generell ausschließen (der Kunde könnte ja einen eigenen haben), auf der anderen Seite ist das viel zu einfach anzugreifen, da reicht es schon, einmalig kurz den DNS-Namen des WebDAV-Servers zu kapern. Da bräuchte es also irgendwo im GUI noch die Möglichkeit, die gültigen Zertifikate (notfalls auch ganze Chains, aber eigentlich reicht ein einzelnes) irgendwie auszuwählen und festzutackern (Pinning verbreitet sich ja immer mehr).
Fest verdrahtete Zertifikatlisten oder endlose Listen von CAs sind sicherlich nicht die beste Idee - anders als irgendein Browser, wo so eine Liste schnell aktualisiert ist, ist das FRITZ!OS ja doch eher statisch ... notfalls könnte man solche Listen (bzw. Updates dafür) allerdings sicherlich von einem AVM-Server laden und irgendwo im TFFS noch mit ablegen - wenn man nicht besser wirklich mit "certificate pinning" über das GUI arbeitet, da läßt sich ja ohnehin bei AVM nur eine einzelne DAV-Verbindung konfigurieren.
@koy:
Das erfolgt beim Pseudo-Update nur dann, wenn man den USB-Teil wieder reaktiviert und die Volumes gemountet werden.
Dann erfolgt dieser Aufruf bei
jedem Mounten eines Volumes zwischen der Aktivierung des FTP-Servers und des Samba-Servers, zu finden in der /etc/hotplug/udev-mount-sd.