Was ist der funktionale Unterschied zwischen sudo su und sudo -i?

19

Warum wird in diesem Beispiel eins dem anderen vorgezogen?

sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit

Bitte geben Sie Links zur Ubuntu-Dokumentation an.

chili555
quelle
Bitte überdenken Sie Ihre Auswahl an "akzeptierten" Antworten. Der mit der niedrigsten Bewertung ist tatsächlich der einzig richtige.
Kyle Strand

Antworten:

15

Der sudo suBefehl steht für "Benutzer wechseln" und ermöglicht es Ihnen, ein anderer Benutzer zu werden. Es ermöglicht einem zugelassenen Benutzer, einen Befehl als Superuser oder als anderer Benutzer auszuführen, wie in der sudoers-Datei angegeben.

Mit der Option ‑i (Erstanmeldung simulieren) wird die durch den Kennwortdatenbankeintrag des Zielbenutzers angegebene Shell als Anmeldeshell ausgeführt. Dies bedeutet, dass anmeldungsspezifische Ressourcendateien wie .profile oder .login von der Shell gelesen werden. Wenn ein Befehl angegeben ist, wird er über die Option ‑c der Shell zur Ausführung an die Shell übergeben. Wird kein Befehl angegeben, wird eine interaktive Shell ausgeführt.

Quelle: ManPage

Mitch
quelle
1
"Die Verwendung von su schafft Sicherheitsprobleme und ist im Wesentlichen gefährlich." Was?
Hör auf, Monica
1
Wenn Sie ausführen, werden sudo suSie nach Ihrem Kennwort gefragt, nicht nach dem Root-Kennwort. Der root-Benutzer muss nicht einmal ein Passwort haben. Unabhängig davon, ob ein Administrator das Root-Passwort verwendet, bedeutet dies nicht, dass alle regulären Benutzer es kennen.
Hör auf, Monica
2
Nein es wird nicht. sudoLäuft suals root und kann suvon jedem Benutzer ohne Kenntnis seines Passworts als root ausgeführt werden . Grundlegende Missverständnisse über die Funktionsweise des Systems verdienen eine Ablehnung der IMO.
Hören Sie auf, Monica
3
Und das Löschen Ihrer Kommentare trägt nur zur Verwirrung bei.
Hören Sie auf, Monica
1
Du machst es nicht viel besser. sudo -ifragt auch nicht nach dem root-Passwort, ist also für die Frage nicht relevant.
Hören Sie auf, Monica
14

sudo suÄndert nur den aktuellen Benutzer in root. Umgebungseinstellungen (wie PATH) bleiben unverändert.

sudo -i Erstellt eine neue Umgebung, als hätte sich root gerade angemeldet.

Der Unterschied ist deutlicher, wenn Sie andere Benutzer verwenden. Nachdem sudo su bobSie Bob, aber an der gleichen Stelle sein. Nachdem sudo -i -u bobSie bob sind, befinden Sie sich im Home-Verzeichnis von bob, mit der Standard-Shell von bob und mit bobs .profileund anderen Anmeldeskripten, die ausgeführt wurden.

Sehen Sie man sudofür weitere Informationen von dem, was der -iFall ist. Leider man suist Licht auf Details.


Es wurde eine Version von man su(von login-1: 4.1.4.2 + svn3283-3ubuntu5.1) gefunden, die Folgendes enthält:

$ PATH wird gemäß den Optionen /etc/login.defs zurückgesetzt ENV_PATH oder ENV_SUPATH (siehe unten);

$ IFS wird auf "<Leerzeichen> <Tab> <Zeilenumbruch>" zurückgesetzt, wenn dies festgelegt wurde.

Beachten Sie, dass das Standardverhalten für die Umgebung wie folgt lautet:

Die Umgebungsvariablen $ HOME, $ SHELL, $ USER, $ LOGNAME, $ PATH und $ IFS werden zurückgesetzt.

Wenn --login nicht verwendet wird, wird die Umgebung mit Ausnahme der obigen Variablen kopiert.

Wenn --login verwendet wird, werden die Umgebungsvariablen $ TERM, $ COLORTERM, $ DISPLAY und $ XAUTHORITY kopiert, sofern sie festgelegt wurden.

Andere Umgebungen werden möglicherweise von PAM-Modulen festgelegt.

Ob und inwieweit sudo susich die Umgebung ändert, hängt also von Ihrer Verteilung und Einrichtung ab. Ist sudo -ialso theoretisch portabler.

Hör auf, Monica zu schaden
quelle
su Ändert die Umgebungseinstellungen und kann verwendet werden, um eine Anmeldung mit -oder zu simulieren -l. Auch ohne -l, $PATH wird geändert. Testen Sie diese Behauptungen, bevor Sie sie aufstellen! (Meinten Sie, das PWDbleibt gleich?)
Kyle Strand
Die eigentliche Frage ist, gibt es einen Unterschied zwischen sudo su -und sudo -i?
Kyle Strand
1
Sie denken klar darüber nach und machen tatsächlich einige Tests in der Shell, also entschuldige ich mich für meinen kurzen Kommentar "Diese Behauptungen testen". Das heißt, auf meinem System beobachte ich, dass $PATHsich das ändert, wenn ich suohne sudo(unter Verwendung des root-Passworts) verwende. Laut info su(worauf Sie in Ihrer Antwort möglicherweise besser verweisen können) wird in suder Tat der Kennworteintrag für den Benutzer gelesen, zu dem Sie werden. Möglicherweise ist die $PATHÄnderung, die ich beobachte, systemabhängig (ich bin auf Debian 7).
Kyle Strand
1
Hmmm. Meine man su(die länger ist als die, mit der Sie verlinkt sind) sagt, dass sie Teil von ist shadow-utils 4.1.5.1. Meine manSeite sagt auch, dass gesetzt $PATHist, auch wenn --preserve-environmentverwendet wird. Ich denke also, es ist wirklich nur ein Unterschied zwischen verschiedenen Versionen von su.
Kyle Strand
1
Das Verhalten wird auch von Ihrer PAM-Konfiguration beeinflusst. /etc/pam.d/sudound /etc/pam.d/sukann eingerichtet sein, um ganz andere oder genau die gleichen Dinge zu tun.
Hören Sie auf, Monica
7

Das Hauptproblem ist eine der (nicht so) vernünftigen Umgebungseinstellungen.

Das Verwenden sudo suder neuen Shell bezieht ihre Umgebung von dem Benutzer, der den Befehl ausgibt - was problematisch sein kann.

Mit sudo -idir bekommst du eine saubere Wurzelschale.

Siehe Spezielle Hinweise zu Sudo und Shells

Bleibt zu beachten, dass es selten nötig ist, eine Root-Shell zu erstellen.

guntbert
quelle
Die von Ihnen verknüpften "besonderen Hinweise" sudo -iähneln denen sudo su -, bei denen der Benutzer, der den Befehl ausgibt, seine Umgebung nicht verwendet .
Kyle Strand
@KyleStrand thx diese heraus für den Hinweis - es war ein Tippfehler, die Frage ist wirklich sudo suvs. sudo -i.
guntbert