Jakie są różnice między "su", "sudo -s", "sudo -i", "sudo su"?

133

Już przeczytałem go z instrukcji, ale nie widzę różnicy ..

su - zmień ID użytkownika lub zostań superużytkownikiem

sudo -s [command]

Opcja -s (shell) uruchamia powłokę określoną przez zmienną środowiskową SHELL, jeśli jest ustawiona, lub powłokę określoną w passwd (5). Jeśli                    polecenie jest przekazywane do powłoki w celu wykonania. W przeciwnym razie wykonywana jest interaktywna powłoka.

sudo -i zniknął z opisu w instrukcji

    
zadawane Smile.Hunter 22.10.2011, 08:11
źródło

5 odpowiedzi

111

Główna różnica między tymi poleceniami polega na ograniczeniu dostępu do ich funkcji.

su (co oznacza "substitute user" lub "switch user") - robi dokładnie to, uruchamia kolejną instancję powłoki z uprawnieniami użytkownika docelowego. Aby upewnić się, że masz do tego prawo, prosi o hasło użytkownika docelowego . Aby zostać rootem, musisz znać hasło roota. Jeśli na komputerze jest kilku użytkowników, którzy muszą uruchamiać komendy jako root, wszyscy muszą znać hasło roota - pamiętaj, że będzie to to samo hasło. Jeśli chcesz odwołać uprawnienia administratora od jednego z użytkowników, musisz zmienić hasło roota i powiedzieć to tylko tym osobom, które muszą zachować dostęp - niechlujnie.

sudo (hmm ... co to jest mnemonik? Super-użytkownik-DO?) jest zupełnie inny. Używa pliku konfiguracyjnego (/ etc / sudoers), który określa, którzy użytkownicy mają prawa do określonych działań (uruchamianie poleceń jako root itp.). Po wywołaniu prosi o hasło użytkownika, który go uruchomił - aby zapewnić, że osoba na terminalu to naprawdę ta sama osoba "joe", która jest wymieniona w /etc/sudoers . Aby odwołać uprawnienia administratora od osoby, wystarczy edytować plik konfiguracyjny (lub usunąć użytkownika z grupy wymienionej w tej konfiguracji). Powoduje to znacznie lepsze zarządzanie uprawnieniami.

W rezultacie w wielu systemach opartych na Debianie% użytkownik% nie ma ustawionego hasła - tzn. nie można bezpośrednio zalogować się jako root.

Ponadto, root pozwala określić pewne dodatkowe opcje - tzn. użytkownik X może uruchamiać tylko program Y itd.

Często używana kombinacja /etc/sudoers działa w następujący sposób: pierwszy sudo su zapyta cię o twoje hasło, a jeśli możesz to zrobić, wywołuje następne polecenie ( sudo ) jako superużytkownik. Ponieważ su jest wywoływane przez su , nie wymaga wpisania hasła użytkownika docelowego. Tak więc, root pozwala ci otworzyć powłokę jako inny użytkownik (włączając root), jeśli masz dostęp do superużytkownika przez plik sudo su .

    
odpowiedział Sergey 22.10.2011, 09:21
źródło
48

sudo pozwala uruchamiać polecenia na własnym koncie użytkownika z uprawnieniami roota. su pozwala na zmianę użytkownika, tak, że faktycznie jesteś zalogowany jako root.

sudo -s uruchamia powłokę z uprawnieniami roota. sudo -i także nabywa środowisko użytkownika root.

Aby zobaczyć różnicę między su i sudo -s , wykonaj cd ~ , a następnie pwd po każdym z nich. W pierwszym przypadku będziesz w katalogu domowym root, ponieważ jesteś rootem. W drugim przypadku będziesz w swoim własnym katalogu domowym, ponieważ jesteś sam z uprawnieniami roota.

Więcej dyskusji na temat tego dokładnego pytania tutaj .

    
odpowiedział Mike Scott 22.10.2011, 08:28
źródło
27

Ta odpowiedź jest kopią mojej odpowiedzi na dupe tego pytania , umieść tutaj odpowiedź kanoniczną, aby ludzie mogli ją znaleźć!

Główna różnica między sudo -i i sudo -s to:

  • sudo -i zapewnia środowisko root, tzn. Twój ~/.bashrc jest ignorowany.
  • sudo -s zapewnia środowisko użytkownika, więc Twój ~/.bashrc jest przestrzegany.

Oto przykład, widzisz, że mam aplikację lsl w moim katalogu ~/.bin/ , która jest dostępna przez sudo -s , ale nie jest dostępna z sudo -i . Zauważ też, że zapytanie Bash zmienia się tak samo jak dla sudo -i , ale nie dla sudo -s :

dotancohen@melancholy:~$ ls .bin
lsl

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ sudo -i

root@melancholy:~# which lsl

root@melancholy:~# exit
logout

dotancohen@melancholy:~$ sudo -s
Sourced .bashrc

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ exit
exit

Chociaż sudo -s jest wygodny dla środowiska, które znasz, Zalecam użycie sudo -i z dwóch powodów:

  1. Wizualne przypomnienie, że jesteś w sesji "root".
  2. Środowisko root jest znacznie mniej narażone na zatrucie złośliwym oprogramowaniem, na przykład fałszywa linia w .bashrc .
odpowiedział dotancohen 08.11.2014, 15:07
źródło
6

su prosi o hasło użytkownika "root".

sudo prosi o podanie własnego hasła (a także sprawdza, czy możesz uruchamiać polecenia jako root, który jest skonfigurowany przez /etc/sudoers - domyślnie wszystkie konta użytkowników należące do grupy "admin" są dozwolone używać sudo).

sudo -s uruchamia powłokę jako root, ale nie zmienia twojego katalogu roboczego. sudo -i symuluje logowanie do konta root: twój katalog roboczy będzie wynosił /root , a% root%% root_de% będzie pochodził tak jak przy logowaniu.

    
odpowiedział Marius Gedminas 22.10.2011, 21:38
źródło
2

W systemie Ubuntu lub pokrewnym systemie nie ma większego sensu dla su w tradycyjnym znaczeniu superużytkownika. sudo znacznie lepiej radzi sobie z tym przypadkiem. Jednak su świetnie nadaje się do zostania innym użytkownikiem w sytuacjach jednorazowych, w których konfigurowanie sudoerów byłoby głupie.

Na przykład, jeśli naprawiam mój system z Live CD / USB, często montuję dysk twardy i inne potrzebne rzeczy oraz chroot w systemie. W takim przypadku moje pierwsze polecenie jest ogólnie:

su - myuser  # Note the '-'. It means to act as if that user had just logged in.

W ten sposób działam nie jako root, ale jako zwykły użytkownik, a następnie używam sudo .

    
odpowiedział Scott Severance 26.10.2011, 09:23
źródło

Przeczytaj inne pytania na temat tagów