Jaka jest różnica między „sudo -i” i „sudo bash -l”

13

Pojawiło się ostatnie pytanie dotyczące wielu sysadminów pracujących jako root i sudo bash -lzostało przywołane.

Szukałem tego w Google i SE, ale nie rozumiem różnicy między sudo bash -li sudo -i.

Ze stron podręcznika dla bash i sudo wydaje się, że różnica może być taka, że sudo bash -luruchamia ~ / .bash_profile, ~ / .bash_login i ~ / .profile oraz ~ / .bash_logout użytkownika root, ale po przetestowaniu siebie wygląda na to, że uruchamia .bashrc zwykłego użytkownika, a nie root. Być może źle zrozumiałem, do którego użytkownika odnosi się wyrażenie ~ na stronach podręcznika man. Docenione zostanie wyjaśnienie scenariuszy różnic i użytkowania.

Rqomey
źródło

Odpowiedzi:

10

Różnią się tym, że jeśli powłoka logowania użytkownika root określona w / etc / passwd nie jest bash, to drugie polecenie da ci powłokę bash jako root, podczas gdy pierwsze polecenie użyje powłoki interaktywnej użytkownika root.

johnshen64
źródło
Cześć @ johnshen64, czy byłbyś w stanie wyjaśnić różne scenariusze użytkowania?
Rqomey
2
ludzie lubią używaną przez siebie powłokę, więc jeśli chcesz mieć pewność, że użyjesz bash, to powinieneś użyć drugiej formy. druga forma symuluje także rzeczywiste logowanie (co oznacza -l). oczywiście możesz również po prostu wpisać bash, gdy okaże się, że użytkownik (domyślnie root) nie ma bash jako interaktywnej powłoki przy użyciu sudo -i. w przeciwnym razie różnica jest bardzo niewielka. jak pokazuje druga odpowiedź, istnieją również niewielkie różnice środowiskowe. w większości przypadków różnica nie ma znaczenia, a pierwsza jest krótsza, ponieważ większość popularnych dystrybucji używa bash. rzadko używam drugiej formy.
johnshen64
4

Również, aby dodać do odpowiedzi @ johnshen64, zauważyłem, że sudo -iwywołanie aktualizuje $USERNAMEzmienną env do rooti cd ~do domu użytkownika w ten sposób;

$ 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

Jednak for sudo bash -l $USERNAMEjest niezbadany, a katalog roboczy nie jest zmieniany. (chociaż nie jest to spójne dla innych użytkowników, zobacz komentarze ...)

$ 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

Więc prawdopodobnie nie otrzymujesz dokładnie tego samego zestawu ~/.bashrclub nie w tej samej kolejności itp.

(moje pudełko mogło zostać trochę pomieszane przez moje .bashrcmajsterkowanie, więc YMMV)

Tom H.
źródło
Dzięki @Tom H: echo $USERNAMEZwraca root dla mnie dwa razy (na moim pulpicie Ubuntu i Centos 5.2). PWD jest jednak zgodne z raportem.
Rqomey