"su" oder "su -"?

Das Kommando "su" (substitute user identity) dient auf Betriebssystemen wie Linux dazu, den Benutzer zu wechseln und Programme unter einem anderen Benutzer auszuführen. Doch sollte "su" oder "su -" verwendet werden?

Die Syntax ist "su <Benutzer>" und ohne einen Benutzernamen aufgerufen, wechselt "su" nach einer Passwort-Abfrage zum Benutzer root, während "su -" einen kompletten Login-Vorgang simuliert, d.h. es wird das komplette Profil des neuen Benutzers eingelesen und die Umgebungsvariablen werden ebenfalls neu gesetzt.

Um das ganze zu verdeutlichen, möchte ich dies anhand der Umgebungsvariablen PATH demonstrieren. Als erstes wird die Variable als normaler Benutzer ausgegeben:

robert@tux:~ > echo $PATH
/usr/local/bin:/bin:/usr/bin
robert@tux:~ > 

Anschließend wird der Benutzer mittels "su" zum Root gewechselt und die Umgebungsvariable wird erneut ausgegeben:

robert@tux:~ > su
Password: [versteckt]
tux:/home/robert #
tux:/home/robert # echo $PATH
/usr/local/bin:/bin:/usr/bin
tux:/home/robert # 

Wie Sie sehen, hat sich am Inhalt der Umgebungsvariable nichts geändert, so funktionieren z.B. Tools, die in /sbin und /usr/sbin liegen, nicht auf Anhieb:

tux:/home/robert # ip addr list lo
-bash: ip: command not found
tux:/home/robert #
tux:/home/robert # /sbin/ip addr list lo
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
    inet6 ::1/128 scope host
tux:/home/robert # 

Doch nochmal zurück zum normalen Benutzer. Wechselt man mit "su -" zum Root und lässt sich die Umgebungsvariable ausgeben, ergibt dies folgendes:

robert@tux:~ > su -
Password: [versteckt]
tux:~ #
tux:~ # echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
tux:~ # 

Wie Sie nun sehen, hat sich der Wert der Umgebungsvariablen geändert und Sie sind standardmäßig auch im Home-Verzeichnis des Benutzers; jetzt funktionieren auch Tools, die in /sbin und /usr/sbin liegen, ohne Pfadangabe, da die Umgebungsvariable PATH die entsprechenden Pfade enthält:

tux:~ # ip addr list lo
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
    inet6 ::1/128 scope host
tux:~ # 

Benutzer von SuSE Linux haben im Normalfall keinen Unterschied zwischen "su" und "su -", da sich SuSE - wie so oft - nicht an gegebene Standards hält und das eigene Süppchen kocht. In openSUSE und neueren Versionen des SuSE Linux Enterprise Servers wurde dieses Verhalten jedoch endlich korrigiert und damit auch den anderen Linux-Distributionen angeglichen.

Ob man letztendlich "su" und "su -" verwendet, ist Geschmacks- und Gewohnheitssache, nicht zuletzt hängt es auch davon ab, was man machen möchte...