Sudoers, nadawanie uprawnień zwykłym użytkownikom

Uprawnienia użytkowników są jednym z fundamentalnych paradygmatów w systemach Linux. Zwykli użytkownicy mają ograniczone uprawnienia, aby zredukować ich wpływ na działanie systemu i ograniczyć go do ich własnego środowiska, po którym mogą się poruszać.

Użytkownikiem specjalnym z punktu widzenia całego systemu jest super- użytkownik zwany root-em. Root może wykonywać wszystkie polecenia, chyba że charakter aplikacji na to nie pozwala (np. VLC), ponieważ mógłby zostać uszkodzony sprzęt.

Konto roota ma charakterystyczny uuid:
root@szymon:/home/szymon# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash

Poniżej kilka słów o tym, w jaki sposób można nadawać użytkownikom uprawnienia do wykonywania niektórych poleceń. Do tego używam systemu Ubuntu 14.04.

Aby zalogować się na konto roota wydajemy polecenie:

sudo su

Aby wyjść z konsoli roota i wrócić do naszego użytkownika wydajemy polecenie:

exit

Aby wykonywać polecenia z uprawnienieniami super-użytkownika, wydajemy polecenie:

sudo polecenie

Następnie zostaniemy poproszeni o hasło. Przez kolejne 5 minut będziemy mogli wykonywać polecenia na prawach roota bez podawania hasła. Aby uniknąć sytuacji, gdzie polecenie wymaga użycia uprawnień roota, możemy dodać nowego użytkownika i polecenie do pliku konfuguracyjnego.

Aby to zrobić, trzeba wyedytować plik /etc/sudoers. Należy to zrobić za pomocą polecenia:

sudo visudo

Dzięki temu unikniemy kłopotów związanych ze złą składnią, którą waliduje przed zapisem program visudo.

Po otwarciu pliku poleceniem visudo, pojawi nam się w systemie Ubuntu domyślny edytor tekstowy w terminalu nano. W innych systemach może otworzyć nam się plik w vi.

Aby zmienić edytor możemy wydać polecenie:

sudo update-alternatives --config editor

Będziemy wtedy mogli wybrać jeden z alternatywnych edytorów, znajdujących się w /usr/bin/nazwaEditora.

Są 3 dostępne alternatywy dla editor (dostarczające /usr/bin/editor):

Wybór Ścieżka Priorytet Status ------------------------------------------------------------ * 0 /bin/nano 40 tryb auto 1 /bin/ed -100 tryb ręczny 2 /bin/nano 40 tryb ręczny 3 /usr/bin/vim.tiny 10 tryb ręczny

W CentOS, możesz dokonać zmiany w pliku ~/.bashrc:
export EDITOR=/path/to/nazwaEditora

A następnie, wydając polecenie:

. ~/.bashrc

Po ustawieniu wygodnego dla nas edytora, możemy wydać polecenie:

sudo visudo

Domyślna konfiguracja znajdująca się w pliku sudoers wygląda w następujący sposób (bez komentarzy):

Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" root ALL=(ALL:ALL) ALL %admin ALL=(ALL) ALL %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d

Pierwsza linijka „Defaults env_reset”, czyści wszystkie zmienne użytkownika, ze względów bezpieczeństwa, z sesji użytkownika sudo.

Następna linijka – rozpoczynająca się „Defaults secure_path=…” – ustawia ścieżkę, gdzie można odnaleźć aplikacje, które są używane w systemie przy wydawaniu polecenia sudo.

Następne liniki odnoszą się do uprawnień użytkowników:

szymon ALL=(ALL:ALL) ALL

Nazwa szymon odnosi się do użytkownika, którego reguły będą dotyczyć. Pierwsze ALL odnosi się do hosta, którego reguła dotyczy; następne „ALL” (pierwsze w nawiasie) odnosi się do możliwości wykonywania poleceń przez użytkownika i kolejne do grupy.
Ostatnie all odnosi się do poleceń – w tym przypadku użytkownik szymon może wszystko wykonywać bez użycia polecenia sudo. Nie jest to jednak zalecane.

Ostatnie dwie linijki są podobne do uprawnień użytkownika, odnoszą się jednak do grup użytkowników i są poprzedzone %.:

%admin ALL=(ALL) ALL

W przypadku powyższym grupa administatorów może wykonywać każde polecenie przez każdego użytkownika na każdym hoście.

Aby wygenerować aliasy użytkowników należących do grup, które ułatwią nam pisanie reguł, możemy je utworzyć w poniższy sposób. Należy pamiętać przy tym, że nazwy grup powinny zaczynać się wielkimi literami:

User_Alias GROUPONE = szymon, maria, marta User_Alias NINJA = enrike, szymon, marek

Aby umożliwić wykonywanie restartowania apache’a (usługi) określonej grupie możemy dopisać regułę dla grupy NINJA w następujący sposób:

NINJA ALL = /usr/bin/apache restart

Możemy również zezwolić użytkownikom na wykonywanie kilku poleceń, za pomocą aliasu dla poleceń.

Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart NINJA ALL = POWER

W poniższym poleceniu możemy umożliwić grupie pierwszej wykonywać polecenia jako użytkownik „www-data” lub „apache”:

Runas_Alias WEB = www-data, apache GROUPONE ALL = (WEB) ALL

Jeżeli chcemy, aby użytkownik mógł wykonać dane polecenie bez potrzeby wprowadzania przez niego hasła, możemy utworzyć następującą regułę:

GROUPONE ALL = NOPASSWD: /usr/bin/rm

NOPASSWD oznacza, że nie będzie wydawana prośba o podanie hasła. Jest to bardzo przydatne przy pisaniu skryptów, ponieważ nie przerywa ich wykonywania.
Antagonizmem do NOPASSWD jest PASSWD, które domyślnie wymusza podanie hasła.

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

Kolejnym ważnym poleceniem jest NOEXEC, które ochrania przed niebezpiecznym zachowaniem wykonania niektórych programów.

Np polecenie „less” może spowodować działanie innych programów:

szymon ALL = NOEXEC: /usr/bin/less

Jest jeszcze kilka interesujących poleceń, które można wykorzystać przy nadawaniu uprawnień grupom. Jeżeli mamy dodanego użytkownika lub grupę w pliku konfiguracyjnym, możemy – dodając flagę -u dla użytkownika lub -g dla grupy – wydać polecenie jako określony użytkownik/grupa:

sudo -u run_as_user polecenie sudo -g run_as_group polecenie

Dla wygody domyślnie sudo zapisuje uwierzytelnienie na pewien okres czasu, oznacza to, że nie trzeba podawać polecenia przez pewien okres czasu.

Należy o tym pamiętać i dla celów bezpieczeństwa możemy usunąć zegar opóźniający poleceniem:

sudo -k

Aby odłożyć zaś wymuszenie wpisania hasła możemy posłużyć się poleceniem:

sudo -v

By sprawdzić, jakie mamy uprawnienia w chwili obecnej, możemy wydać polecenie:

szymon@szymon:~$ sudo -l Pasujące wpisy Defaults dla szymon na szymon: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin Użytkownik szymon może uruchamiać na szymon następujące polecenia: [cce_bash width="100%" no_cc="true"] (ALL : ALL) ALL

Dzięki poleceniu mamy wylistowane wszystkie reguły dla użytkownika z pliku /etc/sudoers. Dzięki temu będziesz mógł się dowiedzieć co możesz zrobić jako użytkownik, wydając polecenie sudo.

Niekiedy zdarza się, że wydajesz jedno i to samo polecenie polecenie, i zapominasz wpisać sudo. W takiej sytuacji, jeżeli używasz tego samego ostatniego polecenia, możesz użyć skrótu:

szymon@szymon:~$ sudo !! sudo sudo -l Pasujące wpisy Defaults dla root na szymon: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin Użytkownik root może uruchamiać na szymon następujące polecenia: (ALL : ALL) ALL

Jeżeli chcesz dla zabawy, aby po każdym wpisaniu hasła były generowane śmieszne komunikaty, możesz dopisać w pliku następującą konfiguracje:

sudo visudo Defaults insults

This will cause sudo to return a silly insult when a user types in an incorrect password for sudo. We’ll use sudo -k to clear the previous sudo cached password to try it out:

szymon@szymon:~$ sudo -k szymon@szymon:~$ sudo ls szymon@szymon:~$ sudo su [sudo] hasło użytkownika szymon: I feel much better now. [sudo] hasło użytkownika szymon: I don't wish to know that.

Możemy też wymusić, aby dany użytkownik nigdy nie zapamiętał hasła użytkownika w pliku konfiguracyjnym:

Defaults:użytkownik timestamp_timeout=0

Na sam koniec należy wspomnieć, że ze względów bezpieczeństwa powinieneś się dwa razy zastanowić, jakie uprawnienia nadejesz użytkownikom, a także nie powinieneś nadawać zwykłym użytkownikom uprawnień administracyjnych.

Jedna myśl nt. „Sudoers, nadawanie uprawnień zwykłym użytkownikom

  1. Działa. Porada działa jak najbardziej. dopisałem siebie jako zwykłego użytkownika, aby zainstalować STEAM na PCLinuxOS. Wcześniej wywalało komunikat, że nie ma takiego użytkownika w pliku sudoers. Więc dopisałem siebie zgodnie z powyższym tekstem i już tam jestem 🙂
    Dzięki za poradę !

Dodaj komentarz

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