Czy jest jakiś dobry powód, aby uruchomić sudo su?

78

Aby uruchomić powłokę główną na komputerach, na których konto root jest wyłączone, możesz uruchomić jedną z następujących opcji:

  • sudo -i: uruchom interaktywną powłokę logowania (czyta /root/.bashrci /root/.profile)
  • sudo -s: uruchom interaktywną powłokę bez logowania (czyta /root/.bashrc)

W świecie Ubuntu bardzo często widzę sudo susugestię jako sposób na uzyskanie powłoki roota. Po co uruchamiać dwa osobne polecenia, gdy jedno z nich zrobi? O ile mogę powiedzieć, sudo -ijest równoważne sudo su -i sudo -sjest takie samo jak sudo su.

Wydaje się, że jedyne różnice (porównanie sudo -ipo lewej i sudo su -po prawej):

zrzut ekranu meld porównujący „sudo -i” i „sudo su -”

I porównując sudo -s(po lewej) i sudo su(po prawej):

zrzut ekranu meld porównujący „sudo -s” i „sudo su”

Główne różnice (ignorowanie SUDO_foozmiennych i LS_COLORS) wydają się być XDG_foozmiennymi systemowymi w sudo suwersjach.

Czy są jakieś przypadki, w których ta różnica uzasadnia stosowanie raczej nieeleganckiego sudo su? Czy mogę bezpiecznie powiedzieć ludziom (jak często to robię), że nigdy nie ma sensu biegać, sudo suczy coś mi brakuje?

terdon
źródło
8
Nigdy nie rozumiałem tych wymyślnych systemów, ubuntuktóre uniemożliwiają użytkownikom standard su -. Stworzyli problem i teraz trwają niekończące się dyskusje na temat jego rozwiązania.
jimmij
16
@jimmij Nie musisz znać hasła roota su -? Czy nie uważasz, że stanowi to lukę w zabezpieczeniach w środowiskach wielu użytkowników, w których więcej niż jedna osoba musi mieć dostęp do konta root?
Erathiel,
4
@Christopher Problemem nie jest użytkownik, który ma uprawnienia sudo lub hasło roota do zhakowania systemu. Problem dotyczy bezpieczeństwa hasła. Po zmianie hasła roota musisz powiadomić wszystkich użytkowników, którzy go potrzebują, co może być trudne. W sudo nie masz takich trudności.
Huygens
4
Co to jest narzędzie do porównywania?
Josh The Geek
5
@jimmij W jaki sposób Ubuntu zapobiega użyciu su -? Tak, trzeba ustawić hasło roota, ale to banalne.
Phizes

Odpowiedzi:

62

Jak zauważyłeś w swoim pytaniu, główną różnicą jest środowisko.

sudo su - vs. sudo -i

W przypadku sudo su -jest to powłoka logowania, tak /etc/profile, .profilei .bashrcsą realizowane i znajdą się w katalogu domowym roota ze środowiskiem roota.

sudo -ijest prawie taki sam jak sudo su -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, .bashrclub .loginzostaną odczytane i wykonane przez powłokę.

sudo su vs. sudo -s

sudo supołączenia sudoz poleceniem su. Bash jest nazywany interaktywną powłoką niezalogowaną. Więc bashtylko wykonuje .bashrc. Możesz zobaczyć, że po przejściu na root nadal jesteś w tym samym katalogu:

user@host:~$ sudo su
root@host:/home/user#

sudo -sodczytuje $SHELLzmienną i wykonuje treść. Jeśli $SHELLzawiera /bin/bash, wywołuje sudo /bin/bash, co oznacza, że /bin/bashjest uruchamiany jako powłoka niezalogowana, więc wszystkie pliki kropek nie są wykonywane, ale bashsame czyta. bashrcużytkownika wywołującego. Twoje środowisko pozostaje takie samo. Twój dom nie będzie domem roota. Jesteś więc rootem, ale w środowisku dzwoniącego użytkownika.

Wniosek

-iFlag Dodano sudow 2004 roku , aby zapewnić podobną funkcję do sudo su -, więc sudo su -było szablon sudo -ii przeznaczona do pracy podoba. Myślę, że tak naprawdę nie ma znaczenia, którego używasz, chyba że środowisko nie jest ważne.

Dodanie

Podstawową kwestią, o której należy tutaj wspomnieć, jest to, że sudozostało zaprojektowane, aby uruchomić tylko jedno polecenie z wyższymi uprawnieniami, a następnie upuścić te uprawnienia do pierwotnych. Nigdy nie miało to na celu zmiany użytkownika i pozostawienia otwartej powłoki roota. Z biegiem czasu sudozostał rozszerzony o takie mechanizmy, ponieważ ludzie byli zirytowani tym, dlaczego używać sudoprzed każdym poleceniem.

Więc znaczenie sudonadużyło. sudomiał zachęcić użytkownika do zminimalizowania korzystania z uprawnień roota.

To, co mamy teraz, sudostaje się coraz bardziej popularne. Jest zintegrowany z prawie każdą dobrze znaną dystrybucją linuksową. Oryginalne narzędzie do przełączania na inne konto użytkownika to su. Dla weterana starej szkoły * nix takie rzeczy sudomogą wydawać się niepotrzebne. Dodaje złożoności i zachowuje się bardziej prawdopodobne w przypadku mechanizmów znanych z rodziny os Microsofts, a zatem jest sprzeczny z filozofią prostoty systemów * nix.

Nie jestem tak naprawdę weteranem, ale także moim zdaniem sudozawsze był po mojej stronie cierniem, od czasu kiedy został wprowadzony i zawsze pracowałem nad użyciem sudo, jeśli to możliwe. Jestem bardzo niechętny do użycia sudo. We wszystkich moich systemach konto root jest włączone. Ale rzeczy się zmieniają, może nadejdzie czas, kiedy subędzie przestarzały i całkowicie sudozastąpi su.

Dlatego myślę, że najlepiej będzie użyć sudowewnętrznych mechanizmów ( -s, -i) zamiast polegać na starym narzędziu, takim jak su.

chaos
źródło
4
Ach, więc przed 2004 r. Istniał wtedy powód do ucieczki sudo su? W tym czasie korzystałem z dystrybucji bez sudo i aktywnych kont root, więc nie wiem. To może tłumaczyć rozpowszechnienie sudo su meme w świecie Ubuntu.
terdon
8
Nigdy wcześniej nie wiedziałem o tym sudo -iani sudo -swcześniej - od 1991 roku prowadzę różnego rodzaju UNIX-y i dla mnie sudo su -jest to tylko zakorzeniony nawyk.
puszysty
2
Czy to sudo -sto samo co sudo $SHELLwtedy?
Samuel Edwin Ward
3
(Zgadzam się z @chaos) Powodem użycia sudo su -jest 1) to, że działa i wiesz dokładnie, co robi, oraz 2) że nie musisz pamiętać innej opcji sudo(gdy już wiesz su -) i 3) nie „ muszę pamiętać, z którą wersją sudoaktualnie pracujesz. Po co zapamiętywać jeszcze jedną ciekawostkę, skoro to, co już masz, działa dobrze? Czy jest coś su -ilepszego niż unikanie wpisu do dziennika? Nie używam sudo su -wystarczająco dużo, aby się tym martwić.
jrw32982
3
Właśnie zobaczyłem aktualizację, bardzo miło! Dla przypomnienia, pozwólcie, że stwierdzę, że ja również obcinam zęby * nix na systemach bez sudoi jestem bardzo przyzwyczajony su. To połączenie dwóch błędów mnie wkurza.
terdon
16

Aby odpowiedzieć bezpośrednio na twoje pytanie: nie, nie ma dobrego powodu, aby to zrobić. Ponadto sudo su tworzy dwa wpisy dziennika, gdy wystarczyłoby jeden.

Widziałem, jak wielu ludzi to robi, a kiedy pytam, dlaczego po prostu nie uciekają sudo -s, odpowiedź jest taka, że ​​nie wiedzą o -sflagi sudo, i generalnie zmieniają się po tym, jak to zaznaczam.

Jednak do twojej listy sudo -si sudo -ichciałbym dodać jeszcze jedną opcję sudo -sE, która jest swego rodzaju zamiennikiem su -m. sudo -sEchroni środowisko, w tym katalog domowy. Jest to niebezpieczne, jeśli twój katalog domowy jest niepewny (w NFS). Ale w środowisku, w którym wiele osób korzysta z roota, pozwala to uniknąć konieczności uzgadniania zawartości .bashrcpliku root . Moja .bashrczawiera wiele specjalizacji dla roota, więc nie otrzymuję dokładnie tego samego środowiska co root, ale przynajmniej dostaję dokładnie takie środowisko, jakie chcę.

użytkownik3188445
źródło
4
Jeśli chroni twoje środowisko, w tym $HOMEoznacza to, że wszystkie nowe pliki utworzone w folderze domowym są własnością użytkownika root, a nie ciebie. Z tego powodu wiele trudnych do zdiagnozowania błędów uprawnień.
Eris,
sudo -sEa następnie echo $HOMEpodaje /rootCentOS 7, bash 4.2. -sEnie wydaje się, aby zachować katalog główny, jak powiedziałeś.
jeremysprofile,