[linux-l] Benutzerwechsel im Shellscript

Benjamin Schieder blindcoder at scavenger.homeip.net
Fr Apr 6 22:33:18 CEST 2007


On 06.04.2007 13:52:46, Volker Grabsch wrote:
> 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.

Dein Logrotate wird ja wohl grade noch die Rechte einer rotierten Datei
wiederherstellen koennen?

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

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

if [ "${USER:-`whoami`}" != "root" ] ; then
	echo "Must be run as root" >&2
	exit 1
fi

Oder wie oben schon einmal erwaehnt, sudo.


Gruesse,
	Benjamin
-- 
Go away, or I will replace you with a very small shellscript!
	http://shellscripts.org/
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : nicht verfügbar
Dateityp    : application/pgp-signature
Dateigröße  : 189 bytes
Beschreibung: nicht verfügbar
URL         : <https://mlists.in-berlin.de/pipermail/linux-l-mlists.in-berlin.de/attachments/20070406/dc533ee7/attachment.sig>


Mehr Informationen über die Mailingliste linux-l