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:
1 |
$ sudo system-config-users</code> <code> Password |
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.