Jaka jest funkcjonalna różnica między sudo su i sudo -i?

19

Dlaczego w tym przykładzie jedna jest preferowana?

sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit

Podaj linki do dokumentacji Ubuntu.

chili555
źródło
Proszę ponownie rozważyć wybór „zaakceptowanych” odpowiedzi. Najsłabiej głosowany jest tak naprawdę jedynym poprawnym.
Kyle Strand,

Odpowiedzi:

15

sudo suKomenda oznacza „użytkownik switch” i pozwala stać się inny użytkownik. Umożliwia uprawnionemu użytkownikowi wykonanie polecenia jako administrator lub inny użytkownik, jak określono w pliku sudoers.

Opcja –i (symuluj początkowe logowanie) uruchamia powłokę określoną przez wpis bazy danych haseł użytkownika docelowego jako powłokę logowania. Oznacza to, że pliki zasobów specyficzne dla logowania, takie jak .profile lub .login, zostaną odczytane przez powłokę. Jeśli podano polecenie, jest ono przekazywane do powłoki w celu wykonania za pomocą opcji ‑c powłoki. Jeśli nie podano polecenia, wykonywana jest powłoka interaktywna.

Źródło: ManPage

Mitch
źródło
1
„Korzystanie z su powoduje problemy z bezpieczeństwem i jest zasadniczo niebezpieczne”. Co?
Stop Harming Monica,
1
Jeśli uruchomisz sudo su, zostaniesz poproszony o podanie hasła, a nie hasła roota. Użytkownik root nie musi nawet mieć hasła. Niezależnie od tego, jeśli administrator używa hasła roota, nie oznacza to, że wszyscy zwykli użytkownicy go znają.
Stop Harming Monica,
2
Nie, nie będzie. sudodziała sujako root, a root może sudla każdego użytkownika bez znajomości swojego hasła. Podstawowe nieporozumienia na temat działania systemu zasługują na głosowanie IMO.
Stop Harming Monica,
3
Usunięcie komentarzy tylko zwiększa zamieszanie.
Przestań krzywdzić Monikę
1
Nie poprawiasz tego znacznie. sudo -inie poprosi również o podanie hasła roota, więc nie dotyczy to pytania.
Stop Harming Monica,
14

sudo suzmienia tylko bieżącego użytkownika na root. Ustawienia środowiska (takie jak ŚCIEŻKA) pozostają takie same.

sudo -i tworzy świeże środowisko, jakby root właśnie się zalogował.

Różnica jest bardziej zauważalna, jeśli korzystasz z innych użytkowników. Po sudo su bobtym będziesz bobem, ale w tym samym miejscu. Gdy sudo -i -u bobbędziesz bobem, w katalogu domowym boba, z domyślną powłoką boba .profileoraz z uruchomionym bobem i innymi skryptami logowania.

Zobacz man sudowięcej szczegółów na temat tego, co -irobi. Niestety man sujest lekki w szczegółach.


Znaleziono wersję man su(z login-1: 4.1.4.2 + svn3283-3ubuntu5.1), która ma następujące zdanie:

$ PATH reset zgodnie z opcjami /etc/login.defs ENV_PATH lub ENV_SUPATH (patrz poniżej);

$ IFS zresetuj do „<space> <tab> <newline>”, jeśli zostało ustawione.

Pamiętaj, że domyślne zachowanie środowiska jest następujące:

Zmienne środowiskowe $ HOME, $ SHELL, $ USER, $ LOGNAME, $ PATH i $ IFS są resetowane.

Jeśli nie użyto opcji --login, środowisko jest kopiowane, z wyjątkiem powyższych zmiennych.

Jeśli użyto opcji --login, zmienne środowiskowe $ TERM, $ COLORTERM, $ DISPLAY i $ XAUTHORITY są kopiowane, jeśli zostały ustawione.

Inne środowiska mogą być ustawione przez moduły PAM.

Zatem to, czy iw jakim stopniu sudo suzmieni się środowisko, zależy od dystrybucji i konfiguracji. sudo -iJest więc teoretycznie bardziej przenośny.

Przestań krzywdzić Monikę
źródło
su czy zmiana ustawień środowiska i mogą być wykorzystane do symulacji logowanie za pomocą -lub -l. Nawet bez -l, $PATH jest zmieniona. Przetestuj te twierdzenia przed ich zgłoszeniem! (Czy chodziło Ci o to, aby PWDpozostało to samo?)
Kyle Strand
Prawdziwe pytanie brzmi, czy istnieje różnica między sudo su -i sudo -i?
Kyle Strand,
1
Najwyraźniej zastanawiasz się nad tym i faktycznie testujesz w powłoce, więc przepraszam za mój krótki komentarz „przetestuj te twierdzenia”. To powiedziawszy, w moim systemie obserwuję, że $PATHzmienia się, gdy używam subez sudo(używając hasła roota). Według info su(co może być lepszym rozwiązaniem, do którego link można znaleźć w odpowiedzi), surzeczywiście czyta hasło dla użytkownika, którym się stajesz. Być może $PATHzmiana, którą obserwuję, zależy od systemu (korzystam z Debiana 7).
Kyle Strand,
1
Hmmm. Mój man su(który jest dłuższy niż ten, z którym masz link) mówi, że jest częścią shadow-utils 4.1.5.1. Moja manstrona mówi również, że $PATHjest ustawiona, nawet jeśli --preserve-environmentjest używana. Sądzę więc, że tak naprawdę jest to tylko różnica między różnymi wersjami su.
Kyle Strand,
1
Na zachowanie ma również wpływ konfiguracja PAM. /etc/pam.d/sudoi /etc/pam.d/sumoże być skonfigurowany do robienia zupełnie innych lub dokładnie takich samych rzeczy.
Przestań krzywdzić Monikę
7

Głównym problemem jest jedno z (nie tak) zdrowych ustawień środowiska.

Użycie sudo sunowej powłoki pobiera środowisko od użytkownika, który wydaje polecenie - co może być problematyczne.

Otrzymasz sudo -iczystą powłokę roota.

Zobacz specjalne uwagi na temat sudo i muszli

Pozostaje zauważyć, że rzadko jest konieczne utworzenie powłoki roota.

guntbert
źródło
„Uwagi specjalne”, które podajesz w link, aby powiedzieć, że sudo -isą podobne do tego sudo su -, co tak naprawdę nie pobiera środowiska od użytkownika wydającego polecenie.
Kyle Strand,
@KyleStrand thx za wskazanie tego - to była literówka, pytanie jest naprawdę o sudo suwersetach sudo -i.
guntbert,