Skip to content
Skip to content
Menu
Info Cafe
Info Cafe

Jak edytować plik Sudoers

By admin on 13 stycznia, 2021

Wprowadzenie

Rozdzielenie przywilejów jest jednym z podstawowych paradygmatów bezpieczeństwa zaimplementowanych w Linuksie i systemach operacyjnych uniksopodobnych. Zwykli użytkownicy działają z ograniczonymi uprawnieniami w celu ograniczenia zakresu ich wpływu do własnego środowiska, a nie szerszego systemu operacyjnego.

Specjalny użytkownik, zwany rootem, ma uprawnienia superużytkownika. Jest to konto administracyjne bez ograniczeń, które są obecne dla zwykłych użytkowników. Użytkownicy mogą wykonywać polecenia z uprawnieniami superużytkownika lub roota na wiele różnych sposobów.

W tym artykule omówimy, jak poprawnie i bezpiecznie uzyskać uprawnienia roota, ze szczególnym uwzględnieniem edycji pliku /etc/sudoers.

Postaramy się wykonać te kroki na serwerze Ubuntu 20.04, ale większość współczesnych dystrybucji Linuksa, takich jak Debian czy CentOS, powinna działać w podobny sposób.

W tym poradniku założymy, że masz już za sobą wstępną konfigurację serwera omówioną tutaj. Zaloguj się na swój serwer jako zwykły użytkownik niebędący rootem i kontynuuj poniżej.

Uwaga: Ten poradnik dogłębnie omawia eskalację przywilejów i plik sudoers. Jeśli chcesz po prostu dodać sudo uprawnienia do użytkownika, sprawdź nasze szybkie tutoriale How To Create a New Sudo-enabled User dla Ubuntu i CentOS.

How To Obtain Root Privileges

Istnieją trzy podstawowe sposoby uzyskania uprawnień roota, które różnią się poziomem zaawansowania.

Log In As Root

Najprostszą i najbardziej bezpośrednią metodą uzyskania uprawnień roota jest bezpośrednie zalogowanie się na serwer jako użytkownik root.

Jeśli logujesz się na lokalną maszynę (lub używasz funkcji konsoli out-of-band na serwerze wirtualnym), wpisz root jako nazwę użytkownika na ekranie logowania i wpisz hasło roota, gdy zostaniesz o to poproszony.

Jeśli logujesz się przez SSH, podaj użytkownika root przed adresem IP lub nazwą domeny w łańcuchu połączenia SSH:

  • ssh root@server_domain_or_ip

Jeśli nie skonfigurowałeś kluczy SSH dla użytkownika root, wprowadź hasło root, gdy zostaniesz o to poproszony.

Użyj su, aby zostać rootem

Logowanie się bezpośrednio jako root jest zwykle niezalecane, ponieważ łatwo jest zacząć używać systemu do zadań nieadministracyjnych, co jest niebezpieczne.

Kolejny sposób na zdobycie przywilejów superużytkownika pozwala stać się użytkownikiem root w dowolnym momencie, gdy tego potrzebujemy.

Możemy to zrobić wywołując polecenie su, które jest skrótem od „substitute user”. Aby uzyskać uprawnienia roota, wpisz:

  • su

Zostaniesz poproszony o podanie hasła użytkownika root, po czym zostaniesz przeniesiony do sesji powłoki roota.

Po zakończeniu zadań wymagających uprawnień roota, wróć do normalnej powłoki wpisując:

  • exit

Use sudo to Execute Commands as Root

Ostatnim sposobem uzyskania uprawnień roota, który omówimy jest polecenie sudo.

Komenda sudo pozwala na wykonywanie jednorazowych poleceń z uprawnieniami roota, bez potrzeby tworzenia nowej powłoki. Wykonuje się je w następujący sposób:

  • sudo command_to_execute

W przeciwieństwie do su, polecenie sudo zażąda hasła bieżącego użytkownika, a nie hasła roota.

Z powodu implikacji związanych z bezpieczeństwem, dostęp sudo nie jest domyślnie przyznawany użytkownikom i musi być skonfigurowany, zanim będzie działał poprawnie. Zapoznaj się z naszym poradnikiem Jak stworzyć nowego użytkownika z obsługą Sudo dla Ubuntu i CentOS, aby dowiedzieć się, jak skonfigurować użytkownika z obsługą sudo.

W następnej sekcji omówimy, jak zmodyfikować konfigurację sudo w sposób bardziej szczegółowy.

Co to jest Visudo?

Komenda sudo jest konfigurowana poprzez plik znajdujący się pod adresem /etc/sudoers.

Ostrzeżenie: Nigdy nie edytuj tego pliku za pomocą zwykłego edytora tekstu! Zamiast tego zawsze używaj polecenia visudo!

Ponieważ niewłaściwa składnia pliku /etc/sudoers może spowodować uszkodzenie systemu, w którym niemożliwe jest uzyskanie podwyższonych uprawnień, ważne jest, aby do edycji tego pliku używać polecenia visudo.

Komenda visudo otwiera edytor tekstowy jak zwykle, ale sprawdza poprawność składni pliku przy zapisie. Zapobiega to blokowaniu przez błędy konfiguracji operacji sudo, które mogą być jedynym sposobem na uzyskanie uprawnień roota.

Tradycyjnie, visudo otwiera plik /etc/sudoers za pomocą edytora tekstowego vi. Ubuntu jednak skonfigurowało visudo, aby zamiast tego używać edytora tekstowego nano.

Jeśli chcesz zmienić go z powrotem na vi, wydaj następujące polecenie:

  • sudo update-alternatives --config editor
Output
There are 4 choices for the alternative editor (providing /usr/bin/editor). Selection Path Priority Status------------------------------------------------------------* 0 /bin/nano 40 auto mode 1 /bin/ed -100 manual mode 2 /bin/nano 40 manual mode 3 /usr/bin/vim.basic 30 manual mode 4 /usr/bin/vim.tiny 10 manual modePress <enter> to keep the current choice, or type selection number:

Wybierz numer, który odpowiada wyborowi, którego chcesz dokonać.

W systemie CentOS możesz zmienić tę wartość, dodając następującą linię do swojego pliku ~/.bashrc:

  • export EDITOR=`which name_of_editor`

Źródło pliku, aby wprowadzić zmiany:

  • . ~/.bashrc

Po skonfigurowaniu visudo, wykonaj polecenie dostępu do pliku /etc/sudoers:

  • sudo visudo

How To Modify the Sudoers File

W wybranym edytorze tekstu zostanie wyświetlony plik /etc/sudoers.

Skopiowałem i wkleiłem plik z Ubuntu 18.04, z usuniętymi komentarzami. Plik CentOS /etc/sudoers ma o wiele więcej linii, z których niektórych nie będziemy omawiać w tym przewodniku.

/etc/sudoers
Defaults env_resetDefaults mail_badpassDefaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"root ALL=(ALL:ALL) ALL%admin ALL=(ALL) ALL%sudo ALL=(ALL:ALL) ALL#includedir /etc/sudoers.d

Przyjrzyjrzyjmy się, co robią te linie.

Linie domyślne

Pierwsza linia, „Defaults env_reset”, resetuje środowisko terminala aby usunąć wszelkie zmienne użytkownika. Jest to środek bezpieczeństwa używany do usuwania potencjalnie szkodliwych zmiennych środowiskowych z sesji sudo.

Druga linia, Defaults mail_badpass, mówi systemowi, aby wysyłał powiadomienia o złych sudo próbach podania hasła do skonfigurowanego użytkownika mailto. Domyślnie jest to konto root.

Trzecia linia, która zaczyna się od „Defaults secure_path=…”, określa PATH (miejsca w systemie plików, w których system operacyjny będzie szukał aplikacji), które będą używane do sudo operacji. Zapobiega to używaniu ścieżek użytkownika, które mogą być szkodliwe.

Linie przywilejów użytkownika

Czwarta linia, która dyktuje przywileje użytkownika root sudo, różni się od poprzednich linii. Przyjrzyjmy się, co oznaczają poszczególne pola:

  • root ALL=(ALL:ALL) ALL
    Pierwsze pole wskazuje nazwę użytkownika, którego dotyczy reguła (root).

  • root ALL=(ALL:ALL) ALL
    Pierwsze „ALL” wskazuje, że reguła dotyczy wszystkich hostów.

  • root ALL=(ALL:ALL) ALL
    To „ALL” oznacza, że użytkownik root może wykonywać polecenia jako wszyscy użytkownicy.

  • root ALL=(ALL:ALL) ALL
    To „ALL” oznacza, że użytkownik root może wykonywać polecenia jako wszystkie grupy.

  • root ALL=(ALL:ALL) ALL
    Ostatnie „ALL” wskazuje, że te zasady odnoszą się do wszystkich poleceń.

To oznacza, że nasz użytkownik root może uruchomić dowolne polecenie używając sudo, tak długo jak poda swoje hasło.

Linie przywilejów grup

Następne dwie linie są podobne do linii przywilejów użytkowników, ale określają sudo reguły dla grup.

Nazwy zaczynające się od a % wskazują nazwy grup.

Widzimy tutaj, że grupa admin może wykonywać dowolne polecenia jako dowolny użytkownik na dowolnym hoście. Podobnie, grupa sudo ma te same przywileje, ale może wykonywać polecenia jako dowolna grupa.

Włączony /etc/sudoers.d Line

Ostatnia linia może wyglądać jak komentarz na pierwszy rzut oka:

/etc/sudoers
. . .#includedir /etc/sudoers.d

Zaczyna się od #, co zwykle oznacza komentarz. Jednak ta linia w rzeczywistości wskazuje, że pliki znajdujące się w katalogu /etc/sudoers.d również będą pozyskiwane i stosowane.

Pliki znajdujące się w tym katalogu podlegają tym samym zasadom co sam plik /etc/sudoers. Każdy plik, który nie kończy się na ~ i który nie ma . w nim, zostanie odczytany i dołączony do konfiguracji sudo.

To jest głównie przeznaczone dla aplikacji do zmiany sudo uprawnień po instalacji. Umieszczenie wszystkich powiązanych reguł w jednym pliku w katalogu /etc/sudoers.d może ułatwić sprawdzenie, które uprawnienia są powiązane z jakimi kontami i łatwe odwrócenie poświadczeń bez konieczności manipulowania bezpośrednio plikiem /etc/sudoers.

Tak jak w przypadku samego pliku /etc/sudoers, powinieneś zawsze edytować pliki w katalogu /etc/sudoers.d za pomocą visudo. Składnia do edycji tych plików byłaby następująca:

  • sudo visudo -f /etc/sudoers.d/file_to_edit

How To Give a User Sudo Privileges

Najczęstszą operacją, którą użytkownicy chcą wykonać podczas zarządzania uprawnieniami sudo jest przyznanie nowemu użytkownikowi ogólnego sudo dostępu. Jest to przydatne, jeśli chcemy nadać kontu pełny dostęp administracyjny do systemu.

Najprostszym sposobem na zrobienie tego w systemie z grupą administracyjną ogólnego przeznaczenia, jak system Ubuntu w tym przewodniku, jest dodanie danego użytkownika do tej grupy.

Na przykład, w Ubuntu 20.04, grupa sudo ma pełne uprawnienia administratora. Możemy nadać użytkownikowi te same uprawnienia, dodając go do grupy w ten sposób:

  • sudo usermod -aG sudo username

Komenda gpasswd może być również użyta:

  • sudo gpasswd -a username sudo

Obydwie te komendy osiągną to samo.

Na CentOS, jest to zazwyczaj grupa wheel zamiast grupy sudo:

  • sudo usermod -aG wheel username

Albo, używając gpasswd:

  • sudo gpasswd -a username wheel

Na CentOS, jeśli dodanie użytkownika do grupy nie działa od razu, być może będziesz musiał edytować plik /etc/sudoers, aby odkomentować nazwę grupy:

  • sudo visudo
/etc/sudoers
. . .%wheel ALL=(ALL) ALL. . .

How To Set Up Custom Rules

Teraz, gdy zapoznaliśmy się z ogólną składnią pliku, stwórzmy kilka nowych reguł.

Jak tworzyć aliasy

Plik sudoers może być łatwiej zorganizowany poprzez grupowanie rzeczy za pomocą różnego rodzaju „aliasów”.

Na przykład, możemy stworzyć trzy różne grupy użytkowników, z nakładającymi się członkami:

/etc/sudoers
. . .User_Alias GROUPONE = abby, brent, carlUser_Alias GROUPTWO = brent, doris, eric, User_Alias GROUPTHREE = doris, felicia, grant. . .

Nazwy grup muszą zaczynać się od dużej litery. Możemy następnie zezwolić członkom GROUPTWO na aktualizację bazy danych apt tworząc regułę jak poniżej:

/etc/sudoers
. . .GROUPTWO ALL = /usr/bin/apt-get update. . .

Jeśli nie określimy użytkownika/grupy, jako którą mamy uruchamiać, tak jak powyżej, sudo domyślnie będzie to użytkownik root.

Możemy zezwolić członkom GROUPTHREE na wyłączanie i restartowanie maszyny tworząc „alias komend” i używając go w regule dla GROUPTHREE:

/etc/sudoers
. . .Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restartGROUPTHREE ALL = POWER. . .

Tworzymy alias poleceń o nazwie POWER, który zawiera polecenia wyłączenia i ponownego uruchomienia maszyny. Następnie zezwalamy członkom GROUPTHREE na wykonanie tych poleceń.

Możemy również tworzyć aliasy „Uruchom jako”, które mogą zastąpić część reguły, która określa użytkownika, jako którego należy wykonać polecenie:

/etc/sudoers
. . .Runas_Alias WEB = www-data, apacheGROUPONE ALL = (WEB) ALL. . .

To pozwoli każdemu, kto jest członkiem GROUPONE wykonywać polecenia jako użytkownik www-data lub użytkownik apache.

Pamiętaj, że późniejsze reguły zastąpią wcześniejsze reguły, gdy wystąpi konflikt między nimi.

How To Lock Down Rules

Istnieje kilka sposobów, dzięki którym możesz osiągnąć większą kontrolę nad tym, jak sudo reaguje na połączenie.

Komenda updatedb związana z pakietem mlocate jest stosunkowo nieszkodliwa w systemie jednego użytkownika. Jeśli chcemy zezwolić użytkownikom na wykonywanie go z uprawnieniami roota bez konieczności wpisywania hasła, możemy wprowadzić następującą regułę:

/etc/sudoers
. . .GROUPONE ALL = NOPASSWD: /usr/bin/updatedb. . .

NOPASSWDNOPASSWD to „tag”, który oznacza, że nie będzie wymagane hasło. Ma towarzyszące mu polecenie o nazwie PASSWD, które jest domyślnym zachowaniem. Znacznik jest istotny dla reszty reguły, chyba że zostanie unieważniony przez jego „bliźniaczy” znacznik w dalszej części linii.

Na przykład, możemy mieć linię taką jak ta:

/etc/sudoers
. . .GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill. . .

Innym pomocnym znacznikiem jest NOEXEC, który może być użyty do zapobiegania niebezpiecznym zachowaniom w niektórych programach.

Na przykład, niektóre programy, takie jak less, mogą wywoływać inne polecenia wpisując to z poziomu swojego interfejsu:

!command_to_run

To w zasadzie wykonuje każde polecenie wydane przez użytkownika z tymi samymi uprawnieniami, pod którymi działa less, co może być dość niebezpieczne.

Aby to ograniczyć, moglibyśmy użyć linii takiej jak ta:

/etc/sudoers
. . .username ALL = NOEXEC: /usr/bin/less. . .

Informacje różne

Jest jeszcze kilka informacji, które mogą być przydatne, gdy mamy do czynienia z sudo.

Jeśli podałeś użytkownika lub grupę do „uruchamiania jako” w pliku konfiguracyjnym, możesz wykonywać polecenia jako ci użytkownicy, używając odpowiednio flag -u i -g:

  • sudo -u run_as_user command
  • sudo -g run_as_group command

Dla wygody, domyślnie, sudo zapisze Twoje dane uwierzytelniające przez określony czas w jednym terminalu. Oznacza to, że nie będziesz musiał ponownie wpisywać swojego hasła, dopóki ten czas się nie skończy.

Dla celów bezpieczeństwa, jeśli chcesz wyczyścić ten licznik czasu, gdy skończysz wykonywać polecenia administracyjne, możesz uruchomić:

  • sudo -k

Jeśli z drugiej strony chcesz „wyzerować” komendę sudo, aby nie być później pytanym, lub odnowić swoją sudo dzierżawę, zawsze możesz wpisać:

  • sudo -v

Zostaniesz poproszony o podanie hasła, które zostanie zbuforowane do późniejszego sudo użycia, aż do wygaśnięcia przedziału czasowego sudo.

Jeśli po prostu zastanawiasz się jakie uprawnienia są zdefiniowane dla twojej nazwy użytkownika, możesz wpisać:

  • sudo -l

Wyświetli to wszystkie reguły w pliku /etc/sudoers które dotyczą twojego użytkownika. To daje ci dobry pomysł na to, co będziesz lub nie będziesz mógł zrobić z sudo jako dowolny użytkownik.

Jest wiele razy, kiedy wykonasz polecenie i nie powiedzie się ono, ponieważ zapomniałeś poprzedzić je sudo. Aby uniknąć konieczności ponownego wpisywania polecenia, możesz skorzystać z funkcji basha, która oznacza „powtórz ostatnie polecenie”:

  • sudo !!

Podwójny wykrzyknik powtórzy ostatnie polecenie. Poprzedziliśmy go sudo aby szybko zmienić komendę nieuprzywilejowaną na uprzywilejowaną.

Dla zabawy, możesz dodać następującą linię do swojego pliku /etc/sudoers za pomocą visudo:

  • sudo visudo
/etc/sudoers
. . .Defaults insults. . .

Spowoduje to, że sudo zwróci głupią obelgę, gdy użytkownik wpisze nieprawidłowe hasło do sudo. Możemy użyć sudo -k do wyczyszczenia poprzedniego sudo buforowanego hasła, aby go wypróbować:

  • sudo -k
  • sudo ls
Output
password for demo: # enter an incorrect password here to see the resultsYour mind just hasn't been the same since the electro-shock, has it? password for demo: My mind is going. I can feel it.

Podsumowanie

Powinieneś teraz mieć podstawowe zrozumienie, jak czytać i modyfikować plik sudoers, oraz pojęcie o różnych metodach, których możesz użyć, aby uzyskać uprawnienia roota.

Pamiętaj, że przywileje superużytkownika nie są nadawane zwykłym użytkownikom z jakiegoś powodu. Istotne jest, abyś rozumiał, co robi każde polecenie, które wykonujesz z uprawnieniami roota. Nie traktuj tej odpowiedzialności lekceważąco. Dowiedz się, w jaki sposób najlepiej używać tych narzędzi w danym przypadku i zablokuj wszystkie funkcje, które nie są potrzebne.

Zobacz wpisy

5 Carob Health Benefits + Nutrition & How it Beats Chocolate (Polski)
Fast Character | D&D Character Sheets Instantly For DnD 5e (Polski)

Dodaj komentarz Anuluj pisanie odpowiedzi

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Najnowsze wpisy

  • Firebush (Polski)
  • Prognoza stawek CD na 2021 rok: Stopy procentowe prawdopodobnie pozostaną na niskim poziomie, ale mogą wzrosnąć w dalszej części roku
  • Jak ustrukturyzować dokumentację systemu zarządzania jakością
  • Zdrowe Gry i Zajęcia dla Dzieci | UIC Online Informatics
  • Wheat Ales (American) (Polski)
  • Korzyści z karmienia piersią po roku
  • Czy bezpiecznie jest wrzucać fusy z kawy do zlewu | Atomic Plumbing
  • Cool-Down After Your Workout (Polski)
  • Nasza praca
  • Najlepsza ręczna maszyna do szycia do kupienia: 2020

Meta

  • Zaloguj się
  • Kanał wpisów
  • Kanał komentarzy
  • WordPress.org

Archiwa

  • Marzec 2021
  • Luty 2021
  • Styczeń 2021
  • Grudzień 2020
  • DeutschDeutsch
  • NederlandsNederlands
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • PolskiPolski
  • 日本語日本語
©2021 Info Cafe | WordPress Theme by SuperbThemes.com