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, .profilei .bashrcsą realizowane i znajdą się w katalogu domowym roota ze środowiskiem roota.
sudo -ijest 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, .bashrclub .loginzostaną odczytane i wykonane przez powłokę.
sudo su vs. sudo -s
sudo supołączenia sudoz poleceniem su. Bash jest nazywany interaktywną powłoką niezalogowaną. Więc bashtylko 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 -sodczytuje $SHELLzmienną i wykonuje treść. Jeśli $SHELLzawiera /bin/bash, wywołuje sudo /bin/bash, co oznacza, że /bin/bashjest uruchamiany jako powłoka niezalogowana, więc wszystkie pliki kropek nie są wykonywane, ale bashsame czyta. bashrcuż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
-iFlag Dodano sudow 2004 roku , aby zapewnić podobną funkcję do sudo su -, więc sudo su -było szablon sudo -ii 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 sudozostał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 sudozostał rozszerzony o takie mechanizmy, ponieważ ludzie byli zirytowani tym, dlaczego używać sudoprzed każdym poleceniem.
Więc znaczenie sudonadużyło. sudomiał zachęcić użytkownika do zminimalizowania korzystania z uprawnień roota.
To, co mamy teraz, sudostaje 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 sudomogą 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 sudozawsze 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 subędzie przestarzały i całkowicie sudozastąpi su.
Dlatego myślę, że najlepiej będzie użyć sudowewnętrznych mechanizmów ( -s, -i) zamiast polegać na starym narzędziu, takim jak su.
ubuntuktóre uniemożliwiają użytkownikom standardsu -. Stworzyli problem i teraz trwają niekończące się dyskusje na temat jego rozwiązania.