Hogyan futtathatunk sudo parancsokat jelszó használata nélkül

botond küldte be 2020. 10. 06., k – 23:37 időpontban

Tartalom

 

Bevezető

Amikor gyakran kell a sudo segítségével root-ként futtatni más parancsokat akkor felmerülhet az igény, hogy ne kelljen minden alkalommal begépelnünk a jelszót. Bár a munkamenet egy ideig "megjegyzi" a korábban megadott jelszót, így egy darabig nem kell újra begépelni, de egy idő után újra azonosítani kell magunkat. Valamint ha több felhasználóval is dolgozunk, akkor meg pláne gyakrabban lesz szükség a jelszavainkra. Ha pedig Shell scriptekben is szeretnénk használni root privilégiumokkal futtatott parancsokat, akkor végképp szükséges megkerülni a jelszavak begépelését, hogy programjaink automatizáltan működhessenek. Ebben a rövid leírásban megnézzük hogyan kerülhetjük el perzisztens módon a jelszó bekérését a sudo használatakor.

 

 

A sudo

A sudo egy hasznos kis eszköz a Unix-szerű operációs rendszerekben, ami arra szolgál, hogy futtathassunk parancsokat vagy programokat más felhasználók nevében, jellemzően root-ként. Segítségével átruházhatók olyan feladatok, mint például a teljes szerver vagy annak egyes szolgáltatásainak (pl. Apache) újraindítása a sima felhasználókra.

A sudoers fájl

A /etc/sudoers fájl tartalmazza a szabályokat, amiket a sudo parancs figyelembe vesz használatakor. A fájl jellemzően azokat a bejegyzéseket tartalmazza, hogy például ki milyen parancso(ka)t futtathat a sudo segítségével, stb.

Ezt a fájlt sose szerkesszük közvetlenül, hanem használjuk az erre a célra készített visudo parancsot:

root-ként:

visudo

Sima felhasználóként:

sudo visudo

Ha belenézünk a fájlba, akkor ezt látjuk egy "gyári" Debian 10 (Buster) rendszerben:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

Itt láthatunk példákat is a használatára, valamint az elején a kommentekben javasolja, hogy vegyük fontolóra, hogy ennek a fájlnak a módosítása helyett inkább hozzunk létre saját fájlokat a /etc/sudoers.d/ könyvtárban, amit láthatunk is a fájl végén, hogy beolvassa annak tartalmát, tehát végrehajtja a könyvtárban lévő saját beállítás-fájljainkat.

 

Sudo parancsok futtatása jelszó használatával

Alapból, ha nincs beállítva a felhasználó számára a jelszó nélküli parancsok futtathatósága, akkor természetesen bekéri a jelszót, amennyiben egyáltalán jogosultak vagyunk a sudo bármilyen jellegű használatára (pl a sudo csoport tagság, vagy a sudoers fájlban meglévő jelszavas beállítás esetén):

A sudo jelszavas használata

Első használatkor ki is írja a rövid szabályzatot, majd bekéri a felhasználó saját jelszavát.

Itt a példában a web4 felhasználó ne tévesszen meg bennünket, ez csak az ISPConfig-os szerverkörnyezet "öröksége", mert a kezelőpanel alapból minden tárhely fiókhoz létrehoz egy web(x) nevű SSH felhasználót, amivel az adott weboldal szükséges karbantartási és háttérfeladatait látja el a rendszerben. És mivel a webfiókhoz utólag létrehozott – és vele megegyező UID-al és GID-el rendelkező – SSH felhasználó hátrébb van a listában (/etc/passwd fájlban), ezért sok helyen az előrébb lévő web(x) felhasználóként kerül azonosításra. 
Nincs ez másképpen a sudo esetén sem, tehát amennyiben ilyen szerverkörnyezettel dolgozunk, ilyenkor a sudo jelszó nélküli használatakor ezekkel a "párhuzamosan" létező web(x) felhasználókkal kell hivatkoznunk a sudoers fájlban az adott felhasználóra.
Más esetekben, például egy ISPConfig-on kívül, kézzel létrehozott felhasználó esetén, vagy egy egyszerűbb telepítésnél, vagy például egy LAMP szerver esetén természetesen a bejelentkezett felhasználónévvel kell hivatkozni a sudoers fájlban.

 

Sudo parancsok futtatása jelszó használata nélkül

 

 

Ha be szeretnénk állítani, hogy jelszó nélkül futtathassunk a sudo segítségével különböző parancsokat, akkor ehhez hozzunk létre egy saját fájlt a /etc/sudoers.d/ könyvtárban. Természetesen ehhez root jogosultság kell, így ezt futtassuk root-ként. Például:

nano /etc/sudoers.d/linuxportal

Célszerű olyan fájlnevet választani, ami utal a benne lévő beállításokra, hogy később is tudjuk, hogy mi van benne. Így például én a linuxportal felhasználóm számára hozok létre egy fájlt. Majd ebben kell elhelyezni a számunkra szükséges beállítást.

Egy vagy több meghatározott parancs beállítása

Amennyiben a felhasználónkkal csak egy vagy esetleg néhány bizonyos parancsot kell futtatnunk rendszeresen, netán szkriptekből szükséges meghívni őket root jogosultságokkal jelszó bekérése nélkül, pl. különböző adatmentések, szolgáltatások indítása, leállítása, stb, akkor tegyük a fájlba az alábbi sort:

web4 ALL = NOPASSWD: /bin/systemctl

Tehát itt én a web4 felhasználónevet használom a fentebb leírt okok miatt, így mindenki a saját megfelelő felhasználónevét használja.

Itt ügyeljünk, hogy a végén megadott parancsot a teljes elérési útjával adjuk meg, különben szintaktikai hibát fog adni a sudo hívásakor.

Mentsük le a fájlt, majd próbáljuk is ki a cél felhasználóval a sudo működését. Például lekérdezzük az Apache állapotát:

sudo systemctl status apache2.service

A sudo jelszó nélküli használata

Amint a példában is láthatjuk, a sudo immár nem kért jelszót, hanem egyből futtatta a parancsot.

Ha több parancsot szeretnénk megadni, akkor azt vesszővel és szóközzel elválasztva tegyük, továbbra is mindegyiket a teljes útvonalával adjuk meg a gyökértől. Az alábbi példában beállítjuk még a nano szerkesztőt is, így utána már a sima felhasználóval is tudjuk módosítani a  /etc/sudoerd.d/ könyvtárban a korábban még root-ként létrehozott fájlunkat:

web4 ALL = NOPASSWD: /bin/systemctl, /usr/bin/nano

Így tehát felsorolhatjuk a szükséges parancsokat, amiket sudo-val jelszó nélkül szeretnénk használni.

Mindenre kiterjedő beállítás

Ha úgy szeretnénk beállítani, hogy bármit tudjunk futtatni a sudo segítségével a jelszó megadása nélkül, akkor pedig állítsuk be a következőt:

web4 ALL = (ALL) NOPASSWD:ALL

Itt is természetesen a saját megfelelő felhasználónkat adjuk meg az itteni web4 helyett.

Ezzel a beállítással nagyon óvatosan bánjunk, mert ha jelszó bekérése nélkül bármit futtathatunk root-ként, akkor a rendszerünk nagyobb biztonsági kockázatnak van kitéve. Akár egy elhibázott Shell script kód, akár egy illetéktelen személy hozzáfér a felhasználónkhoz, bármit futtathat a gépünkön/szerverünkön. így ezt a lehetőséget csak nagyon indokolt esetben használjuk!

 

 

Konklúzió

Ezekkel a kis egyszerű beállításokkal tehát könnyebbé tehetjük a terminálban végzett rendszeres munkát, időt spórolhatunk meg a jelszavak begépelésének kihagyásával, valamint könnyedén készíthetünk különböző automatizáló scripteket, amikben root privilégiummal futtathatjuk a szükséges parancsokat.

 

Kapcsolódó tartalom, hasznos linkek: