su vs. sudo -s vs. sudo -i vs. sudo bash

su vs. sudo -s vs. sudo -i vs. sudo bash

Was ist der Unterschied zwischen den folgenden Befehlen:

su
sudo -s
sudo -i
sudo bash

Ich weiß, dass suich dafür das Root-Passwort kennen muss und dass sudoich in der Datei sein muss sudoers, aber was macht der Unterschied, wenn es einmal ausgeführt wird?

Ich weiß, dass es einen Unterschied zwischen suund gibt sudo -s, weil mein Home-Verzeichnis /roothinter dem Ausführen von steht su, aber mein Home-Verzeichnis steht immer noch /home/mynamehinter sudo -s. Ich vermute jedoch, dass dies nur ein Symptom eines zugrunde liegenden Unterschieds ist, den ich übersehe.

Antwort1

Mit sudirwerdenein anderer Benutzer – standardmäßig root, aber möglicherweise auch ein anderer Benutzer. Wenn Sie sagen su -, wird Ihre Umgebung auch durch die Anmeldeumgebung dieses Benutzers ersetzt, sodass das, was Sie sehen, nicht von der Anmeldung als dieser Benutzer zu unterscheiden ist. Das System kann nicht unterscheiden, was Sie tun, während Sie sumit einem anderen Benutzer verbunden sind, von den Aktionen dieses Benutzers, wenn er sich anmeldet.

Ganz anders verhält es sich bei sudo:

  • Befehle, die Sie ausführensudo ausführenals Zielbenutzer (standardmäßig root, kann aber geändert werden -u) –, aber es protokolliert die Befehle, die Sie darüber ausführen, und kennzeichnet sie mit Ihrem Benutzernamen, sodass im Nachhinein die Schuld zugewiesen werden kann. :)

  • sudoist sehr flexibel. Sie können beispielsweise die Befehle einschränken, die ein bestimmter Benutzer oder eine bestimmte Benutzergruppe ausführen darf. Bei sugilt alles oder nichts.

    Diese Funktion wird normalerweise zum Definieren von Rollen verwendet. Sie können beispielsweise eine Gruppe „Backups“ definieren, die ausgeführt werden darf dumpund tar, wobei jedes davon Root-Zugriff benötigt, um die Systemfestplatte ordnungsgemäß zu sichern.

    Ich erwähne dies hier, weil es bedeutet, dass Sie jemandem Privilegien erteilen können, sudoohne ihm sudo -soder sudo bashFähigkeiten zu geben. Sie haben nur die Berechtigungen, die sie für ihre Arbeit benötigen, während susie mit das gesamte System steuern können. Sie müssen dabei jedoch vorsichtig sein: Wenn Sie jemandem sudo vibeispielsweise die Möglichkeit geben, zu sagen, dass er ausgeben kann viund effektiv die gleiche Macht hat wie mit sudo -s.

  • Da es das Sudoer-Passwort anstelle des Root-Passworts verwendet, sudowerden die Berechtigungen zwischen mehreren Sudoern isoliert.

    Dies löst ein Verwaltungsproblem mit su, nämlich dass bei einer Änderung des Root-Passworts alle, die es kennen mussten, suinformiert werden mussten. sudoermöglicht die unabhängige Änderung der Passwörter der Sudo-Benutzer. Tatsächlich ist es auf einem System mit üblich, das Konto des Root-Benutzers mit einem Passwort zu sperren, um sudozu erzwingen, dass alle Sysadmin-Aufgaben über ausgeführt werden sudo. In einer großen Organisation mit vielen vertrauenswürdigen Sudo-Benutzern bedeutet dies, dass Sie das Root-Passwort nicht ändern und an die verbleibenden Admins weitergeben müssen, wenn einer der Sysadmins das Unternehmen verlässt.

Die Hauptunterschiede zwischen sudo bashund sudo -ssind:

  1. -sist kürzer alsbash

  2. Sie können angeben, sudo -s some-commanddass es unter Ihrer Standard-Shell ausgeführt werden soll some-command, jedoch mit Superuser-Berechtigungen. Dies ist im Grunde eine Abkürzung für sudo $SHELL -c some-command.

  3. Sie können die Befehle auch an die Standardeingabe der Shell übergeben, z. B. sudo -s < my-shell-script. Sie können dies mit einemhierdocum mehrere Befehle an einen einzigen sudoAnruf zu senden und so die wiederholte Eingabe zu vermeiden sudo.

  4. Auch ohne diese zusätzlichen Befehlsargumente sudo -sunterscheidet sich immer noch von sudo bashdarin, dass es möglicherweise eine andere Shell ausführt als bash, da es zuerst in der SHELLUmgebungsvariablen und dann (wenn diese nicht festgelegt ist) in den Shell-Anmeldeeinstellungen Ihres Benutzers nachsieht, normalerweise in /etc/passwd.

Die von ausgeführte Shell sudo -sübernimmt Ihre aktuelle Benutzerumgebung. Wenn Sie tatsächlich eine saubere Umgebung möchten, wie Sie sie direkt nach der Anmeldung erhalten, benötigen Sie stattdessen sudo -i, eine relativ neue Ergänzung zu sudo. Grob gesagt sudo -iverhält sich zu sudo -swie su -zu su: Es setzt alle Umgebungsvariablen bis auf ein paar wichtige zurück und schickt Sie zurück in das Home-Verzeichnis Ihres Benutzers. Wenn Sie ihm nicht auch Befehle zum Ausführen unter dieser Shell über die Standardeingabe oder geben sudo -i some-command, wird diese Shell als interaktive Anmeldeshell ausgeführt, sodass die Shell-Startskripte Ihres Benutzers (z. B. .bash_profile) erneut ausgeführt werden.

All dies macht es sudo -iwesentlich sicherer als sudo -s. Warum? Denn wenn jemand Ihre Umgebung vor ändern kann sudo -s, könnte er die Ausführung unbeabsichtigter Befehle verursachen. Der offensichtlichste Fall ist die Änderung von SHELL, aber es kann auch weniger direkt passieren, z. B. über , wenn Sie während unter PAGERsagen .man foosudo -s

Sie könnten sagen: „Wenn sie ändern können PAGER, können sie ändern und dann einfach ein böses Programm PATHersetzen “, aber jemand, der paranoid genug ist, kann sagen , dass er diese Falle vermeiden kann. Sie sind wahrscheinlich nicht so paranoid, dass Sie auch die Fallen in allen anderen vermeiden.sudo/usr/bin/sudo /bin/bashandereanfällige Umgebungsvariablen. Haben Sie auch daran gedacht, zu überprüfen EDITOR, zum Beispiel, bevor SieVCSBefehl? Also sudo -i.

Da sudo -iIhr Arbeitsverzeichnis auch in das Stammverzeichnis Ihres Benutzers geändert wird, möchten Sie möglicherweise trotzdem verwenden, sudo -swenn Sie wissen, dass Sie in demselben Verzeichnis bleiben möchten, cdin das Sie beim Ausführen gewechselt sind sudo. Es ist jedoch immer noch sicherer, dorthin sudo -izurückzukehren cd, wo Sie waren.

Eine andere Variante von all dem, die Sie manchmal sehen, ist sudo su, was ungefähr gleichwertig ist mit sudo -s. Ebenso sudo su -ist funktional recht nah an sudo -i. Da sudound sukonkurrierende Befehle sind, ist es ein wenig seltsam, sie auf diese Weise zu paaren, daher empfehle ich, dass Sie stattdessen die Flags verwenden sudo.

Antwort2

Von einemUbuntu-Forums-BeitragIch habe vor einiger Zeit Folgendes gemacht:

Betrachten Sie das folgende Experiment:

applic@ion:~% sudo su
[sudo] password for applic:
root@ion:/home/applic# env > /tmp/sudo_su_env
root@ion:/home/applic# exit
exit
applic@ion:~% sudo -s
applic .bashrc read...
root@ion:~% env >/tmp/sudo_s

Hier sind die Unterschiede, die ich gefunden habe:

Mit sudo -s:

HOME=/home/applic
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
reads $USER's ~/.bashrc

Mit sudo su:

HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
reads /etc/environment
reads /root/.bashrc

Beachten Sie den Unterschied in $HOME. Wenn Sie Root sind und $HOMEauf das Home des normalen Benutzers eingestellt sind, kann dies zu Problemen führen. Wenn Sie beispielsweise eine grafische Anwendung ausführen, ~/.Xauthoritykann das Home des normalen Benutzers durch Root überschrieben werden. Dies führt später zu Problemen für den normalen Benutzer, z. B. dass er bestimmte grafische Anwendungen nicht über Cron ausführen kann.

Zusammenfassen:

                                     corrupted by user's 
        HOME=/root  uses root's PATH     env vars
sudo -i     Y       Y[2]                 N
sudo -s     N       Y[2]                 Y
sudo bash   N       Y[2]                 Y
sudo su     Y       N[1]                 Y
  1. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games wahrscheinlich gesetzt durch/etc/environment
  2. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

Unterm Strich ist sudo -idies der richtige Befehl, den Sie ausführen sollten, wenn Sie eine Root-Shell wünschen, die nicht durch die Benutzerumgebung beeinträchtigt wird.

Antwort3

su(SHexeSieser oderSErsatzSieser) ermöglicht Ihnen den Benutzerwechsel. suEs startet grundsätzlich eine weitere Shell-Instanz mit den Berechtigungen des gewünschten Benutzers. Standardmäßig wechselt es Sie zum rootBenutzer. Wenn wir einen bestimmten Benutzer wechseln möchten, müssen wir den Benutzer wie folgt übergeben:

$ su bob  # switches to bob (requires bob's password)

su -bedeutet, dass die Umgebungsvariablen auf Root zurückgesetzt werden und sudass die Umgebungsvariablen dem alten Benutzer entsprechen.

Beispiel: das Stammverzeichnis des Roots, wenn Sie verwenden, su -oder das alte Stammverzeichnis des Benutzers, wenn Sie verwenden su.

sudo (SobenSieserTun) ist ein Befehlszeilenprogramm, das es Benutzern ermöglicht, Programme mit den Sicherheitsberechtigungen eines anderen Benutzers auszuführen, standardmäßig ist dies Superuser, d. h. root. Es verwendet eine Konfigurationsdatei /etc/sudoers, die auflistet, welche Benutzer Rechte für bestimmte Aktionen haben

sudo sollte gelesen werden als/ˈsuːduː/. Syntax sudo command, dhSHexeSieser undTundieser Befehl.

  • suist gleichbedeutend mit sudo -ieiner Anmeldung beim Root-Konto und simuliert diese. Ihr Arbeitsverzeichnis ist /root, und es liest das von Root .profileusw. Die Eingabeaufforderung ändert sich von $ zu #, was bedeutet, dass Sie Root-Zugriff haben.

  • sudo -s startet eine Shell als Root, ändert aber nicht Ihr Arbeitsverzeichnis.

  • sudo bash wobei bashder auszuführende Befehl ist sudo. Dieser Befehl wird bashals Superuser ausgeführt.

  • Mithilfe von sudokann alles protokolliert werden, was jemand tut.
  • Durch die Verwendung sudowird verhindert, dass ein Benutzer das Root-Passwort kennen muss.
  • Mithilfe von sudokönnen wir die Befehle einschränken, die ausgeführt werden dürfen.

verwandte Informationen