SUID és SGID Linuxban példákkal
On október 1, 2021 by adminKépzeljünk el egy olyan helyzetet, amikor van egy olyan szkript vagy futtatható fájl, amelyet mindig egy adott felhasználónak kell futtatnia, egyszerűen azért, mert ez a felhasználó rendelkezik a megfelelő hozzáférési jogokkal a szkript által végrehajtott műveletekhez. Ön azt is szeretné, ha más felhasználók is futtathatnák ezt a szkriptet, de végső soron a szkript eredeti felhasználójának kell futtatnia(mivel csak ez a felhasználó rendelkezik a végrehajtott műveletekhez szükséges jogosultságokkal).
A Linux alkalmazások és programok alapértelmezés szerint pontosan annak a felhasználónak a jogosultságaival futnak, aki végrehajtja őket. Emiatt szükségünk van egy jó megoldásra a fent említett helyzetre (azaz: Minden felhasználónak képesnek kell lennie egy adott felhasználó tulajdonában lévő programot úgy végrehajtani, mintha maga a tulajdonos hajtaná végre).
Ez az a pont, ahol a SUID a képbe kerül. A SUID nem más, mint egy speciális, Linuxban elérhető jogosultsági bit, amely ezt nagy könnyedséggel éri el.
Ha te vagy a tulajdonosa egy futtatható fájlnak, akkor a SUID engedélybeállítás segítségével a többi felhasználó a te engedélyeddel fogja futtatni a futtatható fájlt, és nem az övékével.
A SUID-t általában a Linuxban arra használják, hogy a végrehajtás során átmenetileg megnövelt jogosultságokat biztosítsanak. Ez a jogosultságok megemelése egyáltalán nem állandó. Ez csak a program/szkript végrehajtása közbeni ideiglenes jogosultságnövelés.
Példa a Linuxban a SUID jogosultsági bittel rendelkező végrehajtható fájlokra
Magyarázzuk ezt egy példán keresztül. A futtatható fájlok fenti listájából a /usr/bin/passwd olyasmi, amit a rendszer minden felhasználójának futtatnia kell(ez azért van, mert minden felhasználónak képesnek kell lennie saját jelszavát megváltoztatni). Ha nem tudod, hogyan működnek a jelszavak a linuxban, ajánlom az alábbi cikk elolvasását.
olvasd: Hogyan működnek a jelszavak Linuxban
A felhasználó jelszavának frissítéséhez a felhasználónak szerkesztenie kell a /etc/passwd, /etc/shadow fájlt a linuxban. Ez azonban csak a root felhasználó számára engedélyezett. Ez az oka annak, hogy a SUID bit az /usr/bin/passwd fájlra van alkalmazva. Mivel a root a fájl tulajdonosa, és a SUID bit be van állítva a fájlra, az /usr/bin/passwd parancsot bármelyik felhasználó root felhasználóként fogja végrehajtani. Nézzük meg ezt a gyakorlatban.
Az alábbiakban látható a sarath nevű felhasználó által indított passwd parancs. Nézzük meg, hogy a passwd parancs folyamata root felhasználóként kerül-e végrehajtásra.
$ passwdChanging password for user sarath.Changing password for sarath.(current) UNIX password:
Nyissunk egy másik terminált, és indítsuk el a ps aux commad-ot, és nézzük meg, hogy a passwd parancs folyamata root felhasználóként fut-e. Ezt az alábbiak szerint tehetjük meg:
$ ps aux | grep passwdroot 24531 0.0 0.0 156928 1664 pts/0 S+ 07:24 0:00 passwd
Elég jól látható, hogy a passwd parancsfolyamat root felhasználóval fut (a fenti kimenet első mezőjében látható.). A passwd parancshoz hasonlóan a korábban bemutatott SUID alkalmazott fájlok listájából bármely parancs mindig a fájl tulajdonosának engedélyével fog futni, függetlenül attól, hogy melyik felhasználó hajtja végre.
Azt is észrevehetjük, hogy még a ping parancs is SUID (lásd a fent megadott kezdeti listát), ez azért van, mert a PING végrehajtása több olyan hálózati műveletet igényel, amelyet csak a root hajthat végre.
Hogyan lehet a SUID-ot Linuxban beállítani?
A SUID beállítása a szükséges fájlokon/szkripteken egyetlen CHMOD parancsra van.
$ chmod u+s /path/to/file/or/executable
A fenti parancsban a “/path/to/file/or/executable” helyébe a SUID bitet igénylő szkript abszolút elérési útját írja be. Ezt a chmod numerikus módszerével is elérhetjük.
$ chmod 4755 /path/to/file/or/executable
A “4755”-ben az első “4” a SUID-ot jelzi. Egy másik példa a numerikus módszerre az alábbiakban látható.
$ chmod 4750 /path/to/file/or/executable
Alapvetően a numerikus módszerben egyszerűen a 4-es számot kell a többi, az adott fájlhoz szükséges engedélykészlet elé tenni.
Hogyan ellenőrizhetjük, hogy a SUID bit alkalmazásra került-e egy fájlon vagy sem?
Az alábbiakban bemutatott ls parancs segítségével ellenőrizhetjük, hogy a SUID bit alkalmazásra került-e egy fájlon vagy sem.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
Azls -l parancsnak meg kell mutatnia, hogy a SUID bit alkalmazásra került-e vagy sem. Egyszerűen nézze meg az ls -l kimenetének első mezőjét. Az s a -rwsr-xr-x-ben a SUID bitet jelzi. Bizonyos esetekben a fentebb látott kis s helyett egy nagy S-t fogsz látni. A nagy S azt jelzi, hogy az adott fájlra/szkriptre nincs futtatható engedély.
root@ip-10-12-2-217:/usr/bin# chmod -x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwSr--r-- 1 root root 47032 Jul 15 2015 passwd
A fenti kimenetből jól látható, hogy a /usr/bin/passwd fájl végrehajtási engedélyének eltávolításával az ls -l kimenete nagy S lett. Ha ismét végrehajtási engedélyt adunk a fájlhoz, akkor kis s lesz, mint alább látható.
root@ip-10-12-2-217:/usr/bin# chmod +x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
Hogyan lehet megtalálni az összes olyan fájlt, amelynek SUID bitje engedélyezve van a linuxban?
Az alábbi find paranccsal megkeresheti az összes olyan fájlt a rendszerben, amelynek SUID bitje engedélyezve van. Ha még nem ismeri a find parancsot, akkor ajánlom figyelmébe az alábbi cikket.
Olvassa el: Keresés parancs Linuxban példákkal
root@ip-10-12-2-217:~# find / -perm -4000 -exec ls -l {} \;
Helyettesítse a fenti parancsban az első / betűt a kívánt helyre, hogy megtalálja az összes SUID fájlt azon a helyen. Például a /usr/bin könyvtárban található összes SUID azonosítóval rendelkező fájl megtalálásához futtassa az alábbi parancsot.
Kérem, ne feledje, hogy a SUID bitet a Linuxban a könyvtáraknál figyelmen kívül hagyják.
A SUID nagyon hasonló a SUID-hoz. Az egyetlen különbség az, hogy az SGID beállítású szkript/fájl a csoport tulajdonosának jogosultságával fog futni.
Ha SGID-t állít be a könyvtárakban, akkor az adott könyvtárban létrehozott összes fájl vagy könyvtár ugyanazon közös csoport tulajdonában lesz(annak a könyvtárnak a csoporttulajdonosa, ahol az SGID be van állítva).
Példák SGID fájlokra linuxban
Hogyan kell beállítani az SGID-t Linuxban?
A SUID-hoz hasonlóan az SGID is konfigurálható a chmod parancs segítségével az alábbiakban látható módon.
root@localhost:~# chmod g+s /path/to/file
A fenti parancsban a “/path/to/file” helyett az SGID bitet igénylő szkript abszolút elérési útját kell megadnunk. Ezt a chmod numerikus módszerével is elérhetjük (lásd alább).
root@localhost:~# chmod 2755 /path/to/file
Hogyan ellenőrizhetjük, hogy az SGID érvényes-e egy fájlra vagy szkriptre?
A SUID-hez hasonlóan az ls -l parancsot is könnyen futtathatjuk egy fájlon/könyvtáron, hogy megtudjuk, az SGID engedélyezve van-e vagy sem. Az alább látható példa ugyanezt mutatja.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
A about kimenet első mezőjének kis s része (-rwxr-sr-x) az SGID bitet jelzi. A SUID-hez hasonlóan, ha a csoportra nem alkalmazunk futtatható engedélyt, akkor a kis S helyett nagy S lesz, ahogy az alább látható.
root@ip-10-12-2-217:/usr/bin# chmod g-x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-Sr-x 1 root shadow 54968 Jul 15 2015 chage
A csoport futtatható engedélyének engedélyezése pedig kis s-t eredményez (az alábbiakban látható.)
root@ip-10-12-2-217:/usr/bin# chmod g+x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
Vélemény, hozzászólás?