Dzięki sustajesz się innym użytkownikiem - domyślnie rootem, ale potencjalnie innym użytkownikiem. Jeśli powiesz su -, 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ś suzalogowany 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ę. :)
sudojest bardzo elastyczny. Możesz na przykład ograniczyć polecenia, które może wykonywać dany użytkownik lub grupa użytkowników. Z su, 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, dumpi tarkaż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ś sudoprzywileje, nie dając im sudo -sani sudo bashumiejętności. Mają tylko uprawnienia, których potrzebują, aby wykonywać swoją pracę, a wraz z sunimi działają cały system. Musisz jednak zachować ostrożność: jeśli dasz komuś zdolność do powiedzenia sudo vi, na przykład, może on wystrzelić vii mieć efektywnie taką samą moc jak z sudo -s.
Ponieważ pobiera hasło sudoera zamiast hasła roota, sudoizoluje 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ć, sumusieli zostać poinformowani. sudoumożliwia niezależne zmienianie haseł sudoers. W rzeczywistości powszechne jest blokowanie hasłem konta użytkownika root w systemie w sudocelu wymuszenia wykonania wszystkich zadań sysadmin przez sudo. 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 bashi sudo -spolega na tym, że -sjest 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-commandktóry działa some-commandpod twoją powłoką. Zasadniczo jest to skrót sudo $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 jednego sudowywołania, unikając konieczności sudowielokrotnego pisania .
Oba te zachowania są opcjonalne. O wiele częściej dajesz -ssam, więc po prostu uruchamia interaktywnie powłokę użytkownika. W tym trybie różni się sudo bashtym, że może uruchamiać inną powłokę niż bash, ponieważ najpierw wygląda w SHELLzmiennej ś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 -sdziedziczy twoje aktualne środowisko użytkownika. Jeśli to, czego naprawdę chcesz, to czyste środowisko, takie jak dostajesz zaraz po zalogowaniu, zamiast tego chcesz sudo -i, to stosunkowo nowy dodatek sudo. Z grubsza mówiąc, sudo -ijest sudo -stak, jak su -jest su: 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 lub sudo -i some-commanduruchomi tę powłokę jako interaktywną powłokę logowania, aby skrypty startowe użytkownika (np. .bash_profile) Zostały uruchomione ponownie.
Wszystko to czyni sudo -iznacznie bezpieczniejszym niż sudo -s. Dlaczego? Ponieważ jeśli ktoś może wcześniej zmodyfikować twoje środowisko sudo -s, może spowodować wykonanie niezamierzonych poleceń. Najbardziej oczywistym przypadkiem jest modyfikacja SHELL, ale może się to również zdarzyć mniej bezpośrednio, na przykład przez, PAGERjeśli powiesz, man foogdy jesteś pod sudo -s.
Możesz powiedzieć: „Jeśli mogą modyfikować PAGER, mogą modyfikować PATH, a następnie mogą po prostu zastąpić zły sudoprogram”, ale ktoś wystarczająco paranoiczny może powiedzieć, /usr/bin/sudo /bin/bashaby 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ć EDITORna przykład przed uruchomieniem jakiegokolwiek polecenia VCS ? W ten sposób sudo -i.
Ponieważ sudo -izmienia również katalog roboczy na katalog domowy użytkownika, możesz nadal chcieć używać sudo -sw sytuacjach, w których wiesz, że chcesz pozostać w tym samym katalogu, cdw którym byłeś podczas uruchamiania sudo. Jednak nadal jest bezpieczniej tam sudo -iiz cdpowrotem.
sudo su -ten sposób nie potrzebujesz hasła roota, a-upewnia się, że katalog domowy jest ustawiony poprawnie.