Die Unterschiede zwischen Su, Sudo Su, Sudo -s und Sudo -i

Dav

Es gibt viele verschiedene Möglichkeiten, eine Root-Sitzung im Linux-Terminal zu erhalten. Dies kann zu Verwirrung führen, da die meisten Anfängerbenutzer, die Root-Rechte erlangen möchten, möglicherweise nicht mit den Unterschieden und der Funktionsweise der einzelnen Befehle vertraut sind. Hier zerlegen wir jeden der vielen verschiedenen Befehle, die verwendet werden, um Root-Zugriff in einem Terminal zu erlangen, erklären, wie sie Root-Zugriff erhalten, wann man sie verwenden sollte und alles dazwischen.

Inhaltsverzeichnis

  • su
  • su -c
  • sudo su
  • sudo -i
  • sudo -s
  • Häufig gestellte Fragen

Auch lesen: Was ist Doas und wie installiert man es

su

Der su Befehl ersetzt den aktuellen Benutzer im aktuellen Shell durch Root.

Du kannst zu jedem Benutzer wechseln, indem du su eingibst und einen Benutzernamen hinzufügst.

Dies teilt dem System mit, den aktuellen Benutzer zu wechseln (und sich im Wesentlichen abzumelden). Alternativ kann der su Befehl Root-Zugriff erhalten, indem einfach su ohne weitere Angabe eingegeben wird.

su wird am besten verwendet, wenn ein Benutzer direkten Zugriff auf das Root-Konto auf dem System benötigt. Es geht nicht über sudo oder ähnliches. Stattdessen wirst du aufgefordert, das Passwort des Root-Benutzers einzugeben, da du dich tatsächlich in dieses einloggst. Darüber hinaus haben andere Möglichkeiten, Root-Zugriff zu erhalten, nicht den Vorteil, auch Zugriff auf das Home-Verzeichnis und die Umgebung des Root-Benutzers zu erhalten.

Warnung: Die Verwendung von su ist der am wenigsten sichere Weg, um eine Root-Aktion auszuführen. Generell, wenn möglich, vermeide es.

Auch lesen: Der ultimative Leitfaden zu Apt und Apt-Get-Befehlen

su -c

Dieser Befehl übergibt andere Befehle direkt an den Root-Benutzer.

Linuxsudo Suc

Ähnlich wie das Eintippen von sudo vor einem Befehl, führt su -c einen Befehl als Root-Benutzer aus. Anstatt einfach den Befehl einzugeben, musst du ihn jedoch in Anführungszeichen setzen.

Dies ist eine schnelle Möglichkeit, einen Befehl mit erhöhten Rechten über dein Terminal auszuführen. Es ist sehr nützlich, wenn sudo irgendwie nicht verfügbar ist (es ist nicht vorinstalliert in Distributionen wie Arch Linux) oder nicht richtig funktioniert, weil es beschädigt ist.

Da du etwas direkt an Root übergibst, musst du, wenn dein Benutzer und Root-Passwort unterschiedlich sind, dein Root-Passwort zur Authentifizierung eingeben.

sudo su

Dieser Befehl fordert das Passwort des aktuellen Benutzers an, anstatt das von Root.

Es ist im Wesentlichen dasselbe wie einfach su im Terminal auszuführen, mit einem entscheidenden Unterschied: Anstatt dem System direkt zu sagen, dass es die Benutzer wechseln soll, sagst du ihm, dass es den Befehl su mit Superuser-Rechten ausführen soll. Wenn sudo su ausgeführt wird, werden „.profile“, „.bashrc“ und „/etc/profile“ gestartet, ähnlich wie beim Ausführen von su (oder su root). Wenn ein Befehl mit sudo davor ausgeführt wird, erhält er Root-Rechte.

Obwohl es keinen großen Unterschied zwischen sudo su und su gibt, ist letzteres aus einem wichtigen Grund ein sehr nützlicher Befehl: Wenn ein Benutzer su ausführt, um Root-Zugriff auf einem System zu erhalten, muss er das Root-Passwort kennen. Root wird mit sudo su gewährt, indem das Passwort des aktuellen Benutzers angefordert wird, was es möglich macht, Root ohne das Root-Passwort zu erhalten.

Dies ist in Situationen nützlich, in denen du das Root-Passwort vergessen haben könntest, wenn es sich von dem Passwort für dein Benutzerkonto unterscheidet. Während du dies in der Zwischenzeit tun könntest, solltest du das Root-Passwort irgendwann zurücksetzen.

Auch lesen: Wie man den Rm-Befehl in Linux verwendet

sudo -i

Die Verwendung von sudo -i ist praktisch dasselbe wie der Befehl sudo su mit einer Ausnahme: Es interagiert nicht direkt mit dem Root-Benutzer.

Ähnlich wie sudo su ermöglicht der -i-Schalter einem Benutzer, eine Root-Umgebung zu erhalten, ohne das Passwort des Root-Kontos zu kennen. sudo -i ist auch sehr ähnlich wie die Verwendung von sudo su: Es liest alle Umgebungsdateien („.profile“, usw.) und setzt die Umgebung innerhalb des Shells.

Der Unterschied zu sudo su besteht darin, dass sudo -i eine viel sauberere Möglichkeit ist, Root und eine Root-Umgebung zu erhalten, ohne direkt mit dem Root-Benutzer zu interagieren.

Um klarzustellen: Mit sudo su verwendest du mehr als einen Root setuid Befehl im Hintergrund. Dies macht es viel komplizierter herauszufinden, welche Umgebungsvariablen beibehalten und welche geändert werden (wenn du zur Root-Umgebung wechselst). Das ist bei sudo -i nicht der Fall. Aus diesem Grund betrachten die meisten Menschen es als die bevorzugte Methode, um Root zu erlangen, ohne sich direkt anzumelden.

In einfacheren Worten: sudo -i gibt dir ein „sauberes“ Root-Login in deinem „/root“ Verzeichnis, das das „Home“-Verzeichnis für den Root-Benutzer ist.

Auch lesen: Wie man den dd-Befehl in Linux verwendet

sudo -s

Dieser Befehl ruft eine Shell mit deiner $SHELL-Variablen auf.

Der -s Schalter für den sudo Befehl liest die $SHELL-Variablen des aktuell ausführenden Benutzers. Dieser Befehl funktioniert, als würde der Benutzer sudo /bin/bash ausführen, wenn die Shell des Benutzers bash ist.

In unserem Fall gab uns sudo -s die fish-interaktive Shell, da wir zuvor fish als unsere Standard-Shell installiert hatten, also wäre es, als hätten wir sudo /usr/bin/fish ausgeführt.

Linuxsudo Shellswitch

Sudo -s ist eine „Nicht-Login“ Shell. Im Gegensatz zu einem Befehl wie sudo -i oder sudo su, wird das System keine Umgebungsdateien lesen. Wenn ein Benutzer der Shell sagt, sudo -s auszuführen, erhält sie Root-Zugriff, ändert aber die Benutzerumgebung nicht. Dein Home-Verzeichnis wird nicht das Root-Home sein usw.

Linuxsudo Commands

Dieser Befehl wird am besten verwendet, wenn der Benutzer zu Root wechseln möchte, aber die gleiche Shell-Umgebung beibehalten möchte. Beispielsweise möchtest du möglicherweise ein fish-Skript ausführen und nicht in die Standard-bash-Shell gezwungen werden, die Root in den meisten Distributionen oft erhält.

Andere oben behandelte Befehle erlangen Root-Zugriff, geben dir jedoch auch die Shell und Umgebungsvariablen, die die Distribution für Root hat. Vielleicht möchtest du einfach nur zum Benutzer wechseln, ohne all dieses Gepäck!

Auch lesen: Grundlegende Bash-Befehle für Linux-Neulinge

Häufig gestellte Fragen

Warum ist die Shell, die ich benutze, wichtig?

Wenn du eine unmodifizierte Bash-Shell für dein Benutzerkonto verwendest, besteht der Unterschied hauptsächlich in der Philosophie. In den meisten Fällen führt das Erhöhen auf Root durch eine der Shells nicht zu einer merklichen Veränderung. Wenn du jedoch etwas anderes verwendest, wirst du sofort bemerken, wie unterschiedlich die Dinge sein können!

Angenommen, du verwendest die Fish-Shell für dein Benutzerkonto und behältst die Root-Shell in Bash. Das Laden der Benutzershell durch die Verwendung von sudo -s führt zu einem drastisch anderen Ergebnis.

Die Shell wird der Konfiguration folgen, die du im Home-Verzeichnis des Root-Benutzers hast. Wenn du so etwas nicht hast, wird einfach die Standardkonfiguration anstelle deiner persönlichen geladen. (In unserem Fall wäre das „~/.config/fish/config.fish“.) Für alle praktischen Zwecke ist es am besten, die Dinge so zu belassen, anstatt die Benutzerkonfiguration nach „/root“ zu kopieren.

Der Wechsel zur Shell deines Benutzerkontos beim Wechseln zu Root sollte nur erfolgen, wenn du ein Skript ausführen musst, das unbedingt diese bestimmte Shell benötigt.

Kann der Zugriff auf Root mein System schädigen?

In einigen Fällen, ja. Wenn du dir nicht absolut sicher bist, dass du Root für alles in einer bestimmten Terminalsitzung benötigst, ist es oft besser, einfach sudo gefolgt von einem Befehl einzugeben, um Root für diesen bestimmten Befehl zuzugreifen. Zum Beispiel würde das Eintippen von sudo apt install vlc in jeder Debian-basierten Version von Linux dem Betriebssystem sagen, dass es Root zugreifen soll, um nur den APT-Paketmanager zur Installation von VLC auszuführen.

Ein sehr wichtiger Vorbehalt beim Ausführen von sudo -i oder einer anderen Variante, die wir zuvor besprochen haben, im Gegensatz zum Eingeben von sudo vor jedem Befehl, den du als Root ausführen möchtest, besteht darin, dass letzteres deine Befehlshistorie nicht in „/var/log/auth.log“ protokolliert. Wenn du einen Fehler machst, kannst du nicht zurückgehen und überprüfen, was du getan hast, um es zu korrigieren. Du musst aus dem Gedächtnis arbeiten, da Root-Sitzungen nicht aufgezeichnet werden.

Wenn ich „sudo“ vor einem Befehl eingebe, welche Variante von „sudo su“ führe ich aus?

Indem du sudo eingibst, um einen Befehl auszuführen (d.h. du tippst es in derselben Zeile wie den Befehl, den du ausführen möchtest), führst du ihn im Wesentlichen in einer interaktiven Root-Shell aus. Dies wäre das, was der sudo -s Standalone-Befehl tut. Es ist auch sehr ähnlich wie das Ausführen des su -c Befehls.

Alle Screenshots von Miguel Leiva-Gomez.