Streszczenie: „root” to rzeczywista nazwa konta administratora. „sudo” to polecenie, które pozwala zwykłym użytkownikom wykonywać zadania administracyjne. „Sudo” nie jest użytkownikiem.
Długa odpowiedź:
„root” (aka „superuser”) to nazwa konta administratora systemu. Początki nazwy są trochę archaiczne, ale to nie ma znaczenia.
Użytkownik root ma identyfikator użytkownika 0 i nominalnie ma nieograniczone uprawnienia. Root może uzyskać dostęp do dowolnego pliku, uruchomić dowolny program, wykonać dowolne wywołanie systemowe i zmodyfikować dowolne ustawienie. (Ale patrz poniżej¹).
Przed wynalezieniem polecenia „sudo”, jeśli chciałeś wykonywać zadania administracyjne, musiałeś zalogować się jako root, albo otrzymując monit o logowanie², albo su
komendą („su” to skrót od zastępczego użytkownika.) ³
To trochę kłopotliwe, a także nie daje użytkownikom częściowych uprawnień administracyjnych. Tak więc wymyślono polecenie „sudo” (skrót od „substitute user do”).
Polecenie „sudo” umożliwia wykonywanie poleceń z uprawnieniami administratora, o ile identyfikator użytkownika znajduje się w pliku sudoers, co daje niezbędne uprawnienia.
Tak więc np. sudo vi /etc/hosts
Pozwoli ci edytować plik hosts tak, jakbyś działał jako root. Nie potrzebujesz nawet hasła roota, tylko własne hasło logowania.
I oczywiście sudo su
pozwoliłoby ci po prostu zostać rootem. Rezultat jest taki sam, jakbyś zalogował się jako root lub wykonał su
polecenie, tyle że nie musisz znać hasła roota, ale musisz znajdować się w pliku sudoers.
Plik sudoers określa, kto może korzystać z polecenia sudo i co może z nim zrobić.
Plik sudoers daje wielu administratorom⁴. W rzeczywistości administratorzy są rootami, a także wszyscy wymienieni w pliku sudoers. Bez pliku sudoers jedynym administratorem jest root.
W rzeczywistości w organizacjach, w których ktoś inny administruje twoim komputerem, dość często nie znasz hasła roota twojego komputera - tak długo, jak jesteś w pliku sudoers, nie ma to znaczenia.
W jednej firmie, dla której pracowałem, z gigantyczną farmą serwerów, tylko bardzo, bardzo mała liczba osób znała hasła roota. Zamiast tego istniała baza danych, kto mógł pracować na których serwerach. Zautomatyzowany proces dodałby cię do plików sudoers tych serwerów, do których masz uprawnienia dostępu, i usunął cię po wygaśnięciu autoryzacji.
¹ Jeszcze jedno: nowoczesne wersje Uniksa mogą teraz ograniczać nawet to, co może zrobić użytkownik root.
W SELinux (Security Enhanced Linux) istnieje efektywnie lista kontroli dostępu, która określa, który program może zrobić, a nawet root nie może ominąć tych ograniczeń.
W systemie Apple System Integrity Protection (SIP) (aka „rootless”) niektóre pliki i katalogi są blokowane, aby tylko aplikacje na odpowiedniej białej liście miały do nich dostęp.
Systemy te istnieją, aby chronić system przed przypadkiem, gdy złośliwy użytkownik zdoła uzyskać dostęp do konta root. (Lub w niektórych przypadkach, aby uniemożliwić użytkownikom jailbreakowanie ich urządzeń osadzonych). Z oczywistych powodów bardzo trudno jest ominąć te ograniczenia, nawet z dostępem do konta root.
² Podpowiedź „login:” to kolejny archaiczny kawałek historii Uniksa, datowany na czasy, kiedy wszyscy używaliśmy terminali ascii na liniach szeregowych zamiast systemów okien. Nadal możesz uzyskać monit „login:”, po prostu wpisując login
w dowolnym oknie terminala lub otwierając połączenie ssh (lub telnet lub rsh) z komputerem z innego miejsca. Jeśli chcesz, możesz zalogować się jako inny użytkownik. (A jeśli twój komputer ma porty szeregowe, nadal możesz go skonfigurować, aby zezwolił na logowanie.)
³ Możliwe jest również, że poszczególne programy mają dostęp do roota. Programy te mogą zrobić wszystko, co może zrobić użytkownik z dostępem do konta root, nawet jeśli są uruchamiane przez zwykłego użytkownika. Zazwyczaj są one ograniczone do określonych zadań. Na przykład program crontab ma uprawnienia rootowania, dzięki czemu może edytować tabele cron. Oczywiście „sudo” ma uprawnienia rootowania, dzięki czemu może robić to, co robi.
Cover Omówię jeszcze jedną kwestię, o której wcześniej wspomniałem. Używam „administrator” i „root” zamiennie, ale są też inni administratorzy. Są one często nazywane „kontami ról”, co oznacza, że konta te nie należą do rzeczywistych ludzi, ale istnieją, aby pełnić określoną rolę w systemie. Jeśli spojrzysz na /etc/passwd
plik w swoim systemie, znajdziesz dziesiątki takich kont.
Na przykład, jeśli mysql został zainstalowany w twoim systemie, byłby użytkownik „mysql”, a wszystkie pliki bazy danych, pliki konfiguracyjne itd. Byłyby własnością tego użytkownika. Tylko ten użytkownik miałby niezbędne uprawnienia dostępu do plików i uruchomienia serwera mysql. W pewnym sensie ten użytkownik byłby kontem administratora, ale tylko dla mysql.
Jeśli musisz wykonywać zadania administracyjne bazy danych, możesz albo stać się „mysql” za pomocą su mysql
komendy, albo użyć sudo
miejsca, w którym plik sudoers daje ci uprawnienia mysql do tych konkretnych komend.