Mit suwerden Sie ein anderer Benutzer - standardmäßig root, möglicherweise jedoch ein anderer Benutzer. Wenn Sie sagen su -, wird Ihre Umgebung auch durch die Anmeldeumgebung dieses Benutzers ersetzt, sodass nicht zu unterscheiden ist, was Sie sehen, wenn Sie sich als dieser Benutzer anmelden. Auf keinen Fall kann das System sueinem anderen Benutzer anhand der Aktionen dieses Benutzers beim Anmelden mitteilen, was Sie tun, während er sich anmeldet.
Ganz anders sieht es aus mit sudo:
Befehle, die Sie sudo ausführen, werden als Zielbenutzer ausgeführt - standardmäßig root, aber änderbar mit -u-, aber es protokolliert die Befehle, die Sie ausführen, und markiert sie mit Ihrem Benutzernamen, damit die Schuld später 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. Mit su, es ist alles oder nichts.
Diese Funktion wird normalerweise zum Definieren von Rollen verwendet. Sie können beispielsweise eine "Backups" -Gruppe definieren, die ausgeführt werden darf dumpund die tarjeweils Root-Zugriff benötigt, um die Systemfestplatte ordnungsgemäß zu sichern.
Ich erwähne dies hier, weil es bedeutet, dass Sie jemandem sudoPrivilegien geben können, ohne ihm sudo -soder seinen sudo bashFähigkeiten zu verleihen . Sie haben nur die Berechtigungen, die sie für ihre Arbeit benötigen, während susie über das gesamte System verfügen. Dabei muss man allerdings vorsichtig sein: Wenn man jemandem die Möglichkeit gibt sudo vi, beispielsweise zu sagen , vidass er die gleiche Kraft wie mit ausschütten und effektiv haben kann sudo -s.
Isoliert die sudoBerechtigung zwischen mehreren Sudoern, da das Passwort des Sudoers anstelle des Root-Passworts verwendet wird .
Dies behebt ein administratives Problem su, bei dem bei einer Änderung des Root-Passworts alle Personen informiert werden mussten, die es wissen mussten, um es zu verwenden su. sudoErmöglicht es den Sudoern, ihre Passwörter unabhängig zu ändern. Tatsächlich ist es üblich, das Konto des Root-Benutzers auf einem System mit einem Kennwort zu sperren, um sudozu erzwingen, dass alle Sysadmin-Aufgaben über ausgeführt werden sudo. In einer großen Organisation mit vielen vertrauenswürdigen Sudoern bedeutet dies, dass Sie beim Verlassen eines der Sysadmins das Root-Kennwort nicht ändern und an die verbleibenden Administratoren weitergeben müssen.
Der Hauptunterschied zwischen sudo bashund sudo -sbesteht darin, dass -ses kürzer ist und Sie auf verschiedene Arten Befehle übergeben können, die in der Standard-Shell Ihres Benutzers ausgeführt werden sollen:
Sie können sagen, sudo -s some-commandwas some-commandunter Ihrer Shell läuft . Es ist im Grunde eine Abkürzung für sudo $SHELL -c some-command.
Sie können die Befehle stattdessen wie folgt an die Standardeingabe der Shell übergeben sudo -s < my-shell-script. Sie können dies mit einem heredoc verwenden , um mehrere Befehle an einen einzigen sudoAufruf zu senden , ohne dass Sie sudowiederholt tippen müssen .
Beide Verhaltensweisen sind optional. Weitaus häufiger geben Sie -sallein, sodass die Shell Ihres Benutzers nur interaktiv ausgeführt wird. In diesem Modus unterscheidet es sich davon, sudo bashdass möglicherweise eine andere Shell ausgeführt wird als bash, da diese zuerst in der SHELLUmgebungsvariablen und dann, wenn diese nicht festgelegt ist, in der Login-Shell-Einstellung Ihres Benutzers (normalerweise in) angezeigt wird /etc/passwd.
Die Shell, die von ausgeführt wird, sudo -serbt Ihre aktuelle Benutzerumgebung. Wenn Sie tatsächlich eine saubere Umgebung wünschen, wie Sie sie direkt nach der Anmeldung erhalten, möchten Sie stattdessen sudo -ieine relativ neue Erweiterung von sudo. Grob gesagt, sudo -iist es , sudo -swie su -ist su: es alle , aber ein paar wichtige Umgebungsvariablen setzt und sendet Sie zurück zu Ihrem Home - Verzeichnis des Benutzers. Wenn Sie ihm nicht auch Befehle zur Ausführung 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 sudo -iwesentlich sicherer als sudo -s. Warum? Denn wenn jemand Ihre Umgebung zuvor ändern kann sudo -s, kann dies dazu führen, dass unbeabsichtigte Befehle ausgeführt werden. Der naheliegendste Fall ist das Ändern SHELL, aber es kann auch weniger direkt vorkommen, z. B. über, PAGERwenn Sie sagen, man foowährend Sie unter sind sudo -s.
Sie könnten sagen: "Wenn sie etwas modifizieren können PAGER, können PATHsie etwas modifizieren und dann einfach ein böses sudoProgramm ersetzen ", aber jemand, der paranoid genug ist, kann dies sagen /usr/bin/sudo /bin/bash, um diese Falle zu umgehen. Sie sind wahrscheinlich nicht so paranoid, dass Sie auch die Fallen in allen anderen anfälligen Umgebungsvariablen meiden . Haben Sie EDITORzum Beispiel auch daran gedacht, dies zu überprüfen , bevor Sie einen VCS- Befehl ausgeführt haben? Also sudo -i.
Da sudo -iauch das Arbeitsverzeichnis zu Ihrem Benutzer-Home - Verzeichnis ändert, können Sie immer noch verwenden sudo -sfür Situationen , in denen Sie wissen , dass Sie im gleichen Verzeichnis bleiben wollen wurden Sie cd‚d in , wenn Sie läuft sudo. Es ist immer noch sicherer sudo -iund cdzurück, wo Sie waren, though.
sudo su -diese Weise benötigen Sie kein root-Passwort und stellen-sicher, dass das Home-Verzeichnis richtig eingestellt ist.