Powrót do bloga

Konfigurowanie pliku Linux Sudoers

Konfigurowanie pliku Linux Sudoers

Wprowadzenie

Czy zastanawiałeś się kiedyś, dlaczego musisz wpisywać „sudo” podczas próby wykonania określonych poleceń w środowisku systemu operacyjnego Linux lub Unix? Sudo to w rzeczywistości skrót od „super-user do”. Kiedy używasz polecenia sudo, możesz uruchamiać programy i wykonywać polecenia z uprawnieniami bezpieczeństwa innego użytkownika.

Domyślnie polecenie sudo pozwala użytkownikom systemu na wykonywanie poleceń z uprawnieniami superużytkownika. Nowa instalacja systemu operacyjnego Linux/Unix tworzy konto root, które posiada uprawnienia superużytkownika. Podczas wstępnej konfiguracji serwera systemu Linux/Unix administratorzy systemu logują się na konto root i przydzielają uprawnienia systemowe innym użytkownikom systemu. Ustawienia te są przechowywane w pliku o nazwie sudoers. Konto z uprawnieniami roota może edytować plik sudoers i zmieniać uprawnienia innych użytkowników.

W tym samouczku omówimy, jak można uzyskać uprawnienia roota i wprowadzić zmiany w pliku sudoers.

Wymagania wstępne

To jest praktyczny samouczek i będziesz musiał przetestować polecenia, aby w pełni go zrozumieć. W tym samouczku będziemy korzystać z serwera Ubuntu 20.04, jednak możesz postępować zgodnie z instrukcjami, jeśli posiadasz dowolną z nowoczesnych dystrybucji Linuksa, takich jak Debian i CentOS. Możesz skorzystać z tego linku, aby skonfigurować własny serwer chmurowy Ubuntu na CloudSigma.

Uzyskiwanie uprawnień roota

Uprawnienia roota można uzyskać na trzy sposoby, które omówimy poniżej:

Logowanie jako root

Najprostszą metodą, z której korzysta większość osób w celu uzyskania uprawnień roota, jest zalogowanie się do systemu przy użyciu danych uwierzytelniających użytkownika root. Jeśli uzyskujesz dostęp do lokalnej maszyny, możesz po prostu podać nazwę użytkownika, a zostaniesz poproszony o hasło.

Inną metodą logowania jako root jest użycie SSH – narzędzia wiersza poleceń do logowania się i wykonywania zadań na serwerze. Wymaga ono nazwy użytkownika i adresu IP serwera. Składnia logowania jako root jest następująca (zastąp adres IP swojego serwera):

Po wpisaniu powyższego polecenia w terminalu zostaniesz poproszony o podanie hasła (jeśli nie skonfigurowałeś kluczy SSH) lub o podanie hasła do klucza SSH (jeśli zostały one skonfigurowane). Po podaniu poprawnych danych uwierzytelniających zostaniesz zalogowany. Skorzystaj z tego przewodnika, aby uzyskać instrukcje krok po kroku, jak używać SSH do łączenia się z odległym serwerem w Ubuntu.

Używanie su, aby stać się rootem

Możesz zalogować się do systemu Linux przy użyciu dowolnego innego konta, które nie jest kontem root, co jest zazwyczaj zalecanym sposobem podczas wykonywania zadań nieadministracyjnych. Kiedykolwiek chcesz uzyskać uprawnienia roota, możesz po prostu wpisać su w terminalu:

System poprosi Cię o hasło roota, po czym uzyskasz dostęp do sesji powłoki roota. Będąc w tej sesji powłoki, możesz wykonywać wszystkie zadania administracyjne, a gdy chcesz powrócić do normalnej powłoki, po prostu naciśnij Ctrl + D. Opcjonalnie możesz wpisać exit w terminalu i nacisnąć enter.

Używanie sudo do uruchamiania poleceń z uprawnieniami roota

Polecenie sudo, które zostało krótko przedstawione na początku tego samouczka, pozwala na wykonywanie jednolinijkowych poleceń bez potrzeby korzystania z powłoki z uprawnieniami roota. Po prostu wpisujesz sudo a następnie polecenie, które ma zostać wykonane:

Na przykład, aby zaktualizować system, możesz wpisać następujące polecenie:

Zostaniesz poproszony o hasło. Różnica między poleceniem su a sudo polega na tym, że su wymaga hasła roota, podczas gdy sudo wymaga hasła bieżącego użytkownika. Dostęp do sudo nie jest domyślnie przyznawany użytkownikom, ponieważ niesie to za sobą poważne konsekwencje dla bezpieczeństwa systemu. Omówimy to szerzej w kolejnych sekcjach.

Używanie Visudo do edycji pliku sudoers

Uprawnienia sudo są skonfigurowane w pliku sudoers znajdującym się w /etc/sudoers. Uprawnienia te są niezbędne dla każdego użytkownika, aby uzyskać dostęp do systemu Linux. Każdy błąd składniowy uniemożliwi użytkownikom zalogowanie się do systemu, co doprowadzi do jego uszkodzenia.

Visudo otwiera plik za pomocą specjalnego edytora, który sprawdza składnię pliku podczas zapisywania. Dlatego ważne jest, aby używać wyłącznie polecenia visudo do otwarcia pliku, co zapobiegnie uszkodzeniu systemu serwera. Domyślnie visudo było skonfigurowane tak, aby otwierać edytor tekstu za pomocą (vi) vim. Jednak system Ubuntu skonfigurował visudo do korzystania z edytora nano. W systemie Debian lub Ubuntu możesz zmienić edytor na inny, wprowadzając następujące polecenie:

Wyświetla listę edytorów, z której można wybrać edytor domyślny, jak pokazano na zrzucie ekranu. Wybierz numer odpowiadający preferowanemu edytorowi:

displays a list of editors

W dystrybucji CentOS Linux edytuj plik /etc/sudoers i dodaj poniższe linie:

Wprowadź następujące polecenie. Pamiętaj, aby zastąpić nazwę your_editor_of_choice:

Polecenie dodaje tę linię do pliku ~/.bashrc. Wprowadź poniższe polecenie w terminalu, aby zastosować zmiany:

Po skonfigurowaniu visudo możesz otworzyć plik /etc/sudoers wprowadzając polecenie:

Edycja pliku Sudoers

Po uruchomieniu poprzedniego polecenia plik otworzy się w skonfigurowanym edytorze głównym. Poniżej znajduje się zawartość pliku:

Komentarze są dość opisowe, ale poniżej omówimy, co oznaczają poszczególne linie.

Linie domyślne
  • Defaults env_reset – Resetuje zmienne środowiskowe terminala, aby usunąć wszelkie zmienne użytkownika. Dzięki temu usuwa potencjalnie szkodliwe zmienne z sesji sudo.
  • Defaults mail_badpass – Nakazuje systemowi wysyłanie powiadomień e-mail o nieudanych próbach podania hasła sudo do skonfigurowanego użytkownika mailto, zazwyczaj na konto root.
  • Defaults secure_path – Zawiera kilka ścieżek w systemie plików, w których operacja sudo będzie szukać aplikacji do użycia podczas wykonywania, aby zapobiec użyciu innych ścieżek zdefiniowanych przez użytkownika, które mogą być niebezpieczne dla systemu.
Linie specyfikacji uprawnień użytkowników
Ta linia różni się od pozostałych i określa uprawnienia użytkownika root. Oto co oznacza każdy znacznik w tej linii:

  1. root ALL=(ALL:ALL) ALL – Pierwsze pole określa nazwę użytkownika, do którego będzie miała zastosowanie reguła. W tym przypadku jest to użytkownik root.
  2. root ALL=(ALL:ALL) ALL – Pierwsze ALL określa, że reguła będzie miała zastosowanie do wszystkich hostów.
  3. root ALL=(ALL:ALL) ALL – Drugie ALL określa, że użytkownik, do którego stosuje się ta reguła (tj. root) może uruchamiać polecenia jako wszyscy użytkownicy.
  4. root ALL=(ALL:ALL) ALL – Trzecie ALL określa, że użytkownik, do którego stosuje się ta reguła (tj. root) może uruchamiać polecenia jako wszystkie grupy.
  5. root ALL=(ALL:ALL) ALL – Ostatnie ALL określa, że te reguły mają zastosowanie do wszystkich poleceń.

Z tego, co wskazuje ta reguła, użytkownik root może uruchomić dowolne polecenie za pomocą sudo po podaniu prawidłowego hasła.

Linie specyfikacji uprawnień grup

Linie te określają reguły uprawnień sudo, które mają zastosowanie do grup. Pola wskazują te same akcje, co linie uprawnień użytkowników, z małą różnicą. Zaczynają się od znaku %, aby wskazać nazwy grup.

Jak widać, grupa admin może wykonywać dowolne polecenie jako dowolny użytkownik na dowolnym hoście. Grupa sudo ma takie same uprawnienia z dodatkowym uprawnieniem do wykonywania poleceń jako dowolna grupa.

Linia dołączania /etc/sudoers.d

Linia #includedir /etc/sudoers.d może wyglądać jak komentarz ze względu na znak # na początku linii. Jest to jednak dyrektywa dołączania wskazująca, że pliki w katalogu /etc/sudoers.d powinny być wczytywane i używane jako część pliku sudoers. Pliki w tym katalogu podlegają tym samym regułom, co plik sudoers.

Każdy plik w tym katalogu, który nie zawiera kropki (.) i nie kończy się na ~ jest odczytywany i dołączany do konfiguracji pliku sudoers. Katalog ten pozwala aplikacjom na zmianę uprawnień sudo podczas instalacji poprzez umieszczenie wszystkich powiązanych z nimi reguł w jednym dedykowanym pliku w katalogu /etc/sudoers.d bez modyfikowania domyślnego pliku sudoers. Co więcej, gdy chcesz sprawdzić lub cofnąć uprawnienia dla aplikacji, możesz łatwo sprawdzić lub zmodyfikować pliki w katalogu /etc/sudoers.d bez bezpośredniej modyfikacji pliku /etc/sudoers bezpośrednio.

Zasadniczo wszystkie pliki w katalogu /etc/sudoers.d powinny być zawsze edytowane za pomocą polecenia visudo. Poniżej znajduje się składnia, pamiętaj, aby zastąpić nazwę pliku, który chcesz edytować w poleceniu:

Przypisywanie uprawnień Sudo użytkownikowi

Gdy przyznajesz nowemu użytkownikowi ogólny dostęp do sudo, oznacza to, że dałeś temu kontu użytkownika pełny dostęp administracyjny do systemu. Jest to typowe zadanie wykonywane przez administratorów systemu podczas tworzenia innych użytkowników niebędących rootem z uprawnieniami sudo.

W systemach takich jak Ubuntu 20.04, które posiadają już grupę administracyjną ogólnego przeznaczenia, możemy łatwo przypisać uprawnienia sudo użytkownikowi, dodając go do tej grupy. Grupa sudo, jak widać w pliku /etc/sudoers, ma pełne uprawnienia administracyjne, a nazwę użytkownika możemy dodać do grupy, wprowadzając następujące polecenie:

Opcjonalnie możesz użyć polecenia gpasswd, aby osiągnąć to samo:

W systemie CentOS, domyślna grupa z uprawnieniami sudo nosi nazwę wheel, więc możesz przypisać uprawnienia za pomocą polecenia:

Opcjonalnie, używając polecenia gpasswd, możesz osiągnąć to samo za pomocą polecenia:

W niektórych przypadkach grupa wheel grupa w systemie CentOS może być zakomentowana w pliku /etc/sudoers. Aby ją włączyć, otwórz plik za pomocą visudo i odkomentuj linię z nazwą grupy. Możesz to zrobić, usuwając znak # na początku linii: %wheel ALL=(ALL) ALL.

Tworzenie niestandardowych reguł

Mając wiedzę na temat ogólnej składni pliku sudoers, którą zdobyłeś do tej pory, nadszedł czas na skonfigurowanie kilku reguł.

Tworzenie aliasów

Aliasy pozwalają uporządkować plik sudoers poprzez grupowanie elementów pod różnymi „aliasami”. W tej sekcji omówimy trzy dyrektywy: User_Alias do tworzenia aliasów użytkowników/grup, Cmnd_Alias do tworzenia aliasów poleceń oraz Runas_Alias do zezwalania użytkownikowi na uruchamianie poleceń jako inny użytkownik.

Na przykład, używając User_Alias, wewnątrz pliku /etc/sudoers, możesz dodać następujący fragment, aby utworzyć trzy różne grupy użytkowników. Niektórzy użytkownicy mogą należeć do więcej niż jednej grupy:

Zauważ, że wszystkie nazwy grup zaczynają się od wielkiej litery. Po dodaniu powyższych aliasów grup w pliku /etc/sudoers, możesz przypisać uprawnienie do aktualizacji bazy danych apt dla GROUPTWO poprzez dodanie następującej reguły w pliku /etc/sudoers:

Zauważ, że bez określenia użytkownika/grupy, jako który ma zostać uruchomione polecenie, sudo zawsze domyślnie użyje użytkownika root.

Oto przykład użycia Cmnd_Alias, w którym tworzymy alias polecenia do wyłączania i ponownego uruchamiania systemu. Reguła jest następnie przypisywana do GROUPTHREE. Dodanie poniższych linii w pliku /etc/sudoers pozwala to osiągnąć:

W powyższym fragmencie pierwsza linia tworzy alias polecenia o nazwie POWER, który zawiera polecenia wyłączenia i ponownego uruchomienia. Druga linia pozwala członkom GROUPTHREE na uruchomienie tego polecenia.

Oto przykład Runas_Alias, w którym tworzymy alias pozwalający grupie użytkowników na uruchamianie poleceń jako inny użytkownik:

W powyższym fragmencie pierwsza linia tworzy alias o nazwie WEB, określając, że alias będzie uruchamiany jako użytkownik apache lub www-data. Druga linia przypisuje ten alias do GROUPONE. Teraz członkowie grupy pierwszej mogą wykonywać polecenia jako użytkownik apache lub www-data.

Reguły ograniczające

W tej sekcji dowiesz się o różnych sposobach kontrolowania reakcji sudo na wywołanie. Niektóre polecenia są stosunkowo nieszkodliwe w systemach jednoużytkownikowych. W takich przypadkach możesz pozwolić użytkownikom na ich wykonywanie z uprawnieniami root bez konieczności wpisywania hasła użytkownika root. Na przykład możesz utworzyć regułę zezwalającą użytkownikom z grupy GROUPONE na uruchamianie polecenia updatedb bez podawania hasła, dodając następujący wpis do pliku /etc/sudoers:

Znacznik NOPASSWD oznacza, że hasło nie będzie wymagane. Znacznikiem komplementarnym dla NOPASSWD jest PASSWD, co stanowi zachowanie domyślne. Oznacza to, że przy próbie uruchomienia należy podać hasło.

Znacznik ma zastosowanie do reguły, chyba że zostanie nadpisany przez swój znacznik komplementarny, na przykład:

W tej regule użytkownicy z grupy GROUPTWO mogą wykonywać polecenie updatedb polecenie bez podawania hasła. Muszą jednak podać hasło przed wykonaniem polecenia kill.

W niektórych przypadkach możesz chcieć ograniczyć użytkownikom możliwość wykonywania określonych poleceń, aby zapobiec niebezpiecznym operacjom. W tym miejscu do gry wkracza tag NOEXEC. Niektóre programy mogą uruchamiać inne polecenia z poziomu swojego interfejsu. Przykładem takiego programu jest less. Jeśli wpiszesz polecenie o następującej składni w interfejsie less, zostanie ono uruchomione, co może spowodować nieoczekiwane zachowanie.

Aby zapobiec takiemu zachowaniu, możesz dodać następującą regułę do pliku /etc/sudoers, aby ograniczyć uprawnienia danego użytkownika zidentyfikowanego jako username:

Dodatkowe informacje

W tej sekcji zamieszczamy dodatkowe informacje, dyrektywy i polecenia, które mogą okazać się niezbędne podczas pracy z sudo.

Jeśli w konfiguracji użyto Runas_Alias, określając, że użytkownik lub grupa może działać jako inny użytkownik, możesz wykonywać polecenia jako ci użytkownicy, używając flagi -u dla użytkownika i flagi -g dla grup. Oto składnia:

Każde z tych poleceń poprosi o wprowadzenie powiązanego hasła. Dla wygody sudo zapisuje hasło na pewien czas, dzięki czemu nie trzeba go wpisywać za każdym razem, gdy uruchamia się polecenie z sudo. Możesz wyczyścić ten czas po zakończeniu pracy z poleceniami uprzywilejowanymi sudo, wprowadzając następujące polecenie:

W przypadku, gdy masz więcej zadań do wykonania z uprawnieniami sudo i chcesz wydłużyć czas przed ponownym żądaniem hasła lub chcesz uniknąć monitowania o hasło przez polecenie sudo później, możesz odnowić ten czas, wpisując następujące polecenie:

Polecenie poprosi o hasło i zapisze je w pamięci podręcznej do późniejszego użycia z sudo.

Aby wyświetlić listę uprawnień sudo zdefiniowanych dla Twojej nazwy użytkownika, możesz wprowadzić następujące polecenie:

Polecenie wyświetla listę wszystkich reguł skonfigurowanych w pliku /etc/sudoers, które mają zastosowanie do Twojej nazwy użytkownika. Na podstawie tych reguł możesz dowiedzieć się, jakie zadania Twój użytkownik może wykonywać w systemie. Oto przykładowy zrzut ekranu:

screenshot

W niektórych przypadkach możesz wykonać polecenie, które zakończy się niepowodzeniem, ponieważ zapomniałeś poprzedzić je słowem sudo. W takich sytuacjach konieczne może być ponowne wpisanie polecenia zaczynającego się od sudo. Aby uniknąć ponownego wpisywania polecenia, możesz skorzystać z funkcji basha służącej do „powtarzania ostatniego polecenia”. Składnia to podwójny wykrzyknik. Możesz wykonać ostatnio uruchomione polecenie w terminalu, wpisując następujące znaki:

Na koniec warto wiedzieć, że sudo po prostu podnosi uprawnienia wykonywanego polecenia do poziomu sudo. Aby uzyskać dodatkowe informacje, możesz postępować zgodnie z instrukcjami podanymi pod tym linkiem, aby trochę pożartować ze swoich użytkowników.

Podsumowanie

Podczas pracy z wieloma użytkownikami kluczowe znaczenie ma umiejętność poruszania się po poleceniu sudo i pliku sudoers. W tym samouczku przedstawiliśmy podstawy odczytywania i modyfikowania pliku sudoers, a także różne metody, których można użyć do uzyskania uprawnień roota.

Zawsze pamiętaj, że to separacja uprawnień zapewnia bezpieczeństwo systemów Linux. Dlatego uprawnienia superużytkownika nie powinny być nadawane zwykłym użytkownikom. Przypisuj tylko te uprawnienia, które są absolutnie niezbędne do wykonania określonych zadań w systemie, a nie wszystkie uprawnienia.

Miłego korzystania z komputera!

author

Manpreet Singh

Autor · CloudSigma

Preslav Dobrev jest projektantem kreatywnym w CloudSigma, skupiającym się na spójnej tożsamości biznesowej przy wykorzystaniu tradycyjnych i innowacyjnych kanałów marketingowych. Biegle łączy wizję artystyczną ze strategicznym marketingiem, tworząc wywierające wpływ narracje marki.

Komentarze

Brak komentarzy. Bądź pierwszy.