Dlaczego sudo -s jest lepszy od sudo su?

28

Widziałem wiele komentarzy tutaj w Ask Ubuntu, dotyczących preferencji w używaniu sudo -szamiast sudo su.

Dla mnie te dwa polecenia robią dokładnie to samo. Ale dlaczego sudo -sma być lepiej?

fitojb
źródło
1
Myślę, sudo -iczy sudo sujest lepszy niż sudo -sz powodów wymienionych tutaj: ubuntuforums.org/showpost.php?p=6188826&postcount=4 także: jest to możliwe duplikat superuser.com/questions/29/...
zorganizować
Myślę, że to pytanie powinno zostać przeniesione na unix.stackexchange.com
igi

Odpowiedzi:

26

Myślę, że sudo -snie jest „lepszy”, jest po prostu inny.

sudo -s

przechowuje katalog $ HOME, więc podczas uruchamiania programów będą używać plików konfiguracyjnych (a nie roota) itp. Wada: mogą również zmienić własność plików w katalogu $ HOME, typowym przykładem jest .Xauthorityplik, ale ja nigdy nie doświadczyłem z tym problemu.

sudo su lub sudo -i

programy będą używać katalogu głównego root i jego plików konfiguracyjnych. Może to być bardziej intuicyjne, ale oznacza również, że nie będzie korzystał z żadnej konfiguracji, którą sam sobie ustawiłeś (aliasy, historia bash, ...).

zorganizować
źródło
1
Okej, teraz rozumiem różnicę. Dziękuję Ci!
fitojb
1
„sudo su” nie jest równoważne z „sudo -i”. „sudo -i” jest równoważne z „sudo su -”, ale „sudo su -” zachowuje bieżący katalog roboczy, podczas gdy „sudo -i” przenosi cię do domu roota
Gregory Pakosz
13

Ponieważ sudo -snie zmieni twoich zmiennych środowiskowych, szczególnie $HOME, które pozostaną HOME=/home/USER. Jeśli użyjesz sudo sutej opcji, zmieni się to, HOME=/rootco może mieć negatywne skutki uboczne, gdy programy zaczniesz próbować uzyskać dostęp do katalogu domowego użytkownika.

Zasadniczo jest to jak sudovs gksudopodczas uruchamiania programów graficznych.

htorque
źródło
5

Oprócz wspomnianych już różnic w zmiennych środowiskowych, uważam sudo sugłupie i marnotrawstwo, ponieważ prosisz sudoo uruchomienie sujako root, i poprosisz o uruchomienie powłoki jako root. Po co prosić program, aby poprosił program o podanie powłoki roota, skoro pierwszy program może dać ci tę powłokę? Czy ma to jakiekolwiek znaczenie praktyczne? Nie, jestem pedantyczny.

psusi
źródło
Masz rację, to jest trochę zbędne.
fitojb
Cóż, nie do końca tak: jeśli używasz sudo surootowania, tak, po prostu idź sudo -ina przykład. Ale to nie pomaga, gdy chcemy stać się inny użytkownik: sudo su - myuser.
hggdh
2
Jest jeszcze jedna różnica: sudo -iprzejdzie do /rootkatalogu i sudo supozostanie w katalogu, w którym się znajdujesz.
laurent
1
@hggdh, sudo -u myuser.
psusi
3

Nie zgadzam się z innymi odpowiedziami, rozważając przypadki, w których chcesz zalogować się jako użytkownik, który nie ma powłoki. Jest to bardzo częsty przypadek użytkowników przypisanych do usług.

Użycie „sudo su” uruchomi powłokę określoną przez użytkownika. Jednak w przypadku użytkownika przypisanego do procesu serwera powłoką jest / usr / bin / false, a logowanie się nie powiedzie. Zamiast tego należy wprowadzić jako:

sudo -sHu <server-user>

spowoduje to zalogowanie się i przejście do ścieżki domowej, nawet jeśli użytkownik nie ma przypisanej powłoki

SystematicFrank
źródło