Jak kontrolować dostęp sudo w systemie Linux

Opublikowany: 2022-01-29
Okno terminala Linux na pulpicie w stylu Ubuntu.
Fatmawati Achmad Zaenuri/Shutterstock

Polecenie sudo pozwala uruchamiać polecenia w systemie Linux tak, jakbyś był kimś innym, takim jak root . sudo pozwala również kontrolować, kto może uzyskać dostęp do możliwości root's , z szczegółowością. Daj użytkownikom pełny dostęp lub pozwól im używać małego podzbioru poleceń. Pokażemy Ci jak.

sudo i uprawnienia roota

Wszyscy słyszeliśmy (uproszczenie), że wszystko w Linuksie jest plikiem. W rzeczywistości praktycznie wszystko w systemie operacyjnym, od procesów, plików, katalogów, gniazd i potoków, komunikuje się z jądrem poprzez deskryptor pliku. Więc chociaż wszystko nie jest plikiem, większość obiektów systemu operacyjnego jest obsługiwana tak, jakby nimi były. Tam, gdzie to możliwe, projekty systemów operacyjnych Linux i Unix są zgodne z tą zasadą.

Pojęcie „wszystko jest plikiem” jest w Linuksie dalekosiężne. Łatwo więc zobaczyć, jak uprawnienia do plików w Linuksie stały się jednym z filarów przywilejów i praw użytkownika. Jeśli jesteś właścicielem pliku lub katalogu (specjalnego rodzaju pliku), możesz robić z nim, co chcesz, w tym edytować, zmieniać nazwę, przenosić i usuwać. Możesz także ustawić uprawnienia do pliku, aby inni użytkownicy lub grupy użytkowników mogli czytać, modyfikować lub uruchamiać plik. Każdy podlega tym uprawnieniom.

Każdy, kto jest oprócz superużytkownika, znany jako root . Konto root jest kontem szczególnie uprzywilejowanym. Nie jest związany uprawnieniami do żadnego z obiektów w systemie operacyjnym. Użytkownik root może zrobić wszystko i, w zasadzie, w dowolnym momencie.

Reklama

Oczywiście każdy, kto ma dostęp do hasła root's może zrobić to samo. Mogą siać spustoszenie złośliwie lub przypadkowo. W rzeczywistości użytkownik root również może siać spustoszenie, popełniając błąd. Nikt nie jest nieomylny. To niebezpieczne.

Dlatego obecnie uważa się za najlepszą praktykę, aby w ogóle nie logować się jako root . Zaloguj się za pomocą zwykłego konta użytkownika i użyj sudo , aby podnieść swoje uprawnienia na krótki okres, w którym ich potrzebujesz. Często jest to po prostu wydanie jednego polecenia.

POWIĄZANE: Co oznacza „Wszystko jest plikiem” w systemie Linux?

Lista sudoers

sudo było już zainstalowane na komputerach Ubuntu 18.04.3, Manjaro 18.1.0 i Fedora 31, na których wykorzystano ten artykuł. To nie jest niespodzianka. sudo istnieje od wczesnych lat osiemdziesiątych i stało się standardowym sposobem działania administratora w prawie wszystkich dystrybucjach.

Kiedy instalujesz nowoczesną dystrybucję, użytkownik tworzony podczas instalacji jest dodawany do listy użytkowników zwanej sudoers . To są użytkownicy, którzy mogą używać polecenia sudo . Ponieważ masz uprawnienia sudo , możesz ich użyć, aby dodać innych użytkowników do listy sudoerów.

Oczywiście nieostrożne jest przyznawanie pełnego statusu superużytkownika, chcąc nie chcąc, lub każdemu, kto ma tylko częściową lub konkretną potrzebę. Lista sudoers pozwala określić, z jakimi poleceniami poszczególni użytkownicy mogą używać sudo . W ten sposób nie dajesz im kluczy do królestwa, ale nadal mogą osiągnąć to, czego potrzebują.

Uruchamianie polecenia jako inny użytkownik

Pierwotnie nazywało się to „superuser do”, ponieważ można było robić różne rzeczy jako superużytkownik. Jego zakres został teraz rozszerzony i możesz użyć sudo do wykonania polecenia, tak jakbyś był dowolnym użytkownikiem. Został przemianowany, aby odzwierciedlić tę nową funkcjonalność. Teraz nazywa się to „zastępczym użytkownikiem”.

Aby użyć sudo do uruchomienia polecenia jako inny użytkownik, musimy użyć opcji -u (użytkownik). Tutaj uruchomimy polecenie whoami jako użytkownik mary . Jeśli użyjesz polecenia sudo bez opcji -u , uruchomisz polecenie jako root .

Reklama

I oczywiście, ponieważ używasz sudo , zostaniesz poproszony o podanie hasła.

 sudo-u mary whoami 

Odpowiedź whoami mówi nam, że konto użytkownika uruchamiające polecenie to mary .

Możesz użyć polecenia sudo , aby zalogować się jako inny użytkownik bez znajomości jego hasła. Zostaniesz poproszony o podanie własnego hasła. Musimy użyć opcji -i (logowanie).

 sudo-i-u mary
 pwd
 kim jestem
 ls-hl
 Wyjście 

Jesteś zalogowany jako mary . Pliki „.bashrc”, „.bash_aliases” i „.profile” dla konta użytkownika mary są przetwarzane dokładnie tak, jakby właściciel konta użytkownika mary sam się zalogował.

  • Wiersz polecenia zmienia się, aby odzwierciedlić, że jest to sesja dla konta użytkownika mary .
  • Polecenie pwd pokazuje, że jesteś teraz w katalogu domowym mary's .
  • whoami mówi nam, że używasz konta użytkownika mary .
  • Pliki w katalogu należą do konta użytkownika mary .
  • Polecenie exit przywraca normalną sesję konta użytkownika.

Edycja pliku sudoers

Aby dodać użytkowników do listy osób, które mogą korzystać z sudo , musisz edytować plik sudoers . Niezwykle ważne jest, abyś robił to tylko za pomocą polecenia visudo . Polecenie visudo zapobiega jednoczesnej próbie edycji pliku sudoers przez wiele osób. Wykonuje również sprawdzanie składni i analizowanie zawartości plików podczas ich zapisywania.

Reklama

Jeśli Twoje zmiany nie przejdą testów, plik nie zostanie zapisany na ślepo. Masz opcje. Możesz anulować i porzucić zmiany, cofnąć się i ponownie edytować zmiany lub wymusić zapisanie nieprawidłowych edycji. Ostatnia opcja to bardzo zły pomysł. Nie ulegaj pokusie, aby to zrobić. Możesz znaleźć się w sytuacji, w której każdy przypadkowo zostanie zablokowany przed użyciem sudo .

Chociaż proces edycji rozpoczynasz za pomocą polecenia visudo , visudo nie jest edytorem. Wywołuje jednego z istniejących edytorów, aby wykonać edycję pliku. W Manjaro i Ubuntu komenda visudo uruchomiła prosty edytor nano . W Fedorze visudo uruchomiło wydajniejszego — ale mniej intuicyjnego — vim .

POWIĄZANE: Jak wyjść z edytora Vi lub Vim

Jeśli wolisz używać nano w Fedorze, możesz to łatwo zrobić. Najpierw zainstaluj nano :

sudo dnf zainstaluj nano

A potem trzeba było wywołać visudo za pomocą tego polecenia:

 EDYTOR sudo=nano visudo 

To wygląda na dobrego kandydata na alias. Otwiera się edytor nano z załadowanym do niego plikiem sudoers.

edytor nano z załadowanym plikiem sudoers

Dodawanie użytkowników do grupy sudo

Użyj visudo , aby otworzyć plik sudoers. Użyj tego polecenia lub opisanego powyżej, aby określić wybrany edytor:

 sudo visudo 

Przewiń plik sudoers, aż zobaczysz definicję wpisu %sudo .

Plik sudoers z podświetloną linią %sudo

Reklama

Znak procentu wskazuje, że jest to definicja grupy, a nie definicja użytkownika. W niektórych dystrybucjach linia %sudo ma hash # na początku linii. To sprawia, że ​​linia jest komentarzem. W takim przypadku usuń skrót i zapisz plik.

Linia %sudo wygląda następująco:

  • %sudo : nazwa grupy.
  • ALL= : Ta reguła dotyczy wszystkich hostów w tej sieci.
  • (ALL:ALL) : członkowie tej grupy mogą uruchamiać polecenia jako wszyscy użytkownicy i wszystkie grupy.
  • All : członkowie tej grupy mogą uruchamiać wszystkie polecenia.

Krótko mówiąc, członkowie tej grupy mogą uruchamiać dowolne polecenie, jako dowolny użytkownik lub dowolna grupa, na tym komputerze lub na dowolnym innym hoście w tej sieci. Tak więc prostym sposobem na nadanie komuś uprawnień roota i możliwości korzystania z sudo , jest dodanie go do grupy sudo .

Mamy dwóch użytkowników, Toma i Mary, z kontami odpowiednio tom i mary . Dodamy konto użytkownika tom do grupy sudo za pomocą polecenia usermod . Opcja -G (groups) określa grupę, do której zamierzamy dodać konto tom . Opcja -a (append) dodaje tę grupę do listy grup, w których znajduje się już tom konta użytkownika. Bez tej opcji konto użytkownika tom zostałoby umieszczone w nowej grupie, ale usunięte z innych grup.

 sudo usermod -a -G sudo tom 

Sprawdźmy, w jakich grupach znajduje się Mary:

 grupy 

Konto użytkownika mary jest tylko w grupie mary .

Sprawdźmy u Tomka:

 grupy 

Konto użytkownika tom — a zatem Tom — znajduje się w grupach tom i sudo .

Spróbujmy nakłonić Mary do zrobienia czegoś, co wymaga przywilejów sudo .

 sudo mniej /etc/shadow 

Reklama

Mary nie może zajrzeć do zastrzeżonego pliku „/etc/shadow”. Dostaje łagodne potępienie za próbę użycia sudo bez pozwolenia. Zobaczmy, jak radzi sobie Tom:

 sudo mniej /etc/shadow 

Gdy tylko Tom wprowadzi swoje hasło, zostanie mu wyświetlony plik /etc/shadow.

Po prostu dodając go do grupy sudo , awansował do elitarnych rang tych, którzy potrafią używać sudo . Całkowicie nieograniczony.

Nadawanie użytkownikom ograniczonych praw sudo

Tom otrzymał pełne prawa sudo . Może zrobić wszystko, co może zrobić root — lub ktokolwiek inny w grupie sudo . To może dać mu więcej mocy, niż z przyjemnością przekazujesz. Czasami istnieje wymóg, aby użytkownik wykonał funkcję, która wymaga root , ale nie ma uzasadnionego przypadku, aby miał pełny dostęp sudo . Możesz osiągnąć tę równowagę, dodając je do pliku sudoers i wymieniając polecenia, których mogą używać.

Poznajmy Harry'ego, właściciela konta użytkownika harry . Nie należy do grupy sudo i nie ma żadnych przywilejów sudo .

 grupy 

Harry może instalować oprogramowanie, ale nie chcemy, aby miał pełne prawa sudo . Ok, nie ma problemu. visudo :

 sudo visudo 

Reklama

Przewiń plik w dół, aż ominiesz definicje grup. Dodamy wers dla Harry'ego. Ponieważ jest to definicja użytkownika , a nie definicja grupy, nie musimy zaczynać wiersza znakiem procentu.

wpis w pliku sudoer dla harry

Wpis dotyczący konta użytkownika harry to:

 Harry ALL=/usr/bin/apt-get

Zauważ, że pomiędzy „harry” a „ALL=” znajduje się zakładka.

To brzmi, jak konto użytkownika harry może używać wymienionych poleceń na wszystkich hostach podłączonych do tej sieci. Na liście znajduje się jedno polecenie, a mianowicie „/usr/bin/apt-get”. Możemy przyznać Harry'emu dostęp do więcej niż jednego polecenia, dodając je do listy poleceń oddzielone przecinkami.

Dodaj wiersz do pliku sudoers i zapisz plik. Jeśli chcesz dwukrotnie sprawdzić, czy wiersz jest poprawny składniowo, możemy poprosić visudo o przeskanowanie pliku i sprawdzenie dla nas składni, używając opcji -c (tylko sprawdzanie):

 sudo visudo -c 

Odbywają się kontrole i visudo informuje, że wszystko jest w porządku. Harry powinien teraz móc używać apt-get do instalacji oprogramowania, ale należy mu odmówić, jeśli spróbuje użyć innego polecenia wymagającego sudo .

 sudo apt-get install finger 

Harry otrzymał odpowiednie prawa sudo i może zainstalować oprogramowanie.

Reklama

Co się stanie, jeśli Harry spróbuje użyć innego polecenia, które wymaga sudo ?

 wyłączanie sudo teraz 

Harry nie może wykonać polecenia. Udało nam się przyznać mu określony, ograniczony dostęp. Może użyć nominowanego dowództwa i nic więcej.

Korzystanie z aliasów użytkownika sudoers

Jeśli chcemy nadać Mary te same uprawnienia, możemy dodać wiersz w pliku sudoers dla konta użytkownika mary w dokładnie taki sam sposób, jak zrobiliśmy to z Harrym. Innym, ładniejszym sposobem osiągnięcia tego samego jest użycie User_Alias .

w pliku sudoers User_Alias zawiera listę nazw kont użytkowników. Nazwa User_Alias może być następnie użyta w definicji do reprezentowania wszystkich tych kont użytkowników. Jeśli chcesz zmienić uprawnienia dla tych kont użytkowników, masz tylko jedną linię do edycji.

Stwórzmy User_Alias i użyjmy go w naszym pliku sudoers.

 sudo visudo 

 Przewiń plik w dół, aż dojdziesz do wiersza specyfikacji User_Alias.

Dodaj User_Alias , wpisując:

 User_Alias ​​INSTALATORZY = harry, mary

Każdy element jest oddzielony spacją, a nie tabulatorem. Logika załamuje się jako:

  • User_Alias : To mówi visudo , że będzie to User_Alias .
  • INSTALATORZY : to dowolna nazwa tego aliasu.
  • = harry, mary : Lista użytkowników do dołączenia do tego aliasu.
Reklama

Teraz edytujemy wiersz, który dodaliśmy wcześniej dla konta użytkownika harry :

 Harry ALL=/usr/bin/apt-get

Zmień go tak, aby brzmiał:

 INSTALATORY WSZYSTKIE=/usr/bin/apt-get

Oznacza to, że wszystkie konta użytkowników zawarte w definicji „INSTALATORÓW” User_Alias mogą uruchamiać polecenie apt-get . Możemy to przetestować z Mary, która powinna teraz móc instalować oprogramowanie.

 sudo apt-get zainstaluj colordiff 

Mary może zainstalować oprogramowanie, ponieważ znajduje się w grupie „INSTALATORZY” User_Alias i że User_Alias przyznano te prawa.

Trzy szybkie sztuczki sudo

Gdy zapomnisz dodać sudo do polecenia, wpisz

 sudo !!

A ostatnie polecenie zostanie powtórzone z sudo dodanym na początku linii.

Po użyciu sudo i uwierzytelnieniu za pomocą hasła, przez 15 minut nie będziesz musiał używać hasła z kolejnymi poleceniami sudo . Jeśli chcesz od razu zapomnieć o uwierzytelnieniu, użyj:

 sudo-k
Reklama

Czy zastanawiałeś się kiedyś, gdzie można zobaczyć nieudane próby polecenia sudo ? Przechodzą do pliku „/var/log/auth.log”. Możesz go wyświetlić za pomocą:

 mniej /var/log/auth.log 

Widzimy wpis dotyczący konta użytkownika mary, który był zalogowany w TTY pts/1, gdy próbowała uruchomić polecenie shutdown jako użytkownik „root”.

Z wielką mocą…

… przychodzi możliwość delegowania jej części innym. Teraz wiesz, jak selektywnie wspierać innych użytkowników.