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ń: 90872
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