Jaka jest różnica między następującymi poleceniami:
su
sudo -s
sudo -i
sudo bash
Wiem, su
bo muszę znać hasło roota, i sudo
muszę być w sudoers
pliku, ale po wykonaniu jaka jest różnica?
Wiem, że istnieje różnica między su
i sudo -s
ponieważ mój katalog domowy jest /root
po uruchomieniu su
, ale mój katalog domowy jest nadal /home/myname
po sudo -s
. Ale podejrzewam, że to tylko objaw podstawowej różnicy, której mi brakuje.
sudo su -
ten sposób nie potrzebujesz hasła roota, a-
upewnia się, że katalog domowy jest ustawiony poprawnie.Odpowiedzi:
Dzięki
su
stajesz się innym użytkownikiem - domyślnie rootem, ale potencjalnie innym użytkownikiem. Jeśli powieszsu -
, twoje środowisko zostanie również zastąpione środowiskiem logowania tego użytkownika, dzięki czemu to, co widzisz, jest nie do odróżnienia od zalogowania się jako ten użytkownik. W żaden sposób system nie może powiedzieć, co robisz, gdy jesteśsu
zalogowany do innego użytkownika na podstawie działań tego użytkownika.Zupełnie inaczej jest z
sudo
:Polecenia, które
sudo
wykonujesz, wykonują się jako użytkownik docelowy - domyślnie root, ale można je zmieniać-u
- ale rejestruje polecenia, które wykonujesz , oznaczając je swoją nazwą użytkownika, aby można było później przypisać winę. :)sudo
jest bardzo elastyczny. Możesz na przykład ograniczyć polecenia, które może wykonywać dany użytkownik lub grupa użytkowników. Zsu
, wszystko albo nic.Ta funkcja jest zwykle używana do definiowania ról. Na przykład można zdefiniować grupę „kopii zapasowych”, która może być uruchamiana,
dump
itar
każda z nich wymaga dostępu do konta root, aby poprawnie wykonać kopię zapasową dysku systemowego.Wspominam o tym tutaj, ponieważ oznacza to, że możesz dać komuś
sudo
przywileje, nie dając imsudo -s
anisudo bash
umiejętności. Mają tylko uprawnienia, których potrzebują, aby wykonywać swoją pracę, a wraz zsu
nimi działają cały system. Musisz jednak zachować ostrożność: jeśli dasz komuś zdolność do powiedzeniasudo vi
, na przykład, może on wystrzelićvi
i mieć efektywnie taką samą moc jak zsudo -s
.Ponieważ pobiera hasło sudoera zamiast hasła roota,
sudo
izoluje uprawnienia między wieloma sudoerami.To rozwiązuje problem administracyjny
su
, który polega na tym, że kiedy zmienia się hasło roota, wszyscy ci, którzy musieli go znać,su
musieli zostać poinformowani.sudo
umożliwia niezależne zmienianie haseł sudoers. W rzeczywistości powszechne jest blokowanie hasłem konta użytkownika root w systemie wsudo
celu wymuszenia wykonania wszystkich zadań sysadmin przezsudo
. W dużej organizacji z wieloma zaufanymi sudoerami oznacza to, że kiedy jeden z sysadminów odejdzie, nie musisz zmieniać hasła roota i przekazywać go pozostałym administratorom.Główna różnica między
sudo bash
isudo -s
polega na tym, że-s
jest krótsza i pozwala na przekazywanie poleceń do wykonania w domyślnej powłoce użytkownika na kilka sposobów:Możesz powiedzieć,
sudo -s some-command
który działasome-command
pod twoją powłoką. Zasadniczo jest to skrótsudo $SHELL -c some-command
.Zamiast tego możesz przekazać polecenia do standardowego wejścia powłoki, np
sudo -s < my-shell-script
. Możesz użyć tego z heredoc, aby wysłać kilka poleceń do jednegosudo
wywołania, unikając koniecznościsudo
wielokrotnego pisania .Oba te zachowania są opcjonalne. O wiele częściej dajesz
-s
sam, więc po prostu uruchamia interaktywnie powłokę użytkownika. W tym trybie różni sięsudo bash
tym, że może uruchamiać inną powłokę niżbash
, ponieważ najpierw wygląda wSHELL
zmiennej środowiskowej, a następnie, jeśli nie jest ustawiona, w ustawieniach powłoki logowania użytkownika, zwykle w/etc/passwd
.Powłoka uruchamiana przez
sudo -s
dziedziczy twoje aktualne środowisko użytkownika. Jeśli to, czego naprawdę chcesz, to czyste środowisko, takie jak dostajesz zaraz po zalogowaniu, zamiast tego chceszsudo -i
, to stosunkowo nowy dodateksudo
. Z grubsza mówiąc,sudo -i
jestsudo -s
tak, jaksu -
jestsu
: resetuje wszystkie oprócz kilku kluczowych zmiennych środowiskowych i odsyła cię z powrotem do katalogu domowego użytkownika. Jeśli nie wydasz komendy, aby działała pod tą powłoką przez standardowe wejście lubsudo -i some-command
uruchomi tę powłokę jako interaktywną powłokę logowania, aby skrypty startowe użytkownika (np..bash_profile
) Zostały uruchomione ponownie.Wszystko to czyni
sudo -i
znacznie bezpieczniejszym niżsudo -s
. Dlaczego? Ponieważ jeśli ktoś może wcześniej zmodyfikować twoje środowiskosudo -s
, może spowodować wykonanie niezamierzonych poleceń. Najbardziej oczywistym przypadkiem jest modyfikacjaSHELL
, ale może się to również zdarzyć mniej bezpośrednio, na przykład przez,PAGER
jeśli powiesz,man foo
gdy jesteś podsudo -s
.Możesz powiedzieć: „Jeśli mogą modyfikować
PAGER
, mogą modyfikowaćPATH
, a następnie mogą po prostu zastąpić złysudo
program”, ale ktoś wystarczająco paranoiczny może powiedzieć,/usr/bin/sudo /bin/bash
aby uniknąć tej pułapki. Prawdopodobnie nie jesteś tak paranoikiem, że unikniesz pułapek we wszystkich innych podatnych zmiennych środowiskowych. Czy pamiętasz również, aby sprawdzićEDITOR
na przykład przed uruchomieniem jakiegokolwiek polecenia VCS ? W ten sposóbsudo -i
.Ponieważ
sudo -i
zmienia również katalog roboczy na katalog domowy użytkownika, możesz nadal chcieć używaćsudo -s
w sytuacjach, w których wiesz, że chcesz pozostać w tym samym katalogu,cd
w którym byłeś podczas uruchamianiasudo
. Jednak nadal jest bezpieczniej tamsudo -i
izcd
powrotem.źródło
vi
wpisz:sh
i naciśnij Enter. Teraz jesteś w podpowłoce ze wszystkimi przywilejamivi
procesu, który spowodował powstanie tej powłoki. Jeślivi
działa z uprawnieniami roota, to również powłoka. Lub możesz uruchomić coś innego niż powłokę przez:!cmd
, odczytać dane wyjściowe polecenia z bufora edycji przez:r !cmd
itp. Jeśli wszystkie są zablokowane,Makefile
celem są skrypty powłoki, a Vim ma:make
polecenie, które skutecznie pozwala uruchomić dowolną powłokę skrypty z poziomu edytora. Możliwości psot są zdecydowanie zbyt duże, aby można było je zachować./usr/bin/sudo
PATH
nie jest to jedyny problem.Z postu ubuntuforums, który napisałem jakiś czas temu:
Rozważ następujący eksperyment:
Oto różnice, które znalazłem:
Z
sudo -s
:Z
sudo su
:Zauważ różnicę w
$HOME
. Bycie rootem i$HOME
ustawienie normalnego domu użytkownika może powodować problemy. Na przykład, jeśli uruchomisz aplikację graficzną, zwykły użytkownik~/.Xauthority
może zostać zastąpiony przez root. Powoduje to późniejsze problemy ze zwykłymi użytkownikami, takie jak niemożność uruchamiania niektórych aplikacji graficznych za pośrednictwem crona.Podsumowując:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
prawdopodobnie ustawione przez/etc/environment
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Najważniejsze
sudo -i
jest właściwe polecenie, które należy uruchomić, gdy chcesz powłoki root, która nie jest skażona przez środowisko użytkownika.źródło
sudo
(w/etc/sudoers
plikach powiązanych i powiązanych). Ustawień konfiguracyjnych, takich jakalways_set_home
,env_reset
,env_keep
,env_check
ienv_reset
, i mogą one się zmieniać w zależności od użytkownika i polecenia. Zobacz sekcję „Środowisko dowodzenia” i OPCJE SUDOERS na stronie podręcznika sudoers (5) .sudo -Hs
gdy chcę, aby środowisko nie było skażone przez moje ustawienia, ponieważ używam zsh i wszystkich kont aplikacji, które mogę zmienić, aby używać bash. To pozwala pewnej liczbie zmiennych środowiskowych przejść bez przeszkód, ale zwykle uważam, że te, które mają znaczenie, zostają zastąpione przez /etc/profile.d/*.su
( s witch u ser lub s ubstitute u ser) umożliwia zmianę użytkownika.su
w zasadzie uruchamia inną instancję powłoki z uprawnieniami zamierzonego użytkownika. Domyślnie przełącza cię doroot
użytkownika, jeśli chcemy zmienić konkretnego użytkownika, musimy przekazać go w następujący sposób:su -
oznacza, że zmienne środowiskowe zostaną zresetowane do katalogu głównego isu
oznacza zmienne środowiskowe jak stary użytkownik.na przykład: katalog domowy root, jeśli używasz,
su -
lub katalog domowy starego użytkownika, jeśli używaszsu
.sudo ( s uper u ser do ) to narzędzie wiersza polecenia, które pozwala użytkownikom uruchamiać programy z uprawnieniami bezpieczeństwa innego użytkownika, domyślnie jest to administrator
root
. Wykorzystuje plik konfiguracyjny,/etc/sudoers
który wyświetla listę użytkowników, którzy mają prawa do określonych działańsudo należy czytać jako / ˈsuːduː / . składnia,
sudo command
tj. s witch u ser i wykonaj to polecenie.su
jest równoważnysudo -i
i symuluje logowanie do konta root. Twój katalog roboczy będzie/root
i będzie czytał root'a.profile
itp. Monit zmieni się z $ na #, wskazując, że masz dostęp do roota.sudo -s
uruchamia powłokę jako root, ale nie zmienia katalogu roboczego.sudo bash
gdziebash
jest polecenie do uruchomieniasudo
. To polecenie działabash
jako superużytkownik.sudo
można rejestrować wszystko, co ktoś robi.sudo
uniemożliwia użytkownikowi poznanie hasła roota.sudo
możemy ograniczyć wykonywanie poleceń.źródło