Jak zauważyłeś w swoim pytaniu, główną różnicą jest środowisko.
sudo su -
vs. sudo -i
W przypadku sudo su -
jest to powłoka logowania, tak /etc/profile
, .profile
i .bashrc
są realizowane i znajdą się w katalogu domowym roota ze środowiskiem roota.
sudo -i
jest prawie taki sam jak sudo su -
Opcja -i
(symuluj początkowe logowanie) uruchamia powłokę określoną przez wpis bazy danych haseł użytkownika docelowego jako powłokę logowania. Oznacza to, że pliki zasobów specyficzne dla logowania, takie jak .profile
, .bashrc
lub .login
zostaną odczytane i wykonane przez powłokę.
sudo su
vs. sudo -s
sudo su
połączenia sudo
z poleceniem su
. Bash jest nazywany interaktywną powłoką niezalogowaną. Więc bash
tylko wykonuje .bashrc
. Możesz zobaczyć, że po przejściu na root nadal jesteś w tym samym katalogu:
user@host:~$ sudo su
root@host:/home/user#
sudo -s
odczytuje $SHELL
zmienną i wykonuje treść. Jeśli $SHELL
zawiera /bin/bash
, wywołuje sudo /bin/bash
, co oznacza, że /bin/bash
jest uruchamiany jako powłoka niezalogowana, więc wszystkie pliki kropek nie są wykonywane, ale bash
same czyta. bashrc
użytkownika wywołującego. Twoje środowisko pozostaje takie samo. Twój dom nie będzie domem roota. Jesteś więc rootem, ale w środowisku dzwoniącego użytkownika.
Wniosek
-i
Flag Dodano sudo
w 2004 roku , aby zapewnić podobną funkcję do sudo su -
, więc sudo su -
było szablon sudo -i
i przeznaczona do pracy podoba. Myślę, że tak naprawdę nie ma znaczenia, którego używasz, chyba że środowisko nie jest ważne.
Dodanie
Podstawową kwestią, o której należy tutaj wspomnieć, jest to, że sudo
zostało zaprojektowane, aby uruchomić tylko jedno polecenie z wyższymi uprawnieniami, a następnie upuścić te uprawnienia do pierwotnych. Nigdy nie miało to na celu zmiany użytkownika i pozostawienia otwartej powłoki roota. Z biegiem czasu sudo
został rozszerzony o takie mechanizmy, ponieważ ludzie byli zirytowani tym, dlaczego używać sudo
przed każdym poleceniem.
Więc znaczenie sudo
nadużyło. sudo
miał zachęcić użytkownika do zminimalizowania korzystania z uprawnień roota.
To, co mamy teraz, sudo
staje się coraz bardziej popularne. Jest zintegrowany z prawie każdą dobrze znaną dystrybucją linuksową. Oryginalne narzędzie do przełączania na inne konto użytkownika to su
. Dla weterana starej szkoły * nix takie rzeczy sudo
mogą wydawać się niepotrzebne. Dodaje złożoności i zachowuje się bardziej prawdopodobne w przypadku mechanizmów znanych z rodziny os Microsofts, a zatem jest sprzeczny z filozofią prostoty systemów * nix.
Nie jestem tak naprawdę weteranem, ale także moim zdaniem sudo
zawsze był po mojej stronie cierniem, od czasu kiedy został wprowadzony i zawsze pracowałem nad użyciem sudo
, jeśli to możliwe. Jestem bardzo niechętny do użycia sudo
. We wszystkich moich systemach konto root jest włączone. Ale rzeczy się zmieniają, może nadejdzie czas, kiedy su
będzie przestarzały i całkowicie sudo
zastąpi su
.
Dlatego myślę, że najlepiej będzie użyć sudo
wewnętrznych mechanizmów ( -s
, -i
) zamiast polegać na starym narzędziu, takim jak su
.
ubuntu
które uniemożliwiają użytkownikom standardsu -
. Stworzyli problem i teraz trwają niekończące się dyskusje na temat jego rozwiązania.