Mit su
werden 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 su
einem 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. :)
sudo
ist 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 dump
und die tar
jeweils Root-Zugriff benötigt, um die Systemfestplatte ordnungsgemäß zu sichern.
Ich erwähne dies hier, weil es bedeutet, dass Sie jemandem sudo
Privilegien geben können, ohne ihm sudo -s
oder seinen sudo bash
Fähigkeiten zu verleihen . Sie haben nur die Berechtigungen, die sie für ihre Arbeit benötigen, während su
sie über das gesamte System verfügen. Dabei muss man allerdings vorsichtig sein: Wenn man jemandem die Möglichkeit gibt sudo vi
, beispielsweise zu sagen , vi
dass er die gleiche Kraft wie mit ausschütten und effektiv haben kann sudo -s
.
Isoliert die sudo
Berechtigung 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
. sudo
Ermö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 sudo
zu 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 bash
und sudo -s
besteht darin, dass -s
es 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-command
was some-command
unter 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 sudo
Aufruf zu senden , ohne dass Sie sudo
wiederholt tippen müssen .
Beide Verhaltensweisen sind optional. Weitaus häufiger geben Sie -s
allein, sodass die Shell Ihres Benutzers nur interaktiv ausgeführt wird. In diesem Modus unterscheidet es sich davon, sudo bash
dass möglicherweise eine andere Shell ausgeführt wird als bash
, da diese zuerst in der SHELL
Umgebungsvariablen 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 -s
erbt 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 -i
eine relativ neue Erweiterung von sudo
. Grob gesagt, sudo -i
ist es , sudo -s
wie 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 -i
wesentlich 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, PAGER
wenn Sie sagen, man foo
während Sie unter sind sudo -s
.
Sie könnten sagen: "Wenn sie etwas modifizieren können PAGER
, können PATH
sie etwas modifizieren und dann einfach ein böses sudo
Programm 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 EDITOR
zum Beispiel auch daran gedacht, dies zu überprüfen , bevor Sie einen VCS- Befehl ausgeführt haben? Also sudo -i
.
Da sudo -i
auch das Arbeitsverzeichnis zu Ihrem Benutzer-Home - Verzeichnis ändert, können Sie immer noch verwenden sudo -s
fü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 -i
und cd
zurü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.