Začněme u příkazu
susu dovede přepnout uživatele (switch user). Pokud není zadáno na jakého uživatele se přepnout, přepíná se na
root. Pokud se chce spustit nějaký příkaz, musí být specifikován jako argument flagu c. Při volání
su se přepne proměnná
$HOME na volaného uživatele avšak
$PWD zůstane stejná. To znamená, že se přepne uživatel a zůstane v aktuálním adresáři.
su je kontrolováno modulem
pam v kterémž se dá nastavit nějaké chování (nezkoušel jsem). Příklady:
## Přepnutí na root
[radek@archx ~]$ su
Heslo:
## Domovská složka roota
[root@archx radek]# echo $HOME
/root
[root@archx radek]# pwd
/home/radek
[root@archx radek]#
exit
## Spuštění příkazu
[radek@archx ~]$ su -c ls
Heslo:
bash.d kuk.txt Stažené
bins lay 'Stažené soubory'
buntu.txt lualsp Šablony
Desktop mirror.archlinuxarm.org testy
Dokumenty nahraj.sh texty
download navod1.txt Veřejné
Downloads Obrázky Videa
hh river vystup1.txt
Hudba screenshots
img skola
## Znova přepnutí na konkrétního uživatele root
## stejné jako samotné su
[radek@archx ~]$ su root
Heslo:
[root@archx radek]# pwd
/home/radek
[root@archx radek]# echo $HOME
/root
## Přepnutí z root na BFU
[root@archx radek]# su radek
[radek@archx ~]$
## ctrl+d ukončení shelu BFU
exit
[root@archx radek]#
## ctrl+d ukončení shelu root
exit
## přihlášení se jako root
[radek@archx ~]$ su -l
Heslo:
[root@archx ~]# echo $HOME
/root
[root@archx ~]# pwd
## ďábel je v detailu
/root
[root@archx ~]# ls
Dokumenty move_home.sh Obrázky Stažené Veřejné
Hudba navod.txt Plocha Šablony Videa
[root@archx ~]# ls Dokumenty/
jentak.txt root.txt
[root@archx ~]#
odhlášení
[radek@archx ~]$ ls Dokumenty/
normal.txt
Všimněme si, že příkaz
su pokaždé vyžaduje heslo cílového uživatele!
Příkaz
sudo je sofistikovanější. Zvládá to samé jako
su plus spoustu věcí navíc. Dá se díky
sudoers detailně privilegovat obyčejný uživatel ke správě toho co mu povolíme. Můžeme nastavit, že při vykonání příkazu se bude vždy vyžadovat root heslo a ne jen heslo cílového uživatele. Dále, že defaultních 5minut kdy nevyžaduje sudo zadání hesla se zá změnit na jakoukoliv jinou hodnotu.
Příklady:
[radek@archx ~]$ sudo echo $HOME
[sudo] heslo pro root:
## Opět detail, jsem přepnut na root avšak domovská složka je BFU
/home/radek
[radek@archx ~]$ sudo pwd
/home/radek
[radek@archx ~]$ sudo ls
bash.d kuk.txt Stažené
bins lay 'Stažené soubory'
buntu.txt lualsp Šablony
Desktop mirror.archlinuxarm.org testy
Dokumenty nahraj.sh texty
download navod1.txt Veřejné
Downloads Obrázky Videa
hh river vystup1.txt
Hudba screenshots
img skola
## Hle domovská složka BFU
[radek@archx ~]$ sudo ls Dokumenty/
normal.txt
## Přihlášení se jako root
[radek@archx ~]$ sudo -i
[root@archx ~]# ls Dokumenty/
jentak.txt root.txt
[root@archx ~]# pwd
/root
[root@archx ~]# echo $HOME
/root
[root@archx ~]#
odhlášení
[radek@archx ~]$
Co všechno může konkrétní uživatel provádět se dá zjistit příkazem
sudo -ll
Odpovídající položky Defaults pro radek na archx:
targetpw
Uživatel radek smí spustit následující příkazy na archx:
Položka v sudoers: /etc/sudoers
RunAsUsers: ALL
RunAsGroups: ALL
Příkazy:
ALL
Položka v sudoers: /etc/sudoers.d/moje
RunAsUsers: root
Volby: !authenticate
Příkazy:
/usr/bin/set_backlight
Položka v sudoers: /etc/sudoers.d/moje
RunAsUsers: root
Volby: !authenticate
Příkazy:
/usr/bin/poweroff
Položka v sudoers: /etc/sudoers.d/moje
RunAsUsers: root
Volby: !authenticate
Příkazy:
/usr/bin/reboot
Položka v sudoers: /etc/sudoers.d/moje
RunAsUsers: root
Volby: !authenticate
Příkazy:
/usr/bin/pacman
Položka v sudoers: /etc/sudoers.d/moje
RunAsUsers: root
Volby: !authenticate
Příkazy:
/usr/bin/mount
Položka v sudoers: /etc/sudoers.d/moje
RunAsUsers: root
Volby: !authenticate
Příkazy:
/usr/bin/umount
Položka v sudoers: /etc/sudoers.d/moje
RunAsUsers: root
Volby: !authenticate
Příkazy:
/usr/bin/qq
Výpis ukazuje, že mohu vše pokud zadám heslo cílového uživatele: targetpw
Plus co je v souboru
moje mohu použít bez hesla:
[radek@archx ~]$ sudo mount /dev/nvme0n1p3 /mnt
[radek@archx ~]$ sudo pwd
[sudo] heslo pro root:
/home/radek
A teď malá úprava v
sudoers a výsledky jsou jiné:
[radek@archx ~]$ sudo umount /mnt
[radek@archx ~]$ sudo pwd
Je nám líto, uživatel radek nemá dovoleno spouštět „/usr/bin/pwd“ jako root na archx.
[radek@archx ~]$ sudo -ll
Odpovídající položky Defaults pro radek na archx:
targetpw
Uživatel radek smí spustit následující příkazy na archx:
Položka v sudoers: /etc/sudoers.d/moje
RunAsUsers: root
Volby: !authenticate
Příkazy:
/usr/bin/set_backlight
Položka v sudoers: /etc/sudoers.d/moje
RunAsUsers: root
Volby: !authenticate
Příkazy:
/usr/bin/poweroff
Položka v sudoers: /etc/sudoers.d/moje
RunAsUsers: root
Volby: !authenticate
Příkazy:
/usr/bin/reboot
Položka v sudoers: /etc/sudoers.d/moje
RunAsUsers: root
Volby: !authenticate
Příkazy:
/usr/bin/pacman
Položka v sudoers: /etc/sudoers.d/moje
RunAsUsers: root
Volby: !authenticate
Příkazy:
/usr/bin/mount
Položka v sudoers: /etc/sudoers.d/moje
RunAsUsers: root
Volby: !authenticate
Příkazy:
/usr/bin/umount
Položka v sudoers: /etc/sudoers.d/moje
RunAsUsers: root
Volby: !authenticate
Příkazy:
/usr/bin/qq
Mohu něco vykonat jako jiný uživatel, ale ne jako root. Avšak co je v souboru
moje mohu používat jako root bez znalosti root hesla.
Apropó používat tenhle dvoupříkaz
sudo su je ujeťárna hrubého zrna.
Z výše uvedeného vyplývá ještě jedno. A to, že
sudo -i a
su -l je jedno a to samé. Neznamenají
přepnutí na cílového uživatele, ale
přihlášení se jako cílový uživatel (ve většině případech root)! Více na
man su
man sudo
Při dobře nastaveném
sudoers se dá na systému dělat bezpečná údržba aniž by uživatel zadal nebo znal root heslo.
Jak jsem
psal už dříve, ty soubory mají svá specifika.