Wykonywanie komend jako superużytkownik

Komendy wymagające uprawnień superużytkownika mogą być wykonywane bez znajomości hasła roota dzięki narzędziu sudo (superuser do). Plikiem konfiguracyjnym tego narzędzia jest /etc/sudoers, który może być edytowany przez visudo.

Składnia wpisów w tym pliku dla użytkownika user1 i grupy dba wygląda następująco:

user1  ALL=(ALL)  ALL
%dba   ALL=(ALL)  ALL

Takie wpisy spowodują przyznanie wszystkich uprawnień do wszystkich poleceń administracyjnych w systemie dla użytkownika user1 oraz członków grupy dba (nazwa grupy poprzedzana jest znakiem %).

Jeżeli użytkownik user1 lub członek grupy dba wykona uprzywilejowaną komendę zostanie poproszony o podanie swojego hasła, np:

Jeżeli chcemy aby użytkownik  user1 i członkowie grupy dba nie byli pytani o hasło to dodajemy takie wpisy do pliku sudoers:

user1  ALL=(ALL)      NOPASSWD:    ALL
%dba   ALL=(ALL)      NOPASSWD:    ALL

Aby użytkownikowi user1 i grupie dba przyznać prawo do wykonywania tylko konkretnych komend np. /usr/bin/system-config-printer i /usr/bin/system-config-users modyfikujemy wpisy:

user1    ALL=/usr/bin/system-config-printer,/usr/bin/system-config-users
%dba     ALL=/usr/bin/system-config-printer,/usr/bin/system-config-users

Ogólnie składnia wpisów w pliku /etc/sudoers wygląda następująco:

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ównoznaczny 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:
%serwis 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 serwis 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.

Sudo pozwala na używanie aliasów do definiowania grup użytkowników, komend, hostów używając dyrektyw:  User_Alias, Cmnd_Alias i Host_Alias.

Cmnd_Alias     KOMENDY = /usr/bin/yum, /usr/bin/rpm
User_Alias     UZYTKOWNICY = user1, user2, user3, user4, user5
%UZYTKOWNICY   ALL = KOMENDY
%serwis        ALL=(ALL) NOPASSWD: KOMENDY 

Sudo loguje pozytywnie zakończoną autentykację użytkowników i wykonanie komend w pliku /var/log/secure.

Leave a Reply

Your email address will not be published. Required fields are marked *