[linux-l] Benutzerwechsel im Shellscript

Volker Grabsch vog at notjusthosting.com
Fr Apr 6 13:52:46 CEST 2007


On Fri, Apr 06, 2007 at 07:23:08AM +0200, Benjamin Schieder wrote:
> On 06.04.2007 01:48:52, Volker Grabsch wrote:
> > ich bin beim Schreiben eines init.d-Scriptes über folgendes Problem
> > gestoßen: Es soll ein Prozess (Daemon) gestartet werden, aber nicht
> > als root, sondern als ein bestimmter User. Die Logdaten landen aber
> > in einem Logfile, das root gehört.
> 
> Wieso gehoert das Logfile 'root' wenn der Prozess als $USER laeuft?

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.

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. :-)

> >     su - "$USER" -c "'$DAEMON'" >> "$LOGFILE" &
[...]
> > 1) Wenn nicht als root ausgeführt, kommt eine absolut irreführende
> >    Fehlermeldung: "stdin is not a tty" bzw. "su: must be run from a
> >    terminal".
> > 
> >         (Wenn su nicht als root gestartet wird, will es ein
> >          Passwort, und aus Sicherheitsgründen will es das Passwort
> >          nicht von "irgendeinem stdin", sondern von einer Tastatur
> >          haben.)
> 
> Ein init script wird schon per Definition von niemand anderem als 'root'
> ausgefuehrt, von daher ist das Problem keines.
> 
> Besides:
> root at fuzzy:~# su - blindcoder -c "ls -ld /"
> drwxr-xr-x 22 root root 560 Jan  7 12:43 /
> root at fuzzy:~# logout
> blindcoder at fuzzy:~$ su - blindcoder -c "ls -ld /"
> Password:
> drwxr-xr-x 22 root root 560 Jan  7 12:43 /
> blindcoder at fuzzy:~$
> 
> Wenn das init script also per Hand als $USER aufgerufen wird, wird einfach
> nach dem Passwort gefragt.

Eben nicht! Bitte lies, was ich schreibe. Nochmal: Wenn es
innerhalb eines Shell-Scriptes im Hintergrund gestartet
wird, dann gibt es *keine* Passwortabfrage, sondern wiegesagt
eine Fehlermeldung. Beispiel:


    $ cat test.sh 
    #!/bin/sh
    su - vog -c "ls -ld /" &
    sleep 1

    $ ./test.sh
    su: must be run from a terminal

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".


Viele Grüße,

    Volker

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



Mehr Informationen über die Mailingliste linux-l