Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: su versus sudo  (Přečteno 357 krát)

ramael

  • Stálý člen
  • **
  • Příspěvků: 638
su versus sudo
« kdy: 12 Března 2024, 02:28:24 »
Začněme u příkazu su
su 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:
Kód: [Vybrat]
## 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:
Kód: [Vybrat]
[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
Kód: [Vybrat]
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:
Kód: [Vybrat]
[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é:
Kód: [Vybrat]
[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
Kód: [Vybrat]
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.
Lenovo: ThinkPad X380 Yoga
Joutůůůůb

 

Provoz zaštiťuje spolek OpenAlt.