A sudo parancs a legtöbb felhasználó számára egyet jelent a root-al. Egy kis kellemetlenségért cserébe (be kell gépelni, hogy sudo + jelszó) megkapjuk az isteni hatalmat a gép felett. Aki viszont veszi a fáradságot, az a beállításokkal nagyon részletesen előírhatja, hogy mennyit is kaphat valaki ebből a hatalomból.
A sudo beállításai az /etc/sudoers fájlban és az /etc/sudoers.d/ könyvtár fájljaiban található. Ez utóbbi azért alakult ki, mert a csomagkezelők előszeretettel írják felül a konfigurációs állományokat egy program frissítése során. A sudoers.d fájljai viszont értintetlenek maradnak.
A konfigurációs állomány szintakája nagyon egyszerű:
user host = (otheruser) cmd
A user lehet egy felhasználó neve, de akár egy csoport is, ha % jellel kezdődi. A host annak a gépnek a nevét jelenti, ahol a jogokat ki szeretnénk adni. Ez a megoldás lehetővé teszi, hogy egy sudoers fájlt több gép között is megoszthassunk. Az otheruser annak a felhasználónak a neve, akinek a nevében futni fog a parancs. Mint látható, nem muszáj root-nak lennie. Ha például az adatbázis felügyelet egy dedikált user nevében fut, akinek még home könyvtára sincs, akkor itt beállíthajuk, hogy a felhasználó ezen néven adatbázis műveleteket végezzen. A cmd a futtatni kívánt parancs. Mivel a sudo alapból nem ismeri a PATH-t, ezért célszerű teljes elérési utat megadni. A parancs esetén van egy érdekes dolog! Nevezetesen megadhatunk paramétereket is. Ezzel olyan érdekes helyzeteket hozhatunk létre, hogy a felhasználó nem tud tetszőleges paraméterekkel parancsot futtatni. Ha mondjuk egy felhasználónak csak egy szolgáltatás indítását és leállítását akarjuk engedélyezni, akkor a következő módon tehetjük meg:
dummy ALL = /sbin/systemctl start dummy.service, /sbin/systemctl stop dummy.service
Ebben az esetben a dummy felhasználó bármely gépen el tudja indítani a dummy szolgáltatást és le is tudja állítani. De az állapotát már nem tudja lekérdezni!
Ez így mind szép, de mi van, ha több host-ot, több felhasználót, netalántán több parancsot szeretnénk megadni? A konfiguráció során létrehozhatunk aliasokat. A Host_Alias a számítógépek neveit gyűjti egy azonosító alá. A User_Alias a felhasználókat. A Cmnd_Alias szerepe ezek alapján már egyértelműen beazonosítható.
Az aliasok felépítése is nagyon egyszerű:
User_Alias DB = adam, eve
Tehát a DB alias alatt adam és eve fog szerepelni. Az így definiált aliasokat utána használhatjuk a fenti struktúrában.
Azt is szabályozhatjuk, hány esetben kelljen beírni a jelszót. Ha a kiadni kívánt parancs előtt szerepel a NOPASSWD:, akkor a jelszó beírása nem kötelező, ami szkripteléskor jön jól.
Ez persze még mindig csak a jéghegy csúcsa. Nem említettem a reguláris kifejezéseket, környezeti változókat, stb. Aki még mélyebbre szeretne ásni a témában, itt teheti meg.