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.
Tagi: admin, linux, root, sudoers, ubuntu, uprawnienia, users, użytkownicy, visudo
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ę !