Um eine Root-Shell auf Rechnern zu starten, auf denen das Root-Konto deaktiviert ist, können Sie einen der folgenden Schritte ausführen:
sudo -i
:Führen Sie eine interaktive Login-Shell aus (liest/root/.bashrc
und/root/.profile
)sudo -s
:Führen Sie eine interaktive Shell ohne Anmeldung aus (liest/root/.bashrc
)
In der Ubuntu-Welt sehe ich sehr oft sudo su
vorgeschlagen, um eine Root-Shell zu erhalten. Warum zwei separate Befehle ausführen, wenn einer ausreicht? Soweit ich das beurteilen kann, sudo -i
entspricht sudo su -
und sudo -s
ist dasselbe wie sudo su
.
Die einzigen Unterschiede scheinen zu sein (im Vergleich zu sudo -i
links und sudo su -
rechts):
Und vergleichen Sie sudo -s
(links) und sudo su
(rechts):
Die Hauptunterschiede (Ignorieren des SUDO_foo
Variablen und LS_COLORS
) scheinen die XDG_foo
zu sein Systemvariablen in sudo su
Versionen.
Gibt es Fälle, in denen dieser Unterschied die Verwendung des ziemlich uneleganten sudo su
rechtfertigt? ? Kann ich den Leuten sicher sagen (wie ich es oft getan habe), dass es keinen Sinn macht, sudo su
auszuführen oder übersehe ich etwas?
Akzeptierte Antwort:
Wie Sie in Ihrer Frage sagten, liegt der Hauptunterschied in der Umgebung.
sudo su -
vs. sudo -i
Im Fall von sudo su -
es ist eine Login-Shell, also /etc/profile
, .profile
und .bashrc
ausgeführt und Sie befinden sich im Home-Verzeichnis von root mit der Umgebung von root.
sudo -i
ist fast dasselbe wie sudo su -
Das -i
(Anfangsanmeldung simulieren) führt die durch den Kennwortdatenbankeintrag des Zielbenutzers angegebene Shell als Anmelde-Shell aus. Das bedeutet, dass Login-spezifische Ressourcendateien wie .profile
, .bashrc
oder .login
wird von der Shell gelesen und ausgeführt.
sudo su
vs. sudo -s
sudo su
ruft sudo
auf mit dem Befehl su
. Bash wird als interaktive Non-Login-Shell bezeichnet. Also bash
führt nur .bashrc
aus . Sie können sehen, dass Sie sich nach dem Wechsel zu root immer noch im selben Verzeichnis befinden:
[email protected]:~$ sudo su
[email protected]:/home/user#
sudo -s
liest die $SHELL
Variable und führt den Inhalt aus. Wenn $SHELL
enthält /bin/bash
es ruft sudo /bin/bash
auf , was bedeutet, dass /bin/bash
wird als Non-Login-Shell gestartet, also werden nicht alle dot-Dateien ausgeführt, sondern bash
selbst lautet .bashrc
des anrufenden Benutzers. Ihre Umgebung bleibt gleich. Dein Zuhause wird nicht das Zuhause von root sein. Sie sind also root, aber in der Umgebung des aufrufenden Benutzers.
Schlussfolgerung
Das -i
Flag wurde zu sudo
hinzugefügt im Jahr 2004, um eine ähnliche Funktion wie sudo su -
bereitzustellen , also sudo su -
war die Vorlage für sudo -i
und soll so funktionieren. Ich denke, es spielt keine Rolle, welche Sie verwenden, es sei denn, die Umgebung ist nicht wichtig.
Zusatz
Ein grundlegender Punkt, der hier erwähnt werden muss, ist das sudo
wurde entwickelt, um nur einen einzigen Befehl auszuführen mit höheren Privilegien und lassen Sie diese Privilegien dann auf die ursprünglichen fallen. Es sollte nie wirklich wechseln den Benutzer und lassen Sie eine Root-Shell geöffnet. Im Laufe der Zeit wurde sudo
wurde um solche Mechanismen erweitert, weil sich die Leute darüber ärgerten, warum man sudo
verwenden sollte vor jedem Befehl.
Also die Bedeutung von sudo
wurde missbraucht. sudo
sollte den Benutzer ermutigen, die Verwendung von Root-Rechten zu minimieren.
Was wir jetzt haben, ist sudo
wird immer beliebter. Es ist in fast jede bekannte Linux-Distribution integriert. Das ursprüngliche Tool zum Wechseln zu einem anderen Benutzerkonto ist su
. Für einen *nix-Veteranen der alten Schule so etwas wie sudo
mag unnötig erscheinen. Es fügt Komplexität hinzu und verhält sich wahrscheinlicher zu den Mechanismen, die wir aus Microsofts Betriebssystemfamilie kennen, und steht somit im Gegensatz zur Philosophie der Einfachheit von *nix-Systemen.
Ich bin nicht wirklich ein Veteran, aber auch meiner Meinung nach sudo
war mir schon immer ein Dorn im Auge, seit es eingeführt wurde und ich immer um die Verwendung von sudo
herumgearbeitet habe , wenn es möglich wäre. Ich bin sehr zurückhaltend, sudo
zu verwenden . Auf allen meinen Systemen ist das Root-Konto aktiviert. Aber die Dinge ändern sich, vielleicht kommt die Zeit, wo su
wird veraltet sein und sudo
ersetzt su
vollständig.
Daher denke ich, dass es am besten ist, sudo
zu verwenden ’s interne Mechanismen (-s
, -i
), anstatt sich auf ein altes Tool wie su
zu verlassen .