[linux-l] Benutzerwechsel im Shellscript

Volker Grabsch vog at notjusthosting.com
Fr Apr 6 23:12:22 CEST 2007


On Fri, Apr 06, 2007 at 10:33:18PM +0200, Benjamin Schieder wrote:
> > Der Apache läuft als "www-data" (oder "wwwrun", je nach Distri), und
> > trotzdem gehört sein Logfile root.
> > 
> > Ich will doch nicht jedem Daemon erlauben, in irgendwelche Dateien
> > in /var/log hineinzuschreiben, ganz zu schweigen davon, dass es eine
> > extra Fehlerquelle für logrotate ist.
> 
> Dein Logrotate wird ja wohl grade noch die Rechte einer rotierten Datei
> wiederherstellen koennen?

Leider nicht. :-(

Ja, man sollte meinen, logrotate lässt gesunden Menschenverstand walten,
aber das tut es leider nicht. Wenn du nicht in der Logrotate-
Konfiguration explizit angibst, welche Besitzer/Rechte das neue Logfile
haben soll, legt es dir eines mit root:root 644 an.

Das ist doof. Logrotate sollte besser die alten Dateirechte einfach auf
die neue übertragen. Macht es aber nicht, warum auch immer. Und damit
erzeuge ich eine sinnlose weitere Fehlerquelle, während ich bei der
aktuellen Konstruktion den User nur an einer Stelle einrichten muss:
im init.d-Script.

Dieser Teil der Diskussion ist aber eh irrelevant, weil schon eine
viel bessere Lösung genannt wurde: syslog.

> > Aber der eigentliche Grund ist, dass es die anderen Daemons (exim,
> > apache, courier) genauso machen. Aber das könnte auch einfach daran
> > liegen, dass sie syslog nutzen. :-)
> 
> Glaube nicht. Die werden als root gestartet und geben dann die Privilegien
> auf.

Und was bitteschön macht meine "su"-Konstruktion? Die ist doch auch
nichts anderes. Der einzige Unterschied ist, dass die Abgabe der
Privilegien ein Zwischentool übernimmt, statt innerhalb des Shell-
Scriptes zu geschehen. Aber das ist IMHO auch gut so.

> > Wenn ein Shell-Script mit dieser Meldung abbricht, ist das einfach
> > nichtssagend. Viel schöner wäre dann ein "must be run as root" oder
> > ähnliches. Daher meine Frage nach einer Alternative zu "su", die
> > erst gar kein Passwort will, sondern direkt streikt, wenn sie nicht
> > als root aufgerufen wird. Wie "ssh -n" bzw. "ssh -f".
> 
> if [ "${USER:-`whoami`}" != "root" ] ; then
> 	echo "Must be run as root" >&2
> 	exit 1
> fi

Das ist ne nette Idee, an sowas hatte ich auch schon gedacht, fand das
dann aber im Nachhinein auch etwas doof. Ich wollte ja die Sache
vereinfachen, und nicht ein Flickwerk du 'Abfangen typischer Userfehler'
produzieren.

Wenn ich das machen würde, würde ich übrigens lieber auf uid=0 testen,
z.B. so:

    uid=`id | sed 's/^uid=\([0-9]\+\).*/\1/'`
    [ "$uid" == "0" ] || { echo "$0: must be run as root" >&2; exit 1; }


Viele Grüße,

    Volker


-- 
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR



Mehr Informationen über die Mailingliste linux-l