Was ist der Unterschied zwischen "sudo -i" und "sudo bash -l"?

13

In letzter Zeit wurde eine Frage zu mehreren Sysadmins gestellt, die als Root fungieren. Auf diese Fragesudo bash -l wurde verwiesen.

Ich habe auf Google und SE danach gesucht, aber ich verstehe den Unterschied zwischen sudo bash -lund nicht sudo -i.

Aus den Manpages für bash und sudo geht hervor, dass der Unterschied möglicherweise darin besteht, dass sudo bash -l~ / .bash_profile, ~ / .bash_login und ~ / .profile und ~ / .bash_logout des Root-Benutzers ausgeführt werden Es wird die .bashrc-Datei des normalen Benutzers ausgeführt und nicht die Root-Datei. Möglicherweise habe ich falsch verstanden, auf welchen Benutzer der Ausdruck ~ in den Manpages verweist. Eine Klärung der Unterschiede und Nutzungsszenarien ist erwünscht.

Rqomey
quelle

Antworten:

10

Sie unterscheiden sich darin, dass, wenn die in / etc / passwd angegebene Anmeldeshell für den Root-Benutzer nicht bash ist, der zweite Befehl eine bash-Shell als Root-Shell bereitstellt, während der erste Befehl die interaktive Shell des Root-Benutzers verwendet.

johnshen64
quelle
Hi @ johnshen64, könnten Sie die verschiedenen Nutzungsszenarien erläutern?
Rqomey
2
Leute mögen die Shell, die sie verwenden. Wenn Sie also sicher sein möchten, dass Sie bash verwenden, sollten Sie die zweite Form verwenden. Das zweite Formular simuliert auch eine tatsächliche Anmeldung (das ist, was -l bedeutet). Natürlich können Sie auch einfach bash eingeben, wenn Sie feststellen, dass der Benutzer (standardmäßig root) bash nicht als interaktive Shell für die Verwendung von sudo -i verwendet. ansonsten ist der Unterschied sehr gering. Wie die andere Antwort zeigt, gibt es auch einige geringfügige Umgebungsunterschiede. In den meisten Fällen spielt der Unterschied keine Rolle und der erste ist kürzer, da die meisten Distributionen bash verwenden. Ich benutze selten die 2. Form.
Johnshen64
4

Um auch zu @ johnshen64 eine Antwort hinzuzufügen, habe ich festgestellt, dass der sudo -iAufruf die $USERNAMEenv-Variable für rootund cd ~an den Benutzer home auf diese Weise aktualisiert .

$ sudo -i
[root@workstation001 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 ~]# echo $USERNAME
root
[root@workstation001 userXXX]# echo $PWD
/root

For sudo bash -l $USERNAMEist jedoch nicht belästigt und das Arbeitsverzeichnis wird nicht geändert. (obwohl dies für andere Benutzer nicht konsistent ist, siehe Kommentare ...)

$ sudo bash -l
[root@workstation001 userXXX]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 userXXX]# echo $USERNAME
userXXX
[root@workstation001 userXXX]# echo $PWD
/home/userXXX

Vermutlich erhalten Sie also nicht genau den gleichen Satz ~/.bashrcoder nicht die gleiche Reihenfolge usw.

(Meine Box könnte durch meine .bashrcBasteleien ein wenig durcheinander gebracht worden sein , also YMMV)

Tom H
quelle
Danke @Tom H: echo $USERNAMEgibt für mich beide Male root zurück (auf meinem Ubuntu-Desktop und Centos 5.2). PWD ist wie Sie jedoch berichten.
Rqomey