su-Befehl: Unterschied zwischen su und su -, sudo su und sudo -i und wie du das Konto wechselst

TestumgebungRHEL-FamilieAlmaLinux 9.8util-linux 2.37root-KontoDebian 12 · util-linux 2.38 normales KontoGeprüft am 2026-11-05
Befehle für Benutzer · GruppensuSpeicherort/usr/bin/su
Befehle mit einem anderen Konto ausführen

Wenn du unter Linux Befehle mit einem anderen Konto ausführen willst, ohne dich vom aktuellen Konto abzumelden, verwendest du den su-Befehl. Beim Vergleich, bei dem su vom root-Konto eines AlmaLinux-9-Servers zum Systemkonto daemon ohne Anmeldemöglichkeit ausgeführt wurde, änderte ein einziger Bindestrich den Arbeitsordner und PATH, und Befehle liefen erst, nachdem eine Shell angegeben wurde.

Die Ausgaben unten stammen von einem AlmaLinux-9.8-Server (root-Konto) und einem Debian-12-Server (normales Konto). Die Passwortabfragen und sudo wurden nicht auf einem Produktivserver ausgeführt, sondern nach den offiziellen Handbüchern zusammengefasst; ein Teil des PATH-Werts und die Patch-Versionsnummer von util-linux im Simulator wurden durch Beispielwerte ersetzt.

1️⃣ So verwendest du den su-Befehl

  • ↪️ Grundform und Rückkehr mit exit

Die Grundform ist [su Kontoname], und wenn du den Kontonamen weglässt, wechselt su zu root. Gibst du in der neuen Shell exit ein, endet diese Shell, und du kehrst zur Shell des ursprünglichen Kontos zurück, das su ausgeführt hat.

Führst du es von einem normalen Konto aus, gibst du in der Zeile Password: das Passwort des Zielkontos ein (nach der Standardeinstellung von PAM). Auf diesem Server überspringt /etc/pam.d/su die Authentifizierung, wenn root es ausführt, deshalb wurde beim Wechsel vom root-Konto zu daemon kein Passwort abgefragt.

su --help

Usage:
 su [options] [-] [<user> [<argument>...]]

Change the effective user ID and group ID to that of <user>.
A mere - implies -l.  If <user> is not given, root is assumed.

Options:
 -m, -p, --preserve-environment      do not reset environment variables
 -w, --whitelist-environment <list>  don't reset specified variables

 -g, --group <group>             specify the primary group
 -G, --supp-group <group>        specify a supplemental group

 -, -l, --login                  make the shell a login shell
 -c, --command <command>         pass a single command to the shell with -c
 --session-command <command>     pass a single command to the shell with -c
                                   and do not create a new session
 -f, --fast                      pass -f to the shell (for csh or tcsh)
 -s, --shell <shell>             run <shell> if /etc/shells allows it
 -P, --pty                       create a new pseudo-terminal

 -h, --help                      display this help
 -V, --version                   display version

For more details see su(1).

Wie in der Hilfe steht, ist der Bindestrich [-] die Login-Option und entspricht [-l], und Argumente nach dem Kontonamen werden an die Shell des Zielkontos weitergegeben. Auf dem AlmaLinux-9-Server stammte su aus dem Paket util-linux 2.37, auf dem Debian-12-Server aus dem Paket 2.38.

su --version
su from util-linux 2.38.1

Ob das Konto, zu dem du wechseln willst, eine Shell öffnen kann, siehst du im letzten Feld seiner Zeile in getent passwd.

getent passwd daemon
daemon:x:2:2:daemon:/sbin:/sbin/nologin

Die Shell von daemon war /sbin/nologin. Bei einem Konto, das statt einer Login-Shell nologin eingetragen hat, öffnet su auch nach dem Wechsel keine Shell.

2️⃣ Unterschied zwischen su und su -

  • ↪️ Login-Shell und Umgebungsvariablen

Mit einem Bindestrich (-) öffnet su dieselbe Shell, die du bei einer Anmeldung mit dem Zielkonto bekämst. Im Ordner /tmp wurde derselbe Befehl einmal ohne und einmal mit Bindestrich ausgeführt.

su -s /bin/sh -c pwd daemon
/tmp
su - -s /bin/sh -c pwd daemon
/usr/sbin

Ohne Bindestrich blieb der Arbeitsordner /tmp, während [su -] in den Home-Ordner von daemon, /sbin, wechselte. Auf diesem Server ist /sbin ein Link auf /usr/sbin, deshalb zeigte pwd /usr/sbin an.

Bei den Umgebungsvariablen wurden aus der Ausgabe von env nur fünf Zeilen verglichen: HOME, USER, SHELL, PATH und LOGNAME.

su -s /bin/sh -c env daemon | grep -E '^(HOME|USER|SHELL|PATH|LOGNAME)='
SHELL=/bin/sh
LOGNAME=daemon
HOME=/sbin
USER=daemon
PATH=/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
su - -s /bin/sh -c env daemon | grep -E '^(HOME|USER|SHELL|PATH|LOGNAME)='
SHELL=/bin/sh
LOGNAME=daemon
HOME=/sbin
USER=daemon
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

HOME, USER und LOGNAME wechselten in beiden Fällen auf die Werte von daemon. Ohne Bindestrich behielt PATH den Wert von root, das su ausgeführt hatte, und mit [su -] wurde PATH nach den Login-Einstellungen neu gesetzt.

Laut offiziellem Handbuch ändert su ohne Bindestrich nur HOME und SHELL und ändert USER und LOGNAME nur dann mit, wenn das Zielkonto nicht root ist. Wechselst du also von einem normalen Konto ohne Bindestrich zu root, bleibt in USER der ursprüngliche Kontoname stehen.

Auch [$0], das den Shell-Namen ausgibt, war unterschiedlich.

su -s /bin/sh -c 'echo $0' daemon
sh
su - -s /bin/sh -c 'echo $0' daemon
-sh

Bei [su -] stand ein Bindestrich vor dem Shell-Namen, und es erschien -sh. Eine Shell, deren Name mit einem Bindestrich beginnt, arbeitet als Login-Shell und liest die Login-Konfigurationsdateien (laut offiziellem Handbuch). Die Unterschiede zwischen beiden Formen siehst du unten.

Vergleichsusu -
ArbeitsordnerUnverändert (/tmp)Home-Ordner des Zielkontos (/usr/sbin)
HOME, USER, LOGNAMEWert von daemonWert von daemon
PATHWert von root, das su ausgeführt hatNeu gesetzt durch die Login-Einstellungen
Shell-Name ($0)sh-sh (Login-Shell)
Andere UmgebungsvariablenBleiben erhaltenBis auf einige wie TERM gelöscht (laut offiziellem Handbuch)

Das offizielle Handbuch empfiehlt, die Login-Option immer anzugeben, damit sich die Umgebungen nicht vermischen, und statt des Bindestrichs [--login] zu schreiben. su ohne Bindestrich behält den aktuellen Ordner und PATH bei, deshalb kann das Ergebnis von [su -] abweichen, wenn du einen Befehl mit den Einstellungen eines anderen Kontos prüfen willst.

3️⃣ Optionen su -c und su -s

  • ↪️ Nur einen Befehl ausführen und die Shell angeben

Um nur einen Befehl mit einem anderen Konto auszuführen, ohne eine Shell zu öffnen, schreibst du den Befehl hinter -c. Als id mit [su -c] auf dem nologin-Konto ausgeführt wurde, erschien statt der Befehlsausgabe eine Ablehnungsmeldung.

su -c id daemon
This account is currently not available.

Auch ein mit -c übergebener Befehl wird von der Shell des Kontos ausgeführt, deshalb kommt der Befehl gar nicht erst zum Zug, wenn die Shell nologin ist. Dann gibst du mit -s die Shell an, die ausgeführt werden soll.

su -s /bin/sh -c id daemon
uid=2(daemon) gid=2(daemon) groups=2(daemon)

Mit /bin/sh lief id mit der UID 2 von daemon. Diese Form verwendest du, wenn du Dateirechte oder Befehlsergebnisse mit einem Dienstkonto prüfen willst.

Ist die Shell des Zielkontos eine eingeschränkte Shell, die nicht in /etc/shells steht, wie nologin, kann nur root die Shell mit -s ändern. Laut offiziellem Handbuch werden -s und die Variable SHELL, die ein Benutzer außer root angibt, in diesem Fall ignoriert.

Enthält der Befehl hinter -c Leerzeichen, setzt du ihn in Anführungszeichen, damit er als ein Stück übergeben wird. su gibt den Exit-Code des ausgeführten Befehls unverändert zurück, 126, wenn der Befehl nicht ausgeführt werden konnte, und 127, wenn er nicht gefunden wurde (laut offiziellem Handbuch).

📌 Wichtige Optionen: Ergebnisse aus diesem Artikel

OptionWas es tutErgebnis in diesem Artikel
-Öffnet dieselbe Shell wie bei einer Anmeldung mit dem Zielkonto und wechselt in dessen Home-OrdnerIn /tmp war pwd ohne Bindestrich /tmp und mit Bindestrich /usr/sbin, und echo $0 ergab -sh
-c BefehlFührt einen Befehl mit der Shell des Zielkontos aus, ohne eine Shell zu öffnensu -c id daemon auf dem nologin-Konto daemon ergab [This account is currently not available.]
-s ShellFührt statt der im Konto eingetragenen Shell die angegebene Shell aus; bei Konten mit eingeschränkter Shell nur rootsu -s /bin/sh -c id daemon ergab uid=2(daemon) gid=2(daemon) groups=2(daemon)
--helpZeigt Verwendung und Optionsliste anZeile Usage und Optionsliste -m, -w, -g, -G, -l, -c, -f, -s, -P, -h, -V
--versionGibt Versionsinformationen aussu from util-linux 2.38.1 auf dem Debian-12-Server

📎 Weitere Optionen: laut offiziellem Handbuch

OptionWas es tut
-lLogin-Option wie der Bindestrich (-); Langform --login
-mLässt Umgebungsvariablen unverändert und ändert auch HOME, SHELL, USER und LOGNAME nicht; mit der Login-Option ignoriert (wie -p)
-w ListeBehält die mit Kommas angegebenen Variablen, wenn die Login-Option die Umgebung leert; HOME, SHELL, USER, LOGNAME und PATH werden neu gesetzt
-g GruppeLegt die primäre Gruppe fest; nur root
-G GruppeLegt Zusatzgruppen fest; nur root; ohne -g wird die erste Zusatzgruppe zur primären Gruppe
-fÜbergibt -f an die Shell; Option für csh und tcsh
-PErstellt ein neues Pseudoterminal, damit das Terminal nicht mit der ursprünglichen Sitzung geteilt wird
--session-command BefehlWie -c, erstellt aber keine neue Sitzung; das Handbuch rät davon ab

🔲 su-Befehl-Simulator

Der Simulator unten startet mit dem normalen Konto user1, und du kannst selbst su, [su -] und sudo eingeben und mit exit zurückkehren. Konten und Passwörter sind Beispielwerte.

su-Befehl-Simulatorutil-linux 2.37
[user1@server1 ~]$
Läuft nur im Browser; Konten und Passwörter sind Beispielwerte, und mit ↑↓ holst du frühere Befehle zurück (Passwörter bleiben nicht im Verlauf).

4️⃣ Unterschied zwischen sudo su und sudo -i

  • ↪️ Abgefragtes Passwort und wechselnder Ordner

sudo su führt su über sudo mit root-Rechten aus. Weil root su ausführt, wird das root-Passwort nicht abgefragt, und vorher fragt sudo das Passwort der Person ab, die es ausführt (laut offizieller Dokumentation).

Welche Konten sudo ausführen dürfen, bestimmt die /etc/sudoers-Konfiguration. Führt ein nicht berechtigtes Konto sudo aus, wird es mit [user1 is not in the sudoers file.] abgelehnt (laut Meldung im Programm).

Für jeden Befehl, der eine root-Shell öffnet, siehst du unten das abgefragte Passwort und den Arbeitsordner. Die Befehle in diesem Abschnitt wurden nicht auf einem Produktivserver ausgeführt, sondern nach den Handbüchern su(1) und sudo(8) zusammengefasst.

BefehlAbgefragtes PasswortGestartete ShellArbeitsordner
surootroot-ShellUnverändert
su -rootroot-Login-Shell/root
sudo suAusführendes Kontoroot-ShellUnverändert
sudo su -Ausführendes Kontoroot-Login-Shell/root
sudo -iAusführendes Kontoroot-Login-Shell/root
sudo -sAusführendes KontoShell aus der Variablen SHELL (root-Rechte)Unverändert

[sudo -i] und [sudo su -] enden beide in einer root-Login-Shell. Bei [sudo -i] startet sudo die Shell von root direkt als Login-Shell, während [sudo su -] dazwischen noch einmal über su geht.

[sudo -s] führt die Shell aus der Variablen SHELL mit root-Rechten aus und wechselt nicht in den Home-Ordner. Hast du das Passwort einmal richtig eingegeben, fragt sudo im selben Terminal standardmäßig 5 Minuten lang nicht erneut (laut sudoers-Handbuch).

Der Unterschied zwischen su und sudo ist wie der Unterschied, ob du dir den Hausschlüssel leihst oder dich beim Hausmeister mit Namen einträgst, um hineinzukommen.

5️⃣ Fehler beim su-Befehl

  • ↪️ This account is currently not available · Authentication failure

Wechselst du zu einem Konto ohne Anmeldemöglichkeit, läuft statt einer Shell nologin, und es erscheint [This account is currently not available.]. Als root [su daemon] ausführte, erschien nur diese eine Zeile, und der Exit-Code war 1.

su daemon
This account is currently not available.

Diese Meldung gibt das Programm nologin aus, das im letzten Feld der Kontozeile steht, und derselbe Text fand sich in /usr/sbin/nologin auf dem Server. Als root kannst du mit -s eine Shell angeben und Befehle mit diesem Konto ausführen.

Ist das Passwort falsch, erscheint [su: Authentication failure]. Dieser Text ist die Meldung, die die PAM-Bibliothek bei einer fehlgeschlagenen Authentifizierung zurückgibt. Laut offiziellem Handbuch ist der Exit-Code 1, wenn su scheitert, bevor es den Befehl ausführt.

Lehnt su ab, obwohl du das Passwort deines Kontos richtig eingegeben hast, prüfe zuerst, ob hier das Passwort des Zielkontos gefragt ist. sudo fragt das Passwort der ausführenden Person ab, su dagegen das Passwort des Kontos, zu dem du wechselst.

Gibst du einen Kontonamen ein, den es nicht gibt, erscheint [su: user user9 does not exist or the user entry does not contain all the required fields] (laut Meldung im Programm). Ursache und Prüfpunkte für jeden Fehler siehst du unten.

AusgabeUrsacheWas zu prüfen ist
This account is currently not available.Shell des Zielkontos ist nologinLetztes Feld der Kontozeile in getent passwd; als root mit -s eine Shell angeben
su: Authentication failurePasswort falschOb es das Passwort des Zielkontos ist (sudo fragt dein eigenes)
su: user user9 does not exist …Kein Konto mit diesem Namengetent passwd Kontoname
user1 is not in the sudoers file.Konto ohne sudo-Berechtigungsudoers-Einstellungen und Gruppe wheel

🔢 FAQ & empfohlene Inhalte

Das offizielle Handbuch beschreibt su vor allem als Befehl für normale Benutzer und empfiehlt für Skripte, die root ausführt, den Befehl runuser, der ohne Authentifizierung auskommt. Die Form ist [runuser -u Konto -- Befehl].

Schreibst du hinter -w (--whitelist-environment) die Namen der Variablen, die bleiben sollen, durch Kommas getrennt, behält [su -] diese Variablen beim Leeren der Umgebung. Laut offiziellem Handbuch werden HOME, SHELL, USER, LOGNAME und PATH neu gesetzt, auch wenn sie in der Liste stehen.

Laut offiziellem Handbuch protokolliert su fehlgeschlagene Anmeldeversuche immer in der Datei btmp und schreibt nicht in die Datei lastlog. Die btmp-Einträge siehst du mit dem Befehl lastb.

ℹ️ Affiliate-Hinweis
Die Inhalte dieser Website enthalten Affiliate-Links. Kauft ein Besucher über einen dieser Links ein Produkt oder eine Dienstleistung, erhält die Website vom Verkäufer eine Provision. Der Betrag, den der Käufer zahlt(bei Aktionsrabatten sinkt er ↓), steigt dadurch nicht. Angegebene Preise, Rabatte und Lagerbestände entsprechen dem Stand bei Erstellung und können abweichen; prüfe sie daher vor dem Kauf beim Verkäufer. Produkte werden nach eigenen Kriterien ausgewählt und bewertet, und Provisionen beeinflussen weder die Reihenfolge noch den Inhalt der Bewertungen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Beweisen Sie, dass Sie ein Mensch sind: 10   +   3   =