Gibt es einen Unterschied zwischen „sudo su - root“ und „sudo -u root -H /bin/bash“?

Gibt es einen Unterschied zwischen „sudo su - root“ und „sudo -u root -H /bin/bash“?

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 - rootAngabe von „root“ ist redundant.

sudo -u root -H /bin/bashAuch dies -u rootist redundant und sudowird standardmäßig als Root ausgeführt, jedoch -H /bin/bashals 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 bashfü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.

verwandte Informationen