W jaki sposób sudo jest bezpieczniejsze niż bezpośrednie używanie su, jeśli użytkownik ma dostęp do wszystkich poleceń?

40

Czytałem więc o różnicach między używaniem sui sudo, i wszyscy wydają się zgadzać, że takie sudopodejście jest bezpieczniejsze niż umożliwianie dostępu do samego konta root. Mówią, że z kontem root możesz złamać cały system za pomocą jednego polecenia. Rozumiem to. ALE początkowy użytkownik utworzony w systemie ma również dostęp do wszystkich poleceń za pomocą sudo. Mogę to sprawdzić, uruchamiając su -l. W takim przypadku mogę po prostu sudo <game-ending command>zepsuć mój system. Więc jak to podejście jest lepsze lub bezpieczniejsze niż umożliwienie mi bezpośredniego dostępu do konta superużytkownika? Mogę uruchomić wszystkie te same polecenia ...

Czy to dlatego, że za pomocą sudowiersza poleceń wyraźnie mówię komputerowi, że myślę, że wiem, co robię? Czy myślą, że ludzie zapomną, że są na koncie superużytkownika, chyba że wyraźnie to powiedzą?

Ludzie twierdzą również, że gdyby system został przejęty i wprowadzony przez kogoś obcego, posiadanie konta roota pozwoliłoby mu na zrobienie okropnych rzeczy w moim systemie. Ale wydaje mi się, że jeśli mają już dostęp do mojego konta i znają moje hasło, mogą zrobić te same okropne rzeczy, używając sudo i wpisując moje hasło, ponieważ nawet nie muszą znać hasła superużytkownika. Czego tu nie dostanę?

bmcentee148
źródło
2
Dziękujemy za utworzenie tego pytania, więc teraz jest coś do pokazania osobom, które twierdzą, że sudo jest bezpieczniejsze, ale nie może tego uzasadnić.
user253751

Odpowiedzi:

40

Osobiście niekoniecznie uważam to za bezpieczniejsze, a większość korzyści (sudo) dotyczy systemu dla wielu użytkowników. W systemie dla jednego użytkownika prawdopodobnie jest to pranie.

Korzyści są (bez określonej kolejności):

  • sudo ma lepsze logowanie. sudo rejestruje każde polecenie.
  • sudo umożliwia dokładniejszą kontrolę ziarna. Można skonfigurować sudo, aby zapewnić rootowi dostęp do niektórych, ale nie wszystkich poleceń.
  • sudo używa hasła logowania. Zapobiega to podawaniu hasła roota (tak jak w przypadku su) i jest związane z powyższym punktem dotyczącym dokładniejszej kontroli / dostępu do roota.
  • W Ubuntu domyślnie konto root jest zablokowane. To odstrasza crackerów, aby się logowali (zdalnie przez powiedzmy ssh), muszą odgadnąć zarówno nazwę użytkownika, jak i hasło. Jeśli konto roota nie jest zablokowane, jak ma to miejsce w przypadku su, muszą jedynie złamać hasło roota.
  • sudo -ijest prawdopodobnie najlepszą metodą izolowania zmiennych środowiskowych root od użytkownika. To pojawia się od czasu do czasu, ale jest umiarkowanie ezoteryczne. Zobacz https://help.ubuntu.com/community/RootSudo#Special_notes_on_sudo_and_shells
  • niektórzy ludzie uważają, że konieczność wpisania sudo przed każdym poleceniem, które chcą uruchomić jako root lub przekroczenie limitu czasu sudo, pozwala im zatrzymać się i myśleć jaśniej, redukując błędy lub uruchamiając błędne polecenia. Jeśli to pomoże, to również będzie korzystne.

Prawdopodobnie jest więcej korzyści, ale te są najważniejsze, IMHO.

Zobacz także - https://help.ubuntu.com/community/RootSudo

Aby spróbować odpowiedzieć na inne twoje przemyślenia:

  • W su ani sudo nie ma nic, co uniemożliwia uruchomienie złośliwego kodu, o ile znasz hasło. Ani nie jest bezpieczniejsze ani lepsze.
  • Krakersy mogą uzyskać dostęp do powłoki za pomocą wielu metod. Kiedy widzisz „uruchom dowolny kod” w informacji o bezpieczeństwie - https://usn.ubuntu.com/usn/ - oznacza to, że cracker może uruchomić / bin / bash lub dowolny inny kod. W ten sposób cracker, poprzez różne exploity, może uzyskać dostęp do powłoki bez znajomości nazwy użytkownika i hasła. Ani sudo, ani su nie pomaga w tym.
  • Jeśli cracker ma dostęp do powłoki, może wyrządzić wiele szkód bez dostępu do roota. Na przykład oprogramowanie ransomware, które szyfruje wszystkie dane osobowe.
  • Jeśli cracker ma dostęp do konta z dostępem roota za pośrednictwem su lub sudo, cracker może uzyskać dostęp do roota na wiele sposobów poza zakresem tej dyskusji. Ani sudo, ani su nie jest pod tym względem lepszy.

Więc chociaż zauważyłeś problemy lub wady sudo, su ma dokładnie te same luki i su nie jest lepszy od sudo w tych aspektach, IMHO

Pantera
źródło
Byłoby dobrze, aby wyrazić zgodę, aby umożliwić wszystkim użytkownikom kontrolę zasilania (wyłączanie i ponowne uruchamianie) po instalacji destop, zamiast wpisów sudoers lub nazwy grupy.
mckenzm
8
Uważam, że największą zaletą jest uzasadnienie każdego polecenia jako wymagającego uprawnień administratora. W swoim wczesnym doświadczeniu z Linuksem odkryłem, że zawsze działałem jako root w co najmniej jednym terminalu, gdy majstrowałem przy systemie. Niestety, bardzo łatwo jest wydać destrukcyjne polecenie na terminalu przez nieporozumienie lub błędne wpisanie. Gdyby to było w „terminalu głównym”, mogłoby to spowodować przywrócenie z kopii zapasowej lub ponownej instalacji. sudo chroniło mnie przed tym wiele razy!
rolinger
14
Bezkompromisowe hasło roota jest być może największą zaletą sudo. Możesz dać uprawnienia roota bez ujawniania żadnych tajemnic.
Thorbjørn Ravn Andersen
Nie tylko możesz ograniczać polecenia, ale nawet ograniczać określone argumenty. Ale nie zgadzam się z tym, że zablokowanie roota ma z tym coś wspólnego; ponieważ możesz skonfigurować ssh, aby nie zezwalał na logowanie roota. Jest coś jeszcze z su versus sudo: sudo używasz hasła użytkownika, które jest o jedno mniej haseł do złamania i zwykle nie jest to dobra rzecz. Jak wszystko na tym świecie, istnieją różne sposoby na załatwienie czegoś, co nie znaczy, że jedna metoda jest bardziej poprawna niż inne w 100% przypadków, jeśli kiedykolwiek. Następnie są preferencje.
Pryftan
Ale otoh, jeśli więcej niż jeden użytkownik potrzebuje dostępu do roota (nie jest to coś, w co się wciągnę, ponieważ to po prostu - cóż, to w najlepszym razie gorąca dyskusja), wtedy sudo ma przewagę.
Pryftan
10

Wyobraź sobie, że masz 20 minut na zrobienie czegoś złożonego. Jesteś trochę kacem i musisz się spieszyć. „Używajmy su”, mówisz. „To zaoszczędzi trochę czasu” to twoje rozumowanie.

Przez przypadek piszesz

rm -rf /*

zamiast

rm -rf ./*

Twój system sam się teraz łamie i masz 10 minut do terminu.

Jeśli wyraźnie wybierzesz, kiedy potrzebujesz roota, możesz zminimalizować ryzyko takiego zdarzenia. Root może nie być potrzebny, rm -r ./*więc po co go używać? Po co ryzykować?

To właśnie oznacza tutaj „bezpieczeństwo”. Minimalizowanie ryzyka, że ​​użytkownicy (wszyscy użytkownicy, nie tylko początkujący) popełnią fatalny błąd.

Oczywiście jest to ekstremalny przykład, który nie powinien mieć miejsca w środowisku produkcyjnym (gwarantuję, że tak się stało w środowisku produkcyjnym).

Ze względów bezpieczeństwa sudo też jest lepsze. Jak mówi @Panther - logowanie, ograniczenia, hasło roota to SPOF itp.)

dijksterhuis
źródło
4
Do diabła, nie musisz czekać tak długo, jeśli tylko to zrobisz ... chown -R nobody:nobody /lub nawet chown -R nobody ../jako root. chmodoczywiście ma podobne problemy również w trybie rekurencyjnym. Ale najlepsze, co robisz, to to, że powinieneś być rootem tylko wtedy, gdy tego potrzebujesz; im mniej uprawnień do logowania, tym lepiej do normalnego użytkowania.
Pryftan
2
+1 za programowanie, gdy masz kaca.
abhicantdraw
4
Czym się to różni sudo? Pisz sudo rm -rf /*zamiast sudo rm -rf ./*i bum ponownie.
ilkkachu
2
@ilkkachu pod względem faktycznego polecenia, robi minimalną różnicę w tym, co się dzieje. Ale musiałeś wyraźnie powiedzieć, że chcesz to zrobić jako root. O to chodzi. Bezpieczeństwo dotyczy zarządzania ryzykiem. Oczywiście nadal możesz zepsuć system. Ale im mniej masz uprawnień root, tym mniejsza szansa na fatalny błąd. Bezpieczeństwo polega na minimalizowaniu prawdopodobieństw.
dijksterhuis
2
@ilkkachu Ponieważ nie wpisać sudo rm -rf ./*. Prawdopodobnie masz dostęp do zapisu w bieżącym katalogu, więc nie potrzebujesz sudo do tego polecenia. Więc z typoed końcach dowodzenia góry być rm -rf /*, co daje długi ciąg „Permission denied” wiadomości z powiadomieniem trzeba ctrl-czanim dotrze do rzeczy rzeczywiście można usunąć, a nie tylko usuwając wszystko /bin, /boot, /dev, i połowa /etcprzed nawet zdajesz sobie sprawę, że coś jest nie tak.
Ray
9

Chcę dodać trochę historycznej perspektywy do innych odpowiedzi. Niestety nie mam przygotowanych żadnych źródeł oprócz wspomnień z dyskusji w Usenecie i artykułów w czasopismach.

Jakiś czas temu, w latach 90., dystrybucje ułatwiały instalację Linuksa na twoim sprzęcie, nawet przy niewielkiej wiedzy komputerowej .¹ W ten sposób Linux zaczął przyciągać coraz więcej osób, które, o dziwo, nie były wcześniej wyszkolone jako administratorzy systemu na jakiś dialekt UN * X. Zamiast tego wielu było przyzwyczajonych do systemów (pojedynczych użytkowników), takich jak Windows 95/98. Dowiedzieli się też, że większość zadań związanych z administrowaniem systemem Linux wymaga pracy pod tym dziwnym kontem „root”.

Dlatego niektórzy użytkownicy logowali się po prostu jako root i korzystali z tego konta przez całą codzienną pracę. Dlatego powinny one mieć do pisania sui do głównego hasła ponownie i ponownie lub logowania do nowego terminala tylko dla niektórych poleceń administracyjnych? Ale korzystanie z roota do wszystkiego nie jest oczywiście dobrym pomysłem, ponieważ możesz wyrządzić o wiele więcej szkody systemowi, wykonując niemądre polecenie w niewłaściwym miejscu. Doprowadziło to nawet niektórych dystrybucji (czy to SuSE?) Do zmodyfikowania tła pulpitu dla użytkownika root, aby wyświetlał duże ostrzeżenie, że należy używać tego konta tylko do zadań administracyjnych.

Tak więc sposób Ubuntu sudoma pewne zalety (oprócz tych już wymienionych przez Panther ).

  • Nie można zalogować się bezpośrednio do korzeni account.² :-)
  • Proces instalacji nie poprosi Cię o (dodatkowe) hasło roota, potrzebujesz tylko jednego hasła (użytkownika).
  • sudobuforuje twoje dane uwierzytelniające, więc w przypadku wielu poleceń administratora po kolei hasło trzeba wprowadzić tylko raz (w przeciwieństwie do su). Zmniejsza to potrzebę otwierania powłoki lub nowego terminala z uprawnieniami administratora .
  • Ułatwia także użytkownikom informowanie użytkowników online i w dokumentacji, które polecenia należy wprowadzić jako administrator, a które nie

¹ A dla tych, którzy nie odważą się zrobić tego sami, zorganizowano imprezy.
² Ale można użyć polecenia podobny sudo -ilub sudo su - rootuzyskać powłokę roota po zalogowaniu się jako zwykły użytkownik.
³ Ale wiesz oczywiście, że nie powinieneś po prostu kopiować i wklejać poleceń z Internetu , prawda?

Dubu
źródło
Mówisz w Ubuntu, że nie możesz: sudo su -lub sudo su - root? Ponieważ widziałem podobne twierdzenia, np. Że MacOS X nie ma roota, ale jest to całkowicie błędne, gdy trzeba tylko wykonać pierwsze polecenie ...
Pryftan
2
Oczywiście istnieje konto root . Powiedziałem, że nie można „zalogować się bezpośrednio”, co oznacza, że ​​nie można wprowadzić użytkownika rooti hasła w oknie logowania lub w oknie dialogowym logowania X i rozpocząć sesję jako root. Ale możesz użyć jednego ze swoich poleceń (wolę, sudo -iponieważ jest on krótszy i jestem leniwy), aby uzyskać powłokę root.
Dubu,
1
Przeczytaj mój komentarz jeszcze raz :) Powiedziałem, że niektórzy twierdzą, że MacOS X nie ma konta root, ale tak naprawdę przypomina mi to (nie zrównałem go z brakiem konta root w Ubuntu). Ale o ile wiem, deweloperzy z Ubuntu byli na tyle szaleni, że załatali sudo, aby nie pozwolić na to moje pytanie.
Pryftan
1
@Pryftan Jak powiedziałem w moim komentarzu powyżej, oba polecenia działają i otrzymają root root. Dodam to do mojej odpowiedzi.
Dubu,
Tak. Wiem to :) Nie mówiłem, że to nieprawda, czy nie. Mówiłem, że przypomina mi coś, co niektórzy mówią, ale nie mają racji. Stąd pogrubienie tej części.
Pryftan
2

Możliwe było wyłączenie logowania roota przez ssh od dziesięcioleci. Ubuntu sposób wyłączania konta root i zmuszania ludzi do sudo wszystko to nic innego jak sztuczka. Wystarczy „sudo -s” i masz powłokę root. Wyłącz logowanie roota przez ssh i zostaw je tam.

P. Goetterup
źródło
8
... w tym względzie, przechodzenie tylko na klucz DO KAŻDEGO logowania ssh, nie tylko do konta root, JEST świetną praktyką.
rackandboneman
Tak. Zauważyłem to w komentarzu kilka minut temu. Oto najmniej uprzywilejowane jest najlepsze, więc zwiększaj je tylko wtedy, gdy jest to konieczne, i dotyczy to tego, czy jesteś zalogowany przez ssh, czy lokalnie. I to, co mówi @rackandboneman, jest oczywiście absolutnie poprawne, chociaż dla mnie wyłączam zdalne zatrzymanie root nawet przy kluczach ssh niezależnie od systemu.
Pryftan
0

W zależności od konfiguracji sudo <game ending command>niekoniecznie będzie działać. Oczywiście, jeśli sudoerskonfiguracja brzmi „user ALL = (ALL) ALL”, sudonie zapewni żadnej dodatkowej ochrony. Możesz jednak określić listę uprzywilejowanych poleceń, które musisz często uruchamiać, takich jak instalowanie nowych pakietów, i pominąć niebezpieczne polecenia, takie jak rm.

W ten sposób możesz uruchamiać wszystkie polecenia, jeśli zalogujesz się jako root, ale ponieważ będziesz tego potrzebował tylko od czasu do czasu, ryzyko uruchomienia <game ending command>zostanie znacznie zmniejszone.

Dmitrij Grigoriew
źródło
1
Oraz konkretne argumenty dla poleceń.
Pryftan
1
I na grupę, a nie na użytkownika. korzystanie z grup jest nieocenione w środowiskach dla wielu użytkowników, w których pracownicy mogą przychodzić i odchodzić oraz gdzie mogą być potrzebne określone role.
Panther
0

To sudo pozwala na stosowanie tylko niektórych poleceń, nie jest jedyną zaletą sudo nad su.

W większości sklepów nie jest to nawet najważniejsza korzyść.

Dzięki sudo wiesz, kto wykonał określone polecenie.

Może to nie ma dla ciebie znaczenia. Na przykład możesz być jedynym użytkownikiem swojego komputera. Jeśli tak, to sudo prawdopodobnie nie jest lepsze od su.

Ale wiele hostów ma więcej niż jednego administratora.

sudo staje się wtedy bardzo przydatne, ponieważ jeśli ktoś zrobi coś złego, sudo poinformuje cię, kto to zrobił.

To pozwala ci zrozumieć, dlaczego wystąpiły błędy, i edukować ludzi, aby zapobiegać powtarzającym się błędom lub, jeśli to konieczne, usuwać narzędzia od kogoś.

Jako bonus, gdy ludzie wiedzą, że ich działania są rejestrowane, często są nieco bardziej ostrożni.

Sudo nie jest idealne.

Jeśli dwie osoby wykonują „sudo sh” w tym samym czasie, może być trudno przypisać polecenia jednemu lub drugiemu.

A złośliwy administrator zawsze może usuwać lub edytować dzienniki - chociaż robienie tego w czysty sposób nie zawsze jest tak łatwe, jak ludzie myślą, szczególnie jeśli masz scentralizowane rejestrowanie.

sudo niekoniecznie zatrzymuje głupią lub złośliwą akcję z wszystkich powodów wskazanych w pierwotnym pytaniu.

Ale daje to znacznie większą szansę na zapobieganie nawrotom.

Ben Aveling
źródło
1. Tylko jeśli poświęcisz trochę czasu na jego prawidłowe skonfigurowanie. Czego domyślny system Ubuntu nie robi (i nie może). 2. Tylko jeśli użytkownik nie ma możliwości edycji post-faktów w dziennikach, co może, chyba że polecenia, które można uruchomić, są ograniczone. (Którego nie ma w domyślnym przypadku użycia Ubuntu)
ilkkachu
@ilkkachu, chociaż masz kilka dobrych argumentów, twój argument tutaj nie ma sensu. Nie chodzi o ustawienia domyślne, chodzi o to, że można skonfigurować i dostroić sudo. Nie można w ogóle skonfigurować su do działania w ten sposób. su to wszystko albo nic, nie ma możliwości ograniczenia poleceń i jest faktem, że sudo zapewnia lepsze rejestrowanie. Ani su, ani sudo nie oferują żadnego zabezpieczenia przed tym, co włamywacz może zrobić lub nie w zaatakowanym systemie, i nikt nie wyciągnął sudo w ten sposób. Dzienniki sudo mają wielką wartość w normalnych codziennych operacjach.
Panther
@Panther, cóż, tytuł pytania brzmi „... jeśli użytkownik ma dostęp do wszystkich poleceń?” więc założyłem, że oznaczały one zwykłą domyślną konfigurację Ubuntu, w której sudozezwala na wszystko. Jasne, możesz go skonfigurować tak, aby ograniczyć liczbę poleceń, które użytkownik może uruchamiać, ale nie sądzę, żeby tak było w pytaniu zadanym.
ilkkachu
Odpowiedź rozszerzona.
Ben Aveling,
@ilkkachu - przeczytaj ponownie moją odpowiedź „Osobiście niekoniecznie uważam to za bezpieczniejsze, a większość korzyści (sudo) dotyczy systemu dla wielu użytkowników. W systemie dla jednego użytkownika prawdopodobnie jest to pranie”. Następnie wyjaśniłem inne zalety sudo, z których jedną jest to, że można go konfigurować.
Panther