[PATCH] modusers

Wie ist das, wenn die Dateien nur noch für Root lesbar sind, wenn ein Dienst mit eigenem Benutzer gestartet wird!?

Code:
-rw-r--r--    1 root     root          179 Jan  1  2000 passwd
-rwxr-xr-x    1 root     root          253 Jan  1  2000 shadow

MfG Oliver

edit: http://trac.freetz.org/changeset/3238
Ich hab jetzt als erstes mal dieses "--mode=0755" entfernt.
 
Zuletzt bearbeitet:
Die passwd kann für alle lesbar sein, da dort kein Passworthashes _mehr_ stehen (außer man heisst AVM und legt den ftpuser nach dem alten Prinzip an...). Die shadow sollte nur für root zugreifbar sein, das "ausführen" ist unnötig
 
Okay.
Nächste Frage: Es scheint, dass diese MOD_HTTPD_PASSWD Variable immer im Environment ist, wenn die Packages über rc.mod gestartet werden. Kann es sein, dass das ". /mod/etc/conf/mod.cfg" in manchen rc.* Skripten sich auf alle späteren Dienste auswirkt?

MfG Oliver
 
Ja.

Deswegen mein Vorschlag in Beitrag #20, beim Einlesen von Konfigurationsdateien das export weg zu definieren. Damit werden die Zuweisungen zwar für das Skript durchgeführt, aber nicht ins Environment exportiert.

Und passwd und group sollten Mode 644 haben, also für alle lesbar, während shadow und gshadow Mode 600 haben sollten (das wird in fwmod auch schon so angelegt).
 
Die Skripte, die mod.cfg exportieren laufen nicht über modlibrc.

MfG Oliver
 
Das Schreiben der Konfigurations-Skripte ist nicht das Problem. Es reicht, wenn vor dem Starten von Programmen das export nicht ausgeführt wird.
 
MOD_HTTPD_PASSWD wird in /etc/default.mod/mod.cfg exportiert. Wie kommt das in das Environment vom dropbear?

MfG Oliver
 
Bei mir ist es im Moment nicht im Environment von Dropbear, wobei ich auch schon angefangen habe, einige Änderungen in der Richtung zu machen.

Es gibt zwei Möglichkeiten:
1. rc.mod liest die Datei und startet danach alle Autostart Pakete, die deswegen die Variablen erben.
2. Der Webserver hat die Variablen, und die manuell gestarteten Dienste erben von diesen die Variablen.

Versuch mal
Code:
grep MOD_HTTPD_PASSWD /proc/*/environ

Im Environment von telnet ist die Variable zum Beispiel auch enthalten, und das Environment ist immerhin 4k groß, ebenso wie in dem von httpd. Und da es in beiden Fällen exakt 4k sind, halte ich es sogar für wahrscheinlich, daß das nicht die tatsächliche Größe ist, sondern daß da auf eine Speicher-Seite abgeschnitten wird.
 
Du hast Recht, wahrscheinlich mit beiden Behauptungen.

Ich habe gerade einen Dienst über das Webinterface gestartet. Die Variable war gesetzt. Danach hab ich den Dienst über die Konsole neu gestartet und die Variable ist nicht mehr gesetzt.

MfG Oliver

edit: 2 weitere Änderungen
Code:
Index: root/usr/bin/webcfg
===================================================================
--- root/usr/bin/webcfg (revision 3242)
+++ root/usr/bin/webcfg (working copy)
@@ -13,4 +13,4 @@
 
 homedir=/usr/mww/
 
-exec $DAEMON "$@" -p "$MOD_HTTPD_PORT" -c /mod/etc/$DAEMON.conf -h "$homedir" -r "Freetz"
+exec env - PATH="$PATH" $DAEMON "$@" -p "$MOD_HTTPD_PORT" -c /mod/etc/$DAEMON.conf -h "$homedir" -r "Freetz"
Index: root/usr/mww/cgi-bin/exec.cgi
===================================================================
--- root/usr/mww/cgi-bin/exec.cgi (revision 3242)
+++ root/usr/mww/cgi-bin/exec.cgi (working copy)
@@ -110,7 +110,7 @@
   cgi_begin "$(lang de:"Starte" en:"Starting") $MOD_CGI_PKG..."
   echo "<p>$(lang de:"Starte" en:"Starting") $MOD_CGI_PKG:</p>"
   echo -n '<pre>'
-  /mod/etc/init.d/rc.$MOD_CGI_PKG start | html
+  env - PATH="$PATH" /mod/etc/init.d/rc.$MOD_CGI_PKG start | html
   echo '</pre>'
   echo '<form action="/cgi-bin/daemons.cgi"><input type="submit" value="$(lang de:"Zur&uuml;ck" en:"Back")"></form>'
   cgi_end
@@ -128,7 +128,7 @@
   cgi_begin "$(lang de:"Starte $MOD_CGI_PKG neu" en:"Restarting $MOD_CGI_PKG")..."
   echo "<p>$(lang de:"Starte $MOD_CGI_PKG neu" en:"Restarting $MOD_CGI_PKG"):</p>"
   echo -n '<pre>'
-  /mod/etc/init.d/rc.$MOD_CGI_PKG restart | html
+  env - PATH="$PATH" /mod/etc/init.d/rc.$MOD_CGI_PKG restart | html
   echo '</pre>'
   echo '<form action="/cgi-bin/daemons.cgi"><input type="submit" value="$(lang de:"Zur&uuml;ck" en:"Back")"></form>'
   cgi_end
 
Zuletzt bearbeitet:
argl - entferne mein Kommentar - habe 2. Seite nicht gelesen

sorry
 
Zuletzt bearbeitet:
Der letzte Patch bringt keine Änderungen, wenn ich ihn alleine einsetze. Oder soll dieser Patch noch mit anderen Patches zusammen funktionieren?

Ciao
Stephan
 
Der httpd sollte dann "clean" sein und alle über das Webinterface gestarteten/restarteten Dienste auch?

MfG Oliver
 
Also nur mit dem letzten Patch oben hat der httpd des Freetz Webfrontends immer noch die PASSWD Variable.

Ciao
Stephan
 
Die vom Webfrontend gestarteten Dienste haben aber die PASSWD Variable nicht mehr. :)

Ciao
Stephan
 
Ein Nachtrag zu dem oben genannten Patch: mit dem startet lighttpd nicht mehr, da in /etc/init.d/rc.lighttpd zwar noch die LIGHTTPD_* Variablen existieren, aber in dem neuen Prozess für /etc/default.lighttpd/lighttpd_conf nicht mehr.

Ciao
Stephan
 
Das liegt dann wohl an dem Patch von hier?

MfG Oliver
 
Dies glaube ich nicht so recht, da ich alle vorherigen Patches entfernt habe und nur deinen Patch drinnen hatte.

Ciao
Stephan
 
Aber die lighttpd.cfg wird doch von modlibrc in rc.lighttpd aufgerufen!? Da dürfte mein Patch gar keine Auswirkungen haben oder steht irgendwo noch ein "alias export= "?

MfG Oliver
 
Nachdem ich wirklich alle Reste der alten Patches entfernt habe und nur den letzten Patch genommen habe:

- lighttpd startet immer
- starten von Programmen via webfrondend resultiert in einem sauberen Environment

Danke für die Änderungen. Nun sollte noch das Starten via Kommandozeile "gesäubert" werden.

Ciao
Stephan
 
Ich habe mal in modlibrc zwei neue Funktionen eingefügt, die dabei helfen sollen (r3249).

modlib_loadconfig lädt eine Config-Datei, ohne sie ins Environment zu exportieren.
modlib_startdaemon enthält das 'env - PATH="$PATH" ' von Oliver.

Die richtige Stelle zum Säubern sind meiner Meinung nach die rc.* Skripte selbst. Das gilt dann nämlich immer, ob Autostart, Web-Frontend oder Kommandozeile.

Normalerweise ist es nicht nötig, beides zu machen, Variablen nicht exportieren und nachher sowieso das ganze Environment löschen. Es gab aber mal bei AVM Firmware Update das Problem, daß das Programm von AVM nicht richtig lief, wenn Werte im Environment gefehlt hatten. In diesem Fall wäre es sinnvoll, darauf zu achten, daß das Environment nicht unnötig aufgebläht wird. Nachdem AVM aber den websrv in ctlmgr integriert hat, ist das im Moment nicht aktuell.

PS:
Man könnte das Environment, das von rc.conf generiert wird, in einer Datei speichern, aus der man es bei Bedarf einlesen kann, etwa in der Art:
Code:
env - sh -c '. /etc/init.d/rc.conf ; env' | sed -e 's/^/export /g' > /var/tmp/rc.conf
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.