Jak kontrolować dostęp do sudo w systemie Linux

Polecenie sudo umożliwia uruchamianie poleceń 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 roota, z dokładnością. Daj użytkownikom pełny dostęp lub pozwól im używać niewielkiego zestawu poleceń. Pokażemy Ci, jak to zrobić.

sudo i uprawnienia roota

Wszyscy słyszeliśmy (nadmierne uproszczenie), że wszystko w Linuksie jest plikiem. Prawdę mówiąc, praktycznie wszystko w systemie operacyjnym, począwszy 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 były. Tam, gdzie to możliwe, projekt systemów operacyjnych Linux i Unix-podobnych jest zgodny z tą zasadą.

Koncepcja „wszystko jest plikiem” jest daleko idąca w Linuksie. Łatwo więc zobaczyć, jak uprawnienia do plików w Linuksie stały się jednym z filarów przywilejów i praw użytkowników. Jeśli jesteś właścicielem pliku lub katalogu (specjalnego rodzaju pliku), możesz z nim robić, co chcesz, w tym edytować, zmieniać jego nazwę, przenosić i usuwać. Możesz także ustawić uprawnienia do pliku, aby inni użytkownicy lub grupy użytkowników mogli odczytywać, modyfikować lub wykonywać plik. Wszyscy podlegają tym uprawnieniom.

Wszyscy, oprócz superużytkownika, nazywani są rootem. Konto roota jest kontem specjalnie uprzywilejowanym. Nie jest ograniczony uprawnieniami do żadnego z obiektów w systemie operacyjnym. Użytkownik root może zrobić wszystko i prawie w dowolnym momencie.

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

Dlatego obecnie uważa się, że najlepszą praktyką jest w ogóle nie logować się jako root. Zaloguj się na zwykłe konto użytkownika i użyj sudo do podnieś swoje przywileje na krótki czas potrzebujesz ich. Często wystarczy wydać jedno polecenie.

Lista sudoers

sudo było już zainstalowane na komputerach Ubuntu 18.04.3, Manjaro 18.1.0 i Fedora 31 używanych do badania tego artykułu. To nie jest niespodzianka. sudo istnieje od wczesnych lat 80-tych i stało się standardowym sposobem działania administratora dla prawie wszystkich dystrybucji.

Podczas instalowania nowoczesnej dystrybucji użytkownik utworzony podczas instalacji jest dodawany do listy użytkowników o nazwie sudoers. Są to użytkownicy, którzy mogą używać polecenia sudo. Ponieważ masz uprawnienia sudo, możesz ich użyć do dodania innych użytkowników do listy sudoers.

Oczywiście wydawanie pełnego statusu superużytkownika chcąc nie chcąc jest lekkomyślne lub komukolwiek, kto ma tylko częściową lub określoną potrzebę. Lista sudoers pozwala ci określić, z którymi poleceniami różni użytkownicy mogą używać sudo. W ten sposób nie dajesz im kluczy do królestwa, ale nadal mogą osiągnąć to, co muszą.

Uruchamianie polecenia jako inny użytkownik

Pierwotnie nazywano to „superużytkownikiem”, ponieważ jako superużytkownik można było wykonywać różne czynności. Jego zakres został teraz poszerzony i możesz użyć sudo do wykonania polecenia, jakbyś był dowolnym użytkownikiem. Został przemianowany, aby odzwierciedlić tę nową funkcjonalność. Obecnie nazywa się to „użytkownik zastępczy”.

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

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

sudo -u mary whoami

sudo -u whoami w oknie terminala

Odpowiedź whoami mówi nam, że konto użytkownika uruchamiającego 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 (login).

sudo -i -u mary
pwd
whoami
ls -hl
exit

sudo -i -u mary w oknie terminala

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

Wiersz polecenia zmienia się, aby odzwierciedlić, że jest to sesja dla konta użytkownika mary.
Polecenie pwd ponownie sygnalizuje, że jesteś teraz w Mary’s katalog domowy.
whoami mówi nam, że używasz konta użytkownika mary.
Pliki w katalogu należą do konta użytkownika mary.
Polecenie exit powoduje powrót do normalna sesja konta użytkownika.

Edycja pliku sudoers

Aby dodać użytkowników do listy osób, które mogą używać sudo, musisz edytować plik sudoers. Niezwykle ważne jest, abyś robił to tylko za pomocą polecenia visudo. Polecenie visudo uniemożliwia wielu osobom jednoczesną próbę edycji pliku sudoers. To też wykonuje sprawdzanie i analizowanie składni na zawartości plików podczas ich zapisywania.

Jeśli Twoje zmiany nie przejdą testów, plik nie zostanie zapisany na ślepo. Masz opcje. Możesz anulować i porzucić zmiany, wrócić i edytować zmiany ponownie lub wymusić zapisanie nieprawidłowych edycji. Ostatnia opcja to naprawdę zły pomysł. Nie ulegaj pokusie, aby to zrobić. Możesz znaleźć się w sytuacji, w której wszyscy zostaną przypadkowo zablokowani w korzystaniu z sudo.

Chociaż zaczynasz proces edycji za pomocą polecenia visudo, visudo nie jest edytorem. Wzywa jednego z istniejących edytorów do wykonania edycji plików. W Manjaro i Ubuntu uruchomiono polecenie visudo prosty edytor nano. W Fedorze, visudo uruchomiło bardziej wydajne—ale mniej intuicyjny-krzepkość.

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

sudo dnf zainstaluj nano

sudo dnf zainstaluj nano w oknie terminala

A potem visudo musiało zostać wywołane tym poleceniem:

sudo EDITOR=nano visudo

sudo EDITOR = nano visudo w oknie terminala

To wygląda na dobry kandydat na alias. Edytor nano jest otwierany z załadowanym plikiem sudoers.

nano edytor z załadowanym plikiem sudoers

Dodawanie użytkowników do grupy sudo

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

sudo visudo

sudo visudo w oknie terminala

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

Plik sudoers z podświetloną linią% sudo

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 ​​wiersz jest komentarzem. W takim przypadku usuń skrót i zapisz plik.

Linia% sudo załamuje się w ten sposób:

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

Aby nieco zmienić to sformułowanie, 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 ich do grupy sudo.

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

sudo usermod -a -G sudo tom

sudo usermod -a -G sudo tom w oknie terminala

Sprawdźmy, w których grupach jest Mary:

groups

grupy w oknie terminala

Konto użytkownika mary znajduje się tylko w grupie mary.

Sprawdźmy z Tomem:

groups

grupy w oknie terminala

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

Spróbujmy nakłonić Marię do zrobienia czegoś, co wymaga uprawnień sudo.

sudo less /etc/shadow

sudo less / etc / shadow w oknie terminala

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

sudo less /etc/shadow

sudo less / etc / shadow w oknie terminala

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

plik / etc / shadow w less w oknie terminala

Tylko przez dodanie go do grupy sudo, został podniesiony do elitarnych rang tych, którzy potrafią używać sudo. Całkowicie nieograniczony.

Nadawanie użytkownikom ograniczonych praw sudo

Tomowi nadano pełne prawa do sudo. Może zrobić wszystko, co root – lub ktokolwiek inny w grupie sudo – może zrobić. To może dać mu więcej mocy, niż z radością przekazujesz. Czasami istnieje wymóg, aby użytkownik wykonywał funkcję wymagającą uprawnień roota, ale nie ma uzasadnionego powodu, aby mieć pełny dostęp do 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 ma go w grupie sudo i nie ma przywilejów sudo.

groups

grupy w oknie terminala

Harry’emu przydaje się możliwość instalowania oprogramowania, ale nie chcemy, aby miał pełne prawa do sudo. Ok, nie ma problemu. odpalmy visudo:

sudo visudo

sudo visudo w oknie terminala

Przewiń plik w dół, aż znajdziesz definicje grup. Zamierzamy dodać wiersz dla Harry’ego. Ponieważ jest to definicja użytkownika, a nie definicja grupy, nie musimy zaczynać wiersza od znaku procentu.

Wpis pliku sudoer dla harry

Wpis dla konta użytkownika harry to:

harry    ALL=/usr/bin/apt-get

Zwróć uwagę, że między „harry” a „ALL =” znajduje się zakładka.

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

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

sudo visudo -c

sudo visudo -c w oknie terminala

Kontrole mają miejsce i visudo informuje, że wszystko jest w porządku. Harry powinien teraz móc używać apt-get zainstalować oprogramowanie ale należy mu odmówić, jeśli próbuje użyć innego polecenia wymagającego sudo.

sudo apt-get install finger

sudo apt-get install finger w oknie terminala

Harry otrzymał odpowiednie prawa sudo i jest on w stanie zainstalować oprogramowanie.

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

sudo shutdown now

zamknięcie sudo teraz w oknie terminala

Harry nie może wykonać polecenia. Z powodzeniem przyznaliśmy mu określony, ograniczony dostęp. Może użyć wyznaczonego polecenia i nic więcej.

Korzystanie z aliasów użytkowników sudoers

Jeśli chcemy dać Marii te same uprawnienia, możemy dodać wiersz w pliku sudoers dla konta użytkownika mary dokładnie w 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. Nazwy User_Alias ​​można następnie użyć 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.

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

sudo visudo

sudo visudo w oknie terminala

Scroll down in the file until you come to the User_Alias specification line.

plik sudoers z dodanym Users_Alias

Dodaj alias użytkownika, wpisując:

User_Alias INSTALLERS = harry, mary

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

User_Alias: To mówi visudo, że to będzie User_Alias.
INSTALATORZY: To jest dowolna nazwa tego aliasu.
= harry, mary: Lista użytkowników, których ma zawierać ten alias.

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ł:

INSTALLERS    ALL=/usr/bin/apt-get

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

sudo apt-get install colordiff

sudo apt-get install colordiff w oknie terminala

Mary jest w stanie zainstalować oprogramowanie, ponieważ znajduje się w aliasach User_Alias ​​„INSTALLERS” i że User_Alias ​​ma te prawa.

Trzy szybkie sztuczki sudo

Jeśli zapomnisz dodać sudo do polecenia, wpisz

sudo !!

Ostatnie polecenie zostanie powtórzone z dodanym sudo na początku wiersza.

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

sudo -k

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

less /var/log/auth.log

Plik /var/log/auth.log w oknie terminala

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

Z wielką mocą…

… Przychodzi możliwość delegowania jego części innym. Teraz wiesz, jak selektywnie wzmocnić pozycję innych użytkowników.