GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verstehen des Unterschieds zwischen dem Befehl sudo und su unter Linux

In einem unserer früheren Artikel haben wir den Befehl „sudo“ ausführlich besprochen. Gegen Ende dieses Tutorials wurde in einer kleinen Notiz ein weiterer ähnlicher Befehl „su“ erwähnt. Nun, in diesem Artikel werden wir den 'su'-Befehl im Detail besprechen und wie er sich vom 'sudo'-Befehl unterscheidet.

Aber bevor wir das tun, beachten Sie bitte, dass alle in diesem Tutorial erwähnten Anweisungen und Beispiele auf Ubuntu 18.04 LTS und Debian 10 getestet wurden.

Der su-Befehl in Linux

Die Hauptaufgabe des Befehls su besteht darin, Sie während einer Anmeldesitzung zu einem anderen Benutzer wechseln zu lassen. Mit anderen Worten:Mit dem Tool können Sie die Identität eines anderen Nutzers annehmen, ohne sich abmelden und dann (als dieser Nutzer) anmelden zu müssen.

Der su-Befehl wird meistens verwendet, um zum Superuser-/Root-Konto zu wechseln (da Root-Rechte häufig erforderlich sind, während auf der Befehlszeile gearbeitet wird), aber – wie bereits erwähnt – können Sie ihn verwenden, um zu jedem anderen Nicht-Root-Benutzer als zu wechseln gut.

So können Sie diesen Befehl verwenden, um zum Root-Benutzer zu wechseln:

Das für diesen Befehl erforderliche Passwort ist ebenfalls das des Root-Benutzers. Im Allgemeinen erfordert der Befehl su also die Eingabe des Passworts des Zielbenutzers. Nachdem das richtige Passwort eingegeben wurde, startet das Tool eine Untersitzung innerhalb der bestehenden Sitzung auf dem Terminal.

su -

Es gibt eine andere Möglichkeit, zum Root-Benutzer zu wechseln:Führen Sie den Befehl „su -“ aus:

Was ist nun der Unterschied zwischen 'su' und 'su -' ? Nun, Ersteres behält die Umgebung des alten/ursprünglichen Benutzers bei, auch nachdem der Wechsel zum Root-Benutzer vorgenommen wurde, während Letzteres eine neue Umgebung erstellt (wie von ~/.bashrc des Root-Benutzers vorgegeben), ähnlich wie in dem Fall, in dem Sie melden sich ausdrücklich als Root-Benutzer über den Anmeldebildschirm an.

WICHTIG für Benutzer von Debian 10. Die PATH-Variable des Root-Benutzers unterscheidet sich unter Debian 10 bei Verwendung von „su“ von „su -“, Verzeichnisse wie /sbin fehlen, wenn nur „su“ verwendet wird, was bedeutet, dass Sie selbst bei der grundlegenden Systemverwaltung möglicherweise Fehler „Befehl nicht gefunden“ erhalten Befehle. Verwenden Sie also immer 'su -' auf Debian 10, um Root-Benutzer zu werden.

Die Manpage 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 das Einloggen mit 'su -' sinnvoller ist. Aber da es auch den 'su'-Befehl gibt, könnte man sich fragen, wann das nützlich ist. Der folgende Auszug – entnommen aus der Wiki-Website von ArchLinux – vermittelt eine gute Vorstellung von den Vorteilen und Fallstricken des Befehls „su“:

  • Manchmal kann es für einen Systemadministrator vorteilhaft sein, das Shell-Konto eines gewöhnlichen Benutzers anstelle seines eigenen zu verwenden. Insbesondere ist es gelegentlich der effizienteste Weg, das Problem eines Benutzers zu lösen, sich beim Konto dieses Benutzers anzumelden, um das Problem zu reproduzieren oder zu debuggen.
  • In vielen Situationen ist es jedoch nicht wünschenswert, oder es kann sogar gefährlich sein, wenn der Root-Benutzer vom Shell-Konto eines gewöhnlichen Benutzers und mit den Umgebungsvariablen dieses Kontos statt von seinen eigenen aus arbeitet. Während Root versehentlich das Shell-Konto eines normalen Benutzers verwendet, könnte er ein Programm installieren oder andere Änderungen am System vornehmen, die nicht das gleiche Ergebnis haben würden, als wenn sie unter Verwendung des Root-Kontos vorgenommen würden. Beispielsweise könnte ein Programm installiert werden, das dem normalen Benutzer die Möglichkeit gibt, das System versehentlich zu beschädigen oder unbefugten Zugriff auf bestimmte Daten zu erlangen.

Hinweis:Falls Sie nach - in 'su -' weitere Argumente übergeben möchten, sollten Sie die Befehlszeilenoption -l verwenden, die der Befehl anbietet (anstelle von -). Hier ist die Definition von - und der Befehlszeilenoption -l:

-, -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 eine weitere erwähnenswerte Option des 'su'-Befehls:-c. Damit können Sie einen Befehl angeben, den Sie ausführen möchten, nachdem Sie zum Zielbenutzer gewechselt haben.

Die Manpage von 'su' erklärt es wie folgt:

-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 „Ausführungsbefehl“ wie folgt ausgeführt:

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

Wobei „Shell“ durch die in /etc/passwd definierte Shell „Zielbenutzer“ ersetzt würde Datei.

Sudo vs. Su

Da wir nun auch die Grundlagen des 'su'-Befehls besprochen haben, ist es an der Zeit, die Unterschiede zwischen den 'sudo'- und 'su'-Befehlen zu diskutieren.

Passwort

Der Hauptunterschied zwischen den beiden ist das erforderliche Passwort:Während 'sudo' das Passwort des aktuellen Benutzers erfordert, erfordert 'su' die Eingabe des Root-Benutzerpassworts.

Ganz klar, 'sudo' ist in Bezug auf die Sicherheit die bessere Alternative zwischen den beiden. Betrachten Sie beispielsweise den Fall, dass ein Computer von mehreren Benutzern verwendet wird, die auch Root-Zugriff benötigen. Die Verwendung von 'su' in einem solchen Szenario bedeutet, das Root-Passwort mit allen zu teilen, was im Allgemeinen keine gute Praxis ist.

Falls Sie außerdem den Superuser-/Root-Zugriff eines bestimmten Benutzers widerrufen möchten, besteht die einzige Möglichkeit darin, das Root-Passwort zu ändern und das neue Root-Passwort dann an alle anderen Benutzer neu zu verteilen.

Mit Sudo hingegen können Sie beide Szenarien mühelos bewältigen. Da „sudo“ die Benutzer dazu auffordert, ihr eigenes Passwort einzugeben, müssen Sie das Root-Passwort gar nicht erst mit allen Benutzern teilen. Und um einen bestimmten Benutzer daran zu hindern, auf Root-Privilegien zuzugreifen, müssen Sie lediglich den entsprechenden Eintrag in der 'sudoers'-Datei anpassen.

Standardverhalten

Der andere Unterschied zwischen den beiden Befehlen liegt in ihrem Standardverhalten. Während Sie mit „sudo“ nur einen einzigen Befehl mit erhöhten Rechten ausführen können, startet der Befehl „su“ eine neue Shell, mit der Sie beliebig viele Befehle mit Root-Rechten ausführen können, bis Sie diesen Verkauf explizit beenden.

Daher ist das Standardverhalten des Befehls „su“ potenziell gefährlich, da der Benutzer die Tatsache vergessen kann, dass er als Root arbeitet, und versehentlich einige nicht wiederherstellbare Änderungen vornehmen kann (z. B. den Befehl „rm -rf“ falsch ausführen). Verzeichnis). Eine ausführliche Diskussion darüber, warum es nicht empfohlen wird, immer als Root zu arbeiten, finden Sie hier.

Protokollierung

Obwohl Befehle, die über „sudo“ ausgeführt werden, als Zielbenutzer (der standardmäßig „root“ ist) ausgeführt werden, werden sie mit dem Benutzernamen des sudoers gekennzeichnet. Aber im Fall von 'su' ist es nicht möglich, direkt nachzuvollziehen, was ein Benutzer getan hat, nachdem er sich mit dem Root-Konto angemeldet hat.

Flexibilität

Der Befehl „sudo“ ist weitaus flexibler, da Sie sogar die Befehle einschränken können, auf die die Sudo-Benutzer Zugriff haben sollen. Mit anderen Worten, Benutzern mit Zugriff auf „sudo“ können nur Zugriff auf Befehle gewährt werden, die für ihre Arbeit erforderlich sind. Mit 'su' ist das jedoch nicht möglich - entweder haben Sie das Privileg, alles oder nichts zu tun.

Sudo-su

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. Benutzern wird empfohlen, "sudo" zu verwenden, wenn sie Root-Rechte benötigen.

Sie können jedoch immer noch erfolgreich 'su' ausführen, dh ohne das Root-Passwort einzugeben. Sie müssen lediglich den folgenden Befehl ausführen:

sudo su

Da Sie den Befehl mit „sudo“ ausführen, müssen Sie nur Ihr Passwort eingeben. Sobald dies erledigt ist, wird der 'su'-Befehl als root ausgeführt, was bedeutet, dass er nicht nach Passwörtern fragt.

PS :Falls Sie das Root-Konto auf Ihrem System aktivieren möchten (obwohl davon dringend abgeraten wird, da Sie immer 'sudo' oder 'sudo su' verwenden können), müssen Sie das Root-Passwort manuell festlegen, womit Sie dies tun können folgenden Befehl:

sudo passwd root

Schlussfolgerung

Sowohl dieses als auch unser vorheriges Tutorial (das sich auf „sudo“ konzentriert) sollten Ihnen eine gute Vorstellung von den verfügbaren Tools geben, mit denen Sie Aufgaben erledigen können, die eskalierte (oder einen völlig anderen Satz von) Berechtigungen erfordern. Falls Sie etwas über „su“ oder „sudo“ mitzuteilen haben oder Ihre eigenen Erfahrungen mitteilen möchten, können Sie dies gerne in den Kommentaren unten tun.


Linux
  1. Lernen Sie den Unterschied zwischen den Befehlen „su“ und „su -“ in Linux kennen

  2. Unterschied zwischen den Befehlen „su“ und „su -“ in Linux

  3. Der Unterschied zwischen [[ $a ==Z* ]] und [ $a ==Z* ]?

  4. Der Unterschied zwischen Benutzer- und Dienstkonto?

  5. Linux – Unterschied zwischen User Space und Kernel Space?

Der Unterschied zwischen sudo und su erklärt

Was ist der Unterschied zwischen Linux und Unix?

Was ist der Unterschied zwischen apt und dem Befehl apt-get?

Was ist der Unterschied zwischen einem normalen Benutzer und einem Systembenutzer?

Verstehen des Zeitbefehls in Linux

Was ist der Unterschied zwischen dem Befehl „locate“ und „find“ in Linux?