Jak kontrolować dostęp sudo w systemie Linux
Opublikowany: 2022-01-29 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.
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
.
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 domowymmary's
. -
whoami
mówi nam, że używasz konta użytkownikamary
. - 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.
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.
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
.
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
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
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 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.
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 toUser_Alias
. - INSTALATORZY : to dowolna nazwa tego aliasu.
- = harry, mary : Lista użytkowników do dołączenia do tego aliasu.
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
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.