Przewodnik po sudo

Kategoria: Artykuły, etykiety: system, bezpieczeństwo

Dodany: 2009-08-04 21:51 (zmodyfikowany: 2009-08-16 12:28)
Przez: thalcave

Wyświetleń: 132658

Sudo (akronim od Super User Do) umożliwia wywoływanie programów z uprawnieniami innych użytkowników, w szczególności roota, bez znajomości haseł do tychże kont.

Instalacja

Domyślnie sudo nie jest instalowane wraz z Debianem, musimy zatem je zainstalować jednym z dwóch narzędzi:

aptitude install sudo
apt-get install sudo

Możemy także zainstalować poprzez Synaptica, jeśli bardzo boimy się konsoli.

Użytkowanie sudo

Pierwszą naszą czynnością, gdy chcemy użyć polecenia sudo do nadania sobie większych praw, jest sprawdzenie czy mamy taką możliwość i jakie komendy możemy uruchamiać z większymi uprawnieniami:

sudo -l

Użycie komendy poprzez sudo wygląda następująco:

sudo -u user polecenie

Jednak najczęściej używa się go w formie skróconej, z nadanymi uprawnieniami administratora:

sudo polecenie

Konfiguracja

Cała konfiguracja narzędzia znajduje się w pliku /etc/sudoers, którego uprawnienia nie pozwalają na odczyt przez nikogo spoza grupy root. Istnieje specjalne polecenie otwierające konfiguracje sudo:

visudo

Plik edytowany jest programem, na jaki wskazuje zmienna EDITOR. Jednak ze względów bezpieczeństwa lista możliwych edytorów jest ograniczona.

Standardowo komentarze oznaczane są przez #. Domyślna konfiguracja zawiera 2 linijki:

Defaults    env_reset
root ALL=(ALL) ALL

Pierwsza odpowiada za przystosowanie środowiska w sudo do konta, z którego uprawnień dany użytkownik chce skorzystać - m.in. zmienna PATH jest ustawiana. Druga linijka odpowiada za umożliwienie użytkownikowi root wykorzystywać sudo z każdym poleceniem z uprawnieniami każdego użytkownika (budowę tego wiersza za chwilę omówię).

Definicja nadania uprawnień ma postać:

KTO  GDZIE=(JAKO_KTO) POLECENIE
  • KTO - pole wskazuje na listę użytkowników i grup (grupy rozpoczyna się od znaku %), których definicja dotyczy,
  • GDZIE - pole jest istotne tylko gdy konfiguracja sudo współdzielona jest pomiędzy wieloma komputerami, wskazuje na komputery, których definicja dotyczy, w środowiskach jedno komputerowych można użyć słów ALL lub localhost,
  • JAKO_KTO - lista użytkowników, których uprawnienia można wykorzystać. W konfiguracji pole to można zaniechać,
  • POLECENIE - polecenia lub lista poleceń, których definicja ta dotyczy Lista to wymienione nazwy po przecinkach.

Działania poleceń można ograniczać poprzez specjalne wyrażenia (tzw. wildcards):

  • "" - polecenie może być wywoływane tylko bez argumentów,
  • * - oznacza dowolny ciąg znaków,
  • ? - oznacza dowolny znak,
  • [...] - dowolny znak zawarty w nawiasach,
  • [!...] - dowolny znak poza tymi, które zostały zawarte w nawiasach

UWAGA!!! Jeżeli chcemy odwołać się do znaków specjalnych wystarczy je poprzedzić znakiem \, tzn., jeżeli definicja ma oznaczać znak a lub b lub c lub ! wystarczy zapisać ją w formie [\!abc] Brak wildcarda równoznaczy jest z użyciem *. Polecenia muszą być wpisywane z pełną ścieżką dostępu.

Lista poleceń przyjmuje jeszcze dwa słowa poprzedzające:

  • PASSWD: - domyślnie aktywne, polecenia po nim wymienione będą wymagały podania hasła użytkownika,
  • NOPASSWD: - polecenia zawarte po nim będą uruchamiane bez weryfikacji hasłem, W jednej linii mogą wystąpić oba słowa.

Przykład:

%mlodsi ALL=(ALL) /usr/bin/passwd [a-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root, NOPASSWD: /sbin/ifconfig

Wpis ten zezwala na użytkownikom należącym do grupy mlodsi na zmianę hasła każdego użytkownikowi poza użytkownikiem root, natomiast komendę ifconfig (z każdym parametrem) mogą uruchamiać bez potrzeby podawania hasła.

Aliasy

Aliasy pełnią funkcję skrótu do listy poleceń, użytkowników czy komputerów. Z tego względu rozróżniamy w sudo 3 typy aliasów:

  • User_Alias - alias listy użytkowników i grup,
  • Host_Alias - alias listy komputerów,
  • Cmnd_Alias - alias listy komend

Definicja aliasu ma następującą budowę:

RODZAJ_ALIASU NAZWA = LISTA

Jego budowy nie ma chyba sensu omawiać. Przyjęło się, że nazwy aliasów podajemy wielkimi literami.

Ważność hasła

Domyślnie sudo pamięta hasła przez 5 minut. Można jego ważność wydłużyć o kolejne 5 minut poleceniem:

sudo -v

Zaś nakazanie sudo zapomnienia hasła uzyskamy komendą:

sudo -k

Możemy także zmienić czas pamiętania hasła w /etc/sudoers modyfikując linijkę:

Defaults    env_reset

do postaci:

Defaults    env_reset, timestamp_timeout=ilość_minut

Ciekawostką jest, że dla wartości 0 sudo nie będzie zapamiętywał haseł, zaś dla wartości -1 - będzie je pamiętał aż do restartu komputera.

Tryb graficzny

Aby uruchomić programik graficzny warto wykorzystać graficzne nakładki na sudo: gksudo (z pakietu gksu) lub kdesudo (w zależności od preferowanego środowiska).

VIM - ostrzeżenie

VIM jako zaawansowany edytor tekstu umożliwia wykonanie poleceń użytkownika, które można by zakwalifikować do niepotrzebnych. Jedną z takich funkcji jest uruchomienie shella - poprzez komendę

:shell

Oczywiście kiedy VIM uruchomiony jest z prawami roota także powłoka będzie uruchomiona z jego uprawnieniami. W przypadku nadania komuś praw edycji plików poprzez sudo taka sytuacja może być niepożądana. Twórcy sudo rozwiązali problem poprzez narzędzie sudoedit. Programik robi kopie otwieranego pliku i pracuje na niej z uprawnieniami osoby, która komendę wywołała. Dopiero podczas zapisu nadawane są prawa roota w celu nadpisania oryginalnego pliku. Jedyne co trzeba zrobić to umieścić w konfiguracji sudo sudoedit zamiast VIM-a.

Przykład praktyczny

Narzędzie sudo przydaje się m.in. kiedy nie używamy środowiska graficznego, tylko lekki menadżer okien jak Fluxbox czy Openbox. Nie posiadają one odpowiedniego narzędzia do wyłączenia i restartu komputera. Możemy jednak /etc/sudoers dopisać:

User_Alias SHUT_USERS = matt, ania, przemek
SHUT_USERS localhost = NOPASSWD: /sbin/shutdown

Teraz możemy dopisać do menu naszego WM-a polecenia

sudo shutdown -h now
sudo shutdown -r now

i od teraz użytkownicy matt, ania oraz przemek będą mogli wyłączać komputer.

Kontakt z autorem:

  • e-mail: thalcave [[at]] gmail.com
  • JID: thalcave [[at]] jid.dug.net.pl

OSnews Wykop Blip Flaker Kciuk Śledzik Facebook Identi.ca Twitter del.icio.us Google Bookmarks