Rendszeresen előjön a kérdés, hogy mi a különbség a su és a sudo között. Nézzük akkor szépen sorban.
SU
Switch user, felhasználó váltás. Lehetővé teszi a felhasználó számára, hogy másik felhasználóvá váljon anélkül, hogy ki/belépne. Ha nem adunk meg felhasználó nevet, akkor root-ra vált át.
Ha a root vált át másik felhasználóra, nem kéri az adott felhasználó jelszavát, ha egyéb felhasználó vált valaki másra (akár root-ra), bekéri az adott felhasználó jelszavát.
Fontosabb paraméterei:
- kapcsoló hatására úgy vált felhasználót, mintha azzal a felhasználóval léptünk volna be (lefuttatja a profile-t, a felhasználó home könyvtárába lép, stb.), egyébként csak a felhasználó és csoport id-ket módosítja, és esetleg a hozzájuk tartozó környezeti változókat.
-c Lefuttatja a megadott parancsot a megadott felhasználó nevében (enélkül ugye egy shell-t indít el).
SUDO
A felhasználó parancsot hajthat végre másik felhasználó nevében, amennyiben engedélyezve van számára. A sudoers fájlban kell engedélyezni hogy melyik felhasználó mit tud végrehajtani, kinek a nevében, illetve hogy kelljen-e jelszót megadnia vagy sem. Ha nem adunk meg felhasználó nevet a -u kapcsolóval, root-ként próbálja meg kiadni az adott parancsot. Amennyiben nincs megadva a sudoers fájlban a NOPASSWD címke, a sudo-t kiadó felhasználó jelszavát kéri be.
Nézzük akkor a fő különbségeket
1. A su használatát nem kell engedélyezni, a sudo-t kell a sudoers konfig fájlban.
2. su-nál annak a felhasználónak a jelszavát kell megadni, akire át akarunk váltani, sudo-nál pedig akiről váltunk, vagy nem kell jelszót megadni.
Példák
Nézzük, hogy hogyan lehet a két parancs segítségével a root nevében shellt indítani. Ha csak egy shellt akarunk indítani akkor vagy a su vagy a sudo -s parancsot használhatjuk. Amennyiben viszont login shellt akarunk indítani, akkor a su - vagy a sudo -i parancsokat használhatjuk. su esetében ismerni kell a root jelszavát, és kérni is fogja, sudo esetében pedig vagy a saját jelszavunkat kéri, vagy azt sem.
[kovaax@otthon ~]$ pwd
/home/kovaax
[kovaax@otthon ~]$ su
Password: (root jelszava)
[root@otthon kovaax]# pwd
/home/kovaax
[root@otthon kovaax]# exit
[kovaax@otthon ~]$ su -
Password: (root jelszava)
Last login: Wed Jul 22 14:44:03 CEST 2015 on pts/1
[root@otthon ~]# pwd
/root
[root@otthon ~]# logout
[kovaax@otthon ~]$ pwd
/home/kovaax
[kovaax@otthon ~]$
[kovaax@otthon ~]$ pwd
/home/kovaax
[kovaax@otthon ~]$ sudo -i
[sudo] password for kovaax:
[root@otthon ~]# pwd
/root
[root@otthon ~]# logout
[kovaax@otthon ~]$ sudo -s
[sudo] password for kovaax:
[root@otthon kovaax]# pwd
/home/kovaax
[root@otthon kovaax]# exit
[kovaax@otthon ~]$ pwd
/home/kovaax
[kovaax@otthon ~]$
Nézzük meg, hogy hogyan lehet egyik felhasználóval elindítani egy parancsfájlt, amire neki nincs futattási joga. Legyen a két felhasználó alma és korte, a parancsfájl pedig annyit csinál csak, hogy kiírja a futtató felhasználót (whoami).
A sudoers-be ezt kell beírni:
alma otthon=(korte) NOPASSWD: /home/korte/parancs
A parancsfájl pedig így néz ki:
cat /home/korte/parancs
#!/bin/bash
whoami
[alma@otthon ~]$ ls -l /home/korte/parancs
-rwx------ 1 korte user 25 Jul 22 15:21 /home/korte/parancs
[alma@otthon ~]$ cat /home/korte/parancs
cat: /home/korte/parancs: Permission denied
[alma@otthon ~]$ sudo -u korte /home/korte/parancs
korte
[alma@otthon ~]$ su -c /home/korte/parancs korte
Password: (korte jelszavát kell beírni)
korte
[alma@otthon ~]$
Sajnos sok linux disztribució a sudo segítségével ad rendszergazdai jogosultságot bizonyos normál felhasználóknak, amit a sudoers-ben a következő (vagy ezzel azonos értékű) sorral old meg:
kovaax ALL=(ALL) ALL
Itt a 3 ALL jelentése a következő (sorban): bármely gépről, bármely felhasználó nevében, bármely parancsot végrehajthatja a kovaax felhasználó. Ez elég randa biztonsági luk, mivel egy normál felhasználóval sokszor belépünk, így sokkal nagyobb az esélye, hogy megszerzik a jelszavunkat valahogy. Szóval én a külön root rendszergazdára és a su parancs használatára szavazok.
Mikor melyiket kell használni?
Szerintem ez a kérdés úgy helyes, hogy mikor kell sudo-t használni?
1. Ha úgy akarok egy felhasználónak jogot adni egy másik felhasználó nevében futtatni dolgokat, hogy ne tudja meg közben a másik felhasználó jelszavát.
2. Vagy ha jelszó nélkül akarom ugyanezt megoldani (tipikusan scriptekben szoktuk ezt használni). Minden más esetben a su használata a javasolt.
Szerintem.
Dokumentáció
man sudo
man sudoers
man su