Używam Linuksa od jakiegoś czasu i za każdym razem, gdy pisałem sudo
, myślałem, że przełączam się na użytkownika root w celu wykonania polecenia.
Najwyraźniej nie jest to prawdą, ponieważ wszystko, czego potrzebuję, to hasło do mojego konta użytkownika. Zgaduję, odkąd nie pracowałem z wieloma użytkownikami, tak naprawdę nie zauważyłem tego w prawdziwym świecie.
Nie jestem pewien, jak Ubuntu konfiguruje moje pierwsze konto. Czy jest użytkownik root? Czy jestem rootem? Zgaduję, że właśnie utworzyłem nowego użytkownika podczas instalacji, ale dało mi to uprawnienia roota? Po prostu trochę zdezorientowany tutaj ...
Dlaczego więc mogę uruchamiać komendy root z hasłem mojego użytkownika?
sudo
ma ustawiony bit „setuid”. Działa więc jako użytkownik, który jest jego właścicielem (który nie mylę się jako root na wszystkich standardowych systemach), a nie użytkownik, który go uruchamia.sudo
następnie ładuje/etc/sudoers
plik i sprawdza, co jest dozwolone w zależności od tego, kto go uruchomił.sudo
uprzywilejowanych osób , być może pracujących w rozproszonych geograficznie lokalizacjach i na zmianach 24 × 7, chcesz mieć możliwość natychmiastowego cofnięcia uprzywilejowanego dostępu jednej osoby (np. podejrzewasz jego uczciwość). Jeśli wszyscy używają jedynego hasła roota, a Ty je zmienisz bez uprzedniej koordynacji, może dojść do chaosu. …Odpowiedzi:
Szczegółowo działa to w następujący sposób:
/usr/bin/sudo
plik wykonywalny ma ustawiony bit setuid , więc nawet jeśli jest wykonywany przez innego użytkownika, działa z identyfikatorem użytkownika właściciela pliku (w tym przypadku root).sudo
sprawdza w/etc/sudoers
pliku, jakie masz uprawnienia i czy możesz uruchomić polecenie, które wywołujesz. Mówiąc wprost,/etc/sudoers
to plik, który określa, którzy użytkownicy mogą uruchamiać polecenia za pomocąsudo
mechanizmu.Tak wygląda ten plik na moim Ubuntu:
Trzecia linia prawdopodobnie Cię interesuje. Pozwala każdemu w grupie „sudo” wykonać dowolne polecenie jak każdy użytkownik.
Kiedy Ubuntu konfiguruje pierwsze konto podczas instalacji, dodaje to konto do grupy „sudo”. Za pomocą polecenia możesz sprawdzić, do których grup należą użytkownicy
group
.sudo
prosi o hasło. Biorąc pod uwagę fakt, że potrzebuje hasła użytkownika, a nie roota, jest to fragment instrukcji sudoers :W rzeczywistości
sudo
jednak do niczego nie potrzebuje hasła użytkownika. Prosi o to tylko po to, aby upewnić się, że naprawdę jesteś sobą i zapewnić ci jakieś ostrzeżenie (lub szansę przestać) przed wywołaniem potencjalnie niebezpiecznego polecenia. Jeśli chcesz wyłączyć pytanie o hasło, zmień wpis sudoers na:Po uwierzytelnieniu
sudo
odradza się proces potomny, który uruchamia wywołane polecenie. Dziecko dziedziczy identyfikator użytkownika root po rodzicu -sudo
procesie.Odpowiadając dokładnie na pytania:
Miałeś rację. Każde polecenie poprzedzone
sudo
uruchomieniem z identyfikatorem użytkownika root.Tak, istnieje konto użytkownika root, niezależne od konta użytkownika utworzonego podczas instalacji systemu. Jednak domyślnie w Ubuntu nie można zalogować się do interaktywnego terminala jako użytkownik root.
Nie, nie jesteś rootem. Masz tylko uprawnienia do uruchamiania poszczególnych poleceń jako root , korzystając z
sudo
mechanizmu opisanego powyżej.Musisz wprowadzić hasło użytkownika tylko ze względu na
sudo
wewnętrzny mechanizm bezpieczeństwa. Można to łatwo wyłączyć. Zyskujesz swoje uprawnienia roota z powodu setuid/usr/bin/sudo
, a nie z powodu wprowadzonych haseł.źródło
sudo
można uruchomić bez podawania hasła. Świetna odpowiedź!rootpw
flagą wsudoers
.sudo su - root
zrobi to i da terminal root. Jednak nie można łatwo zalogować się do sesji pulpitu jako root.sudo
ma uprawnienia roota i decyduje, czy przekazać to użytkownikowi na podstawie pliku konfiguracyjnego.Chodzi o
sudo
to, aby przyznać ci czyjeś uprawnienia (zwykle rootowanie) bez pytania o hasło do tego konta (w przeciwieństwie dosu
).sudo
prosi o podanie hasła, aby upewnić się, że przechodzący nie nadużyje odblokowanego terminala.Ubuntu i wiele innych systemów Linux i Unix przyznają początkowe konto utworzone w czasie instalacji prawo do uruchamiania dowolnych poleceń jako
root
.Chociaż
root
nadal jest kontem w systemie Linux, bezpośrednieroot
logowanie jest domyślnie wyłączone dla lepszego bezpieczeństwa i identyfikowalności.źródło
Piotr bardzo dobrze wyjaśnił, jak
sudo
działa. Jednak tak naprawdę nie motywował, dlaczego tak działa, więc postaram się to tutaj dodać.Przed utworzeniem
sudo
polecenia mieliśmysu
polecenie. To polecenie pozwala jednemu użytkownikowi na wykonywanie poleceń jako inny użytkownik, zwykleroot
(jak w przypadkusudo
, jest to domyślny użytkownik docelowy). To było całkowicie bezdyskryminacyjne, możesz wykonać dowolne polecenie. Ponieważ może być używany przez dowolnego użytkownika, był faktycznie równoważny logowaniu się jako ten użytkownik, wymagał znajomości hasła użytkownika docelowego.W pewnym momencie dodano nieco więcej kontroli dostępu: aby korzystać
su
, trzeba było być członkiemwheel
grupy. Ale ponieważ nadal możesz wykonać dowolne polecenie, nadal sensowne jest wymaganie znajomości hasła.Wymaganie od użytkowników znajomości hasła lub hasła administratora nie było jednak zbyt bezpieczne. Często chcesz po prostu dać pewnym użytkownikom ograniczony dostęp do innego konta (jest to część koncepcji bezpieczeństwa zwanej zasadą najmniejszych uprawnień ). Utrudnia to także rozliczalność: jeśli wiele osób zna hasło do konta, a to konto bierze udział w pomyłce lub nadużyciu, nie możesz powiedzieć, która z nich faktycznie to zrobiła.
Tak
sudo
powstało. Zamiast pozwalać użytkownikom na wykonywanie dowolnego polecenia, ma on rozbudowany plik konfiguracyjny, krótko omówiony w odpowiedzi Piotra, który dokładnie określa, kto może z niego korzystać, do jakich użytkowników może się przełączać i jakie polecenia mogą wykonywać. Dzięki tej drobiazgowej kontroli nad tym, kto może robić komu, nie musimy już podawać użytkownikom hasła do konta docelowego; gdybyśmy to zrobili, mogliby z łatwością ominąć wszystkie elementy sterujące w pliku konfiguracyjnym, logując się jako ten użytkownik. Zamiast tego zwykle wymagamy od nich, aby udowodnili, że są tymi, którzy się zalogowali, wprowadzając własne hasło - ma to na celu zapobiec korzystaniu z konta, jeśli terminal pozostanie bez nadzoru.Wymóg ten jest zniesiony dla superużytkownika - to konto może zrobić prawie wszystko w systemie bez użycia
sudo
, więc zostało uznane za zbyteczne. Możliwe jest również określenie w pliku konfiguracyjnym, że użytkownicy wcale nie muszą wprowadzać hasła - niektóre organizacje używają tego, gdy uważają, że fizyczne bezpieczeństwo środowiska stacji roboczej jest wystarczające, aby zapobiec nadużyciom.źródło
su
również loguje, ale ponieważ po prostu uruchamia nową powłokę, po prostu rejestruje fakt, że ktoś ją uruchomił.sudo
dopuszcza przywileje mają być odwołane, bez konieczności ponownego wydać hasło roota dla wszystkich, że potrzebuje.sudo
pozwala ograniczyć, które polecenia może wykonywać użytkownik, możesz spróbować upewnić się, że nie dajesz dostępu do poleceń, które zastąpiłyby dziennik.Odpowiedź na twoje pytanie brzmi:
Kiedy uruchamiasz polecenie w sudo , uruchamiasz polecenie z podwyższonymi uprawnieniami , czyli uprawnieniami roota . Musisz tylko wpisać swoje normalne hasło użytkownika, ponieważ zostałeś (użytkownik) dodany do pliku sudoers, który daje uprawnienia roota .
źródło
sudo
nie zawsze daje podwyższone uprawnienia, ale działa po podniesieniu uprawnień, po zrobieniu tego (sprawdzanie uwierzytelnienia, może upuścić uprawnienia). Wymaga tych podwyższonych uprawnień, aby móc zmienić użytkownika.sudo
nie korzystać z podwyższonymi uprawnieniami (ale to nie jest przypisany do sudo, np mocowanie ma również), ale polecenie, które nazywają czylicommand
wsudo command
nie może (w zależności od tego, co znajduje się w/etc/sudoers
).Po pierwsze, wyłączenie konta odbywa się zwykle poprzez ustawienie zaszyfrowanego hasła na *, które nie jest zaszyfrowaną wartością żadnego łańcucha. Nie mogę teraz sprawdzić, ale wierzę, że to właśnie robi Ubuntu dla roota. Więc technicznie nie ma hasła roota na Ubuntu.
Ale sudo poprzedza Ubuntu; został zaprojektowany dla systemów, w których z pewnością były hasła roota. Dlaczego więc nie wymaga hasła roota? Zasadniczo sudo zostało zaprojektowane tak, aby udzielać uprawnień do uruchamiania określonych poleceń określonym użytkownikom --- np. Umożliwiać programistom dostęp do roota w celu ponownego uruchomienia aplikacji internetowej, ale nie w celu uruchamiania dowolnych serwerów. Natomiast znajomość hasła roota daje nieograniczony dostęp; możesz użyć login lub su, aby otworzyć powłokę roota i uruchomić dowolne polecenia. Ponieważ sudo musi działać dla osób bez tego poziomu dostępu, nie może wymagać uruchomienia hasła roota.
źródło