- Mitglied seit
- 10 Mai 2006
- Beiträge
- 15,268
- Punkte für Reaktionen
- 1,750
- Punkte
- 113
Das habe ich inhaltlich nicht komplett verstanden ... aber die Script-Dateien im "modfs"-Archiv sind eigentlich auch nur dafür gedacht, tatsächlich aus "modfs" heraus gestartet zu werden.
Normalerweise verhindere ich die direkte Ausführung in solchen Fällen durch die Angabe von "/bin/true" oder "/bin/false" im SheBang (je nachdem, ob ich einen Fehler haben will oder nicht beim direkten Aufruf) - das werde ich wohl nachholen für die Shell-Dateien im "bin"-Unterverzeichnis bzw. ich werde die SheBang-Zeilen vermutlich komplett entfernen.
Ich sollte auch nirgendwo nur "sh" im SheBang verwenden ... die Angabe des absoluten Pfades ("/bin") im SheBang sollte (solange das "/bin"-Verzeichnis und der Symlink für "true" oder "false" existiert) eigentlich nicht zu Problemen führen und aus "modfs" heraus rufe ich die inzwischen alle über "wrap_script" auf, damit man auch die Debug-Ausgabe notfalls über die Umgebungsvariable einschalten kann.
Wer die Skripte auch unabhängig von "modfs" benutzen will, der muß eben die Aufrufe aller Applets (die nicht als "noexec" bzw. "nofork" (was ein "verschärftes" "noexec" ist) deklariert sind) mit der expliziten Angabe "busybox" bzw. am besten sogar mit dem Ergebnis eines "readlink /proc/self/exe" ausführen lassen.
Es wird vermutlich unmöglich sein, mit überschaubarem Aufwand solche Skript-Dateien so zu gestalten, daß die (a) auf mehreren Modellen und (b) mit unterschiedlichen Binärdateien/OS-Versionen 1:1 laufen ... dafür gibt es Werkzeuge wie "autoconf/automake", was auf der FRITZ!Box einfach nicht sinnvoll ist. Die Skript-Dateien im "modfs"-Archiv sind dann so angepaßt, daß sie beim Aufruf aus "modfs" heraus das erwartete Ergebnis liefern ... wenn das auch mit den "unveränderten" Originaldateien machbar ist (wie beim "check_signed_image"), dann ist das schön - wenn nicht, wird es angepaßt und dann muß man auch keine Rücksicht mehr auf den Einsatz außerhalb nehmen. Ein Beispiel hier ist das "Verpacken" des "mktemp" in "juis_check" in die interne "mktmp"-Funktion - wenn ich bei "check_update" sicher sein kann, daß der Aufruf mit einer BusyBox mit "mktemp"-Applet erfolgt, dann kann ich auf den gesamten Wrapper verzichten.
Wenn das "juischeckupdate"-Skript nicht auf "xmllint" und "bash" bauen würde und die dann auf der Box ebenfalls als (am besten noch statisch gelinkte) Binaries vorliegen müßten, hätte ich die "juis_check"-Version mit "nc" gar nicht erst gebaut, da das mit den unterschiedlichen Optionen zwischen "vollen Systemen" und der Implementierung in der BusyBox auch nur Probleme bereitet, wenn da bei EOF auf STDIN sofort ein einseitiges FIN-Paket bei TCP-Verbindungen gesendet wird und der Server auf der anderen Seite dann gar nicht mehr antwortet. Aus der "juis_check" wurde dann irgendwann "check_update" ... daß das außerhalb von "modfs" liegt, ist nur der Tatsache geschuldet, daß ich das komplexe "modfs"-Skript ohnehin in kleinere Einheiten zerlegen will.
Wer das Prinzip von "check_update" auf der FRITZ!Box nachnutzen will, nimmt besser "juis_check" aus dem YourFritz-Repo (in "tools") - das braucht genau dieselben "Zutaten" (und funktioniert üblicherweise mit der AVM-BusyBox auch nicht, weil es da kein "nc" mehr gibt und das kann man auch nicht einfach "emulieren", wie ich es beim "mktemp" versuche).
Eine FRITZ!Box mit der BusyBox ist eben kein "vollwertiges Linux-System" - generell ist die Entwicklung für "embedded systems" immer ein wenig anders als für irgendein beliebiges anderes System. Schon aus der BusyBox ergeben sich da ggf. vollkommen unerwartete Effekte, angefangen bei Security-Problemen - von den fehlenden Schutzmechanismen in der FRITZ!Box (alles als "root", kein SELinux oder eine andere "mandatory access control"-Implementierung, womit ein Angreifer fast automatisch auch immer vollen "root"-Zugriff erlangt mit einem erfolgreichen Einbruch) mal vollkommen abgesehen. Hier fehlt eben fast immer die "2nd or 3rd line of defense" und so rächen sich leichte Fehler viel schneller als bei einem "ausgewachsenen" System.
- - - Aktualisiert - - -
Ich habe mal die Skript-Dateien im "bin"-Verzeichnis "nicht ausführbar" gemacht ... wer sie außerhalb von "modfs" verwenden will, muß entsprechende Vorbereitungen treffen bzw. Änderungen vornehmen.
Normalerweise verhindere ich die direkte Ausführung in solchen Fällen durch die Angabe von "/bin/true" oder "/bin/false" im SheBang (je nachdem, ob ich einen Fehler haben will oder nicht beim direkten Aufruf) - das werde ich wohl nachholen für die Shell-Dateien im "bin"-Unterverzeichnis bzw. ich werde die SheBang-Zeilen vermutlich komplett entfernen.
Ich sollte auch nirgendwo nur "sh" im SheBang verwenden ... die Angabe des absoluten Pfades ("/bin") im SheBang sollte (solange das "/bin"-Verzeichnis und der Symlink für "true" oder "false" existiert) eigentlich nicht zu Problemen führen und aus "modfs" heraus rufe ich die inzwischen alle über "wrap_script" auf, damit man auch die Debug-Ausgabe notfalls über die Umgebungsvariable einschalten kann.
Wer die Skripte auch unabhängig von "modfs" benutzen will, der muß eben die Aufrufe aller Applets (die nicht als "noexec" bzw. "nofork" (was ein "verschärftes" "noexec" ist) deklariert sind) mit der expliziten Angabe "busybox" bzw. am besten sogar mit dem Ergebnis eines "readlink /proc/self/exe" ausführen lassen.
Es wird vermutlich unmöglich sein, mit überschaubarem Aufwand solche Skript-Dateien so zu gestalten, daß die (a) auf mehreren Modellen und (b) mit unterschiedlichen Binärdateien/OS-Versionen 1:1 laufen ... dafür gibt es Werkzeuge wie "autoconf/automake", was auf der FRITZ!Box einfach nicht sinnvoll ist. Die Skript-Dateien im "modfs"-Archiv sind dann so angepaßt, daß sie beim Aufruf aus "modfs" heraus das erwartete Ergebnis liefern ... wenn das auch mit den "unveränderten" Originaldateien machbar ist (wie beim "check_signed_image"), dann ist das schön - wenn nicht, wird es angepaßt und dann muß man auch keine Rücksicht mehr auf den Einsatz außerhalb nehmen. Ein Beispiel hier ist das "Verpacken" des "mktemp" in "juis_check" in die interne "mktmp"-Funktion - wenn ich bei "check_update" sicher sein kann, daß der Aufruf mit einer BusyBox mit "mktemp"-Applet erfolgt, dann kann ich auf den gesamten Wrapper verzichten.
Wenn das "juischeckupdate"-Skript nicht auf "xmllint" und "bash" bauen würde und die dann auf der Box ebenfalls als (am besten noch statisch gelinkte) Binaries vorliegen müßten, hätte ich die "juis_check"-Version mit "nc" gar nicht erst gebaut, da das mit den unterschiedlichen Optionen zwischen "vollen Systemen" und der Implementierung in der BusyBox auch nur Probleme bereitet, wenn da bei EOF auf STDIN sofort ein einseitiges FIN-Paket bei TCP-Verbindungen gesendet wird und der Server auf der anderen Seite dann gar nicht mehr antwortet. Aus der "juis_check" wurde dann irgendwann "check_update" ... daß das außerhalb von "modfs" liegt, ist nur der Tatsache geschuldet, daß ich das komplexe "modfs"-Skript ohnehin in kleinere Einheiten zerlegen will.
Wer das Prinzip von "check_update" auf der FRITZ!Box nachnutzen will, nimmt besser "juis_check" aus dem YourFritz-Repo (in "tools") - das braucht genau dieselben "Zutaten" (und funktioniert üblicherweise mit der AVM-BusyBox auch nicht, weil es da kein "nc" mehr gibt und das kann man auch nicht einfach "emulieren", wie ich es beim "mktemp" versuche).
Eine FRITZ!Box mit der BusyBox ist eben kein "vollwertiges Linux-System" - generell ist die Entwicklung für "embedded systems" immer ein wenig anders als für irgendein beliebiges anderes System. Schon aus der BusyBox ergeben sich da ggf. vollkommen unerwartete Effekte, angefangen bei Security-Problemen - von den fehlenden Schutzmechanismen in der FRITZ!Box (alles als "root", kein SELinux oder eine andere "mandatory access control"-Implementierung, womit ein Angreifer fast automatisch auch immer vollen "root"-Zugriff erlangt mit einem erfolgreichen Einbruch) mal vollkommen abgesehen. Hier fehlt eben fast immer die "2nd or 3rd line of defense" und so rächen sich leichte Fehler viel schneller als bei einem "ausgewachsenen" System.
- - - Aktualisiert - - -
Ich habe mal die Skript-Dateien im "bin"-Verzeichnis "nicht ausführbar" gemacht ... wer sie außerhalb von "modfs" verwenden will, muß entsprechende Vorbereitungen treffen bzw. Änderungen vornehmen.