Den Unterschied zwischen sudo und su verstehen

In diesem Artikel werden wir das „su“-Kommando im Detail besprechen und auch, wie es sich von dem „sudo“-Kommando unterscheidet. Alle in diesem Tutorial erwähnten Anweisungen und Beispiele auf Ubuntu 20.04 und Ubuntu 22.04 getestet.

Der su-Befehl unter Linux

Die Hauptarbeit des su-Befehls besteht darin, dass Sie während einer Anmeldesitzung zu einem anderen Benutzer wechseln können. Mit anderen Worten, das Tool ermöglicht es Ihnen, die Identität eines anderen Benutzers anzunehmen, ohne dass Sie sich ausloggen und dann (als dieser Benutzer) einloggen müssen.

Der su-Befehl wird meist verwendet, um zum Superuser/root-Konto zu wechseln (da während der Arbeit an der Befehlszeile häufig Root-Rechte benötigt werden), aber – wie bereits erwähnt – können Sie ihn auch verwenden, um zu jedem anderen, nicht root-orientierten Benutzer zu wechseln.

So können Sie mit diesem Befehl zum Benutzer root wechseln:

Das su cmmand ohne Kommandozeilenoptionen

Das für diesen Befehl erforderliche Passwort ist ebenfalls vom Benutzer root. Im Allgemeinen erfordert der Befehl su also die Eingabe des Passworts des Zielbenutzers. Nach der Eingabe des richtigen Passworts startet das Tool eine Untersitzung innerhalb der bestehenden Sitzung auf dem Terminal.

su –

Es gibt eine weitere Möglichkeit, zum Benutzer root zu wechseln: Führen Sie den Befehl ’su -‚ aus:

Das su - Kommando

Was ist nun der Unterschied zwischen ’su‘ und ’su -‚ ? Nun, erstere behält die Umgebung des alten/ursprünglichen Benutzers auch nach dem Wechsel zu root bei, während letztere eine neue Umgebung (wie durch die ~/.bashrc des Benutzers root vorgegeben) schafft, ähnlich wie beim expliziten Einloggen als root-Benutzer vom Anmeldebildschirm aus.

Die Man Page von ’su‘ macht es auch deutlich:

The optional argument - may be used to provide an environment similar to what the user would expect had the user logged in directly.

Sie werden also zustimmen, dass es sinnvoller ist, sich mit ’su -‚ anzumelden.

  • Manchmal kann es für einen Systemadministrator vorteilhaft sein, das Shell-Konto eines normalen Benutzers statt seines eigenen zu verwenden. Insbesondere ist es gelegentlich die effizienteste Art und Weise, das Problem eines Benutzers zu lösen, sich in dessen Konto einzuloggen, um das Problem zu reproduzieren oder zu debuggen.
  • In vielen Situationen ist es jedoch nicht wünschenswert oder sogar gefährlich, dass der Root-Benutzer vom Shell-Account eines gewöhnlichen Benutzers und mit den Umgebungsvariablen dieses Accounts arbeitet, statt von seinem eigenen. Bei der versehentlichen Verwendung des Shell-Accounts eines normalen Benutzers könnte root ein Programm installieren oder andere Änderungen am System vornehmen, die nicht das gleiche Ergebnis wie bei der Verwendung des Root-Accounts hätten. Zum Beispiel könnte ein Programm installiert werden, das dem normalen Benutzer die Möglichkeit gibt, versehentlich das System zu beschädigen oder unautorisierten Zugang zu bestimmten Daten zu erhalten.

Hinweis: Falls Sie nach – in ’su -‚ weitere Argumente übergeben wollen, dann sollten Sie die Befehlszeilenoption -l verwenden, die der Befehl anbietet (statt -). Hier ist die Definition von – und die -l Kommandozeilenoption:

-, -l, --login
Provide an environment similar to what the user would expect had the user logged in directly.

When – is used, it must be specified as the last su option. The other forms (-l and –login) do not have this restriction.

su -c

Es gibt noch eine weitere erwähnenswerte Option des ’su‘-Befehls: -c. Damit können Sie einen Befehl bereitstellen, den Sie nach dem Wechsel zum Zielbenutzer ausführen möchten.

Die Manpage von ’su‘ erklärt es als:

-c, --command COMMAND
 Specify a command that will be invoked by the shell using its -c.

The executed command will have no controlling terminal. This option cannot be used to execute interactive programs which need a controlling TTY.

Betrachten Sie die folgende Beispielvorlage:

su [target-user] -c [command-to-run]

In diesem Fall wird also der ‚Befehl zur Ausführung‘ wie ausgeführt:

[shell] -c [command-to-run]

Wobei ’shell‘ durch die in der Datei /etc/passwd definierte ‚target-user‘-Shell ersetzt würde.

Sudo versus Su

Da wir nun auch die Grundlagen des „su“-Kommandos diskutiert haben, ist es an der Zeit, die Unterschiede zwischen dem „sudo“- und dem „su“-Kommando zu erörtern.

Kennwort

Der Hauptunterschied zwischen den beiden ist das Passwort, das sie benötigen: Während ’sudo‘ das Passwort des aktuellen Benutzers erfordert, verlangt ’su‘ die Eingabe des Passworts des Root-Benutzers.

Ganz klar, ’sudo‘ ist eine bessere Alternative zwischen beiden, was die Sicherheit betrifft. Betrachten Sie beispielsweise den Fall, dass der Computer von mehreren Benutzern verwendet wird, die ebenfalls Root-Zugriff benötigen. Die Verwendung von „su“ in einem solchen Szenario bedeutet, dass das Root-Passwort mit allen geteilt wird, was im Allgemeinen keine gute Praxis ist.

Falls Sie einem bestimmten Benutzer den Superuser/Root-Zugriff entziehen wollen, besteht die einzige Möglichkeit darin, das Root-Passwort zu ändern und das neue Root-Passwort dann unter allen anderen Benutzern neu zu verteilen.

Mit Sudo hingegen können Sie diese beiden Szenarien mühelos bewältigen. Da ’sudo‘ von den Benutzern die Eingabe eines eigenen Passworts verlangt, müssen Sie das Root-Passwort nicht allen Benutzern mitteilen. Und um einen bestimmten Benutzer daran zu hindern, auf die Root-Privilegien zuzugreifen, müssen Sie nur den entsprechenden Eintrag in der Datei ’sudoers‘ ändern.

Standardverhalten

Der andere Unterschied zwischen den beiden Befehlen besteht in ihrem Standardverhalten. Während ’sudo‘ Ihnen nur die Ausführung eines einzigen Befehls mit erhöhten Rechten erlaubt, startet der Befehl ’su‘ eine neue Shell, die es Ihnen erlaubt, so viele Befehle mit Root-Rechten auszuführen, wie Sie wollen, bis Sie diesen Verkauf explizit beenden.

Das Standardverhalten des Befehls ’su‘ ist also potenziell gefährlich, da der Benutzer die Möglichkeit hat, die Tatsache zu vergessen, dass er als root arbeitet, und versehentlich einige nicht wiederherstellbare Änderungen vornehmen könnte (z.B. den Befehl ‚rm -rf‘ im falschen Verzeichnis ausführen). Eine ausführliche Diskussion darüber, warum es nicht ermutigt wird, immer als Wurzel zu arbeiten, finden Sie hier.

Protokollierung

Obwohl Befehle, die durch ’sudo‘ ausgeführt werden, als Zielbenutzer (der standardmäßig ‚root‘ ist) ausgeführt werden, werden sie mit dem Benutzernamen des sudoers getaggt. Aber im Falle von ’su‘ ist es nicht möglich, direkt nachzuvollziehen, was ein Benutzer nach dem Verlassen des Root-Accounts getan hat.

Flexibilität

Der Befehl ’sudo‘ ist insofern viel flexibler, als Sie sogar die Befehle einschränken können, auf die die Sudo-Benutzer Zugriff haben sollen. Mit anderen Worten: Benutzer mit Zugriff auf ’sudo‘ können nur auf die Befehle zugreifen, die für ihre Arbeit erforderlich sind. Mit ’su‘ ist das jedoch nicht möglich – entweder hat man das Privileg, alles oder nichts zu tun.

Der „sudo su“ Befehl

Vermutlich aufgrund der potenziellen Risiken, die mit der Verwendung von ’su‘ oder der direkten Anmeldung als root verbunden sind, deaktivieren einige Linux-Distributionen – wie Ubuntu – standardmäßig das root-Benutzerkonto. Benutzer werden ermutigt, ’sudo‘ zu benutzen, wann immer sie Root-Privilegien benötigen.

Sie können jedoch immer noch erfolgreich ’su‘ machen, d.h. ohne Eingabe des Root-Passwortes. Sie müssen nur den folgenden Befehl ausführen:

sudo su

Da Sie den Befehl mit ’sudo‘ ausführen, müssen Sie nur Ihr Passwort eingeben. Sobald das erledigt ist, wird der Befehl ’su‘ als root ausgeführt, d.h. es wird nicht nach Passwörtern gefragt.

PS: Falls Sie den Root-Account auf Ihrem System aktivieren wollen (obwohl davon dringend abgeraten wird, da Sie immer ’sudo‘ oder ’sudo su‘ verwenden können), müssen Sie das Root-Passwort manuell setzen, was Sie mit dem folgenden passwd Befehl tun können:

sudo passwd root

Weitere Tutorials aus unserer Linux Command Tutorial Serie:

Das könnte dich auch interessieren …