Wie der Titel schon sagt, gibt es einen Unterschied zwischen diesen beiden Befehlen:
sudo su - root
sudo -u root -H /bin/bash
Ich verwende GNU/Linux, falls das einen Unterschied macht.
Antwort1
Wenn Sie Root werden möchten, ist der beste Weg dies zu tun sudo -i
, indem Sie , das die erste Anmeldung simuliert (und Ihnen alle Pfade und Variablen gibt, die mit einer Root-Anmeldung verbunden sind). Wenn Sie sich anmelden möchten, ohne die Root-Benutzer zu erhalten,.Dateien, Sie können einfach verwenden sudo su
(der Root-Benutzer muss nicht angegeben werden).
Antwort2
su - # causes the user to run a login shell aka bash --login
# the same as if the user had logged in as the root from the login prompt
und sudo su -
ist dasselbe wie die sudo su - root
Angabe von „root“ ist redundant.
sudo -u root -H /bin/bash
Auch dies -u root
ist redundant und sudo
wird standardmäßig als Root ausgeführt, jedoch -H /bin/bash
als Sudoer. Die Umgebungsvariablen SUDO_USER, SUDO_UID und SUDO_COMMAND werden jeweils auf den Namen/die UID des Anrufers und die Bash eingestellt.
In diesem Fall wird Bash jedoch nicht als Anmelde-Shell ausgeführt.
Antwort3
Offensichtlich können sie unterschiedlich sein, wenn die Root-Shell nicht /bin/bash ist – das ist bei kleinen oder eingebetteten Linux-Umgebungen möglich oder traditionell bei BSD-Systemen, die /bin/[t]csh für den Root-Benutzer bevorzugen. Außerdem löscht `su -' alle Umgebungen außer einigen Variablen, die mit dem Terminal zusammenhängen. Das Verhalten von sudo in Bezug auf die Umgebung ist konfigurierbar (siehe env_reset in /etc/sudoers). Seien Sie also vorsichtig mit Details …
Antwort4
Der größte Unterschied zwischen den beiden von Ihnen aufgelisteten Befehlen besteht darin, dass su -
die Shell durch die Ausführung zu einer Anmeldeshell wird. Das bedeutet, dass die Anmeldeskripte der Root-Shell ausgeführt werden (z. B. .bash_profile, wenn es sich um Bash handelt), das PWD auf $HOME gesetzt wird und bestimmte Teile der Benutzerumgebung initialisiert werden. sudo bash
führt einfach eine neue Shell als Shell des Zielbenutzers aus, und -H initialisiert nur eine Variable, $HOME, auf das Home-Verzeichnis des Zielbenutzers. Andere Variablen werden nicht gesetzt und einige werden in die neue Shell übernommen, wie in Ihrer Sudo-Richtlinie definiert.