Setuid
A Setuid és a Setgid Unix kifejezések , a „Felhasználói azonosító beállítása” és a „Csoportazonosító beállítása” rövidítése. A Setuid, más néven "suid" és "setgid" hozzáférési engedélyek, amelyek Unix - alapú operációs rendszerben hozzárendelhetők fájlokhoz vagy könyvtárakhoz . Főleg arra szolgálnak, hogy a rendszerfelhasználók bináris fájlokat futtathassanak ideiglenesen emelt jogosultságokkal egy adott feladat végrehajtásához.
Ha egy fájlban aktiválva van a "Setuid" bit, akkor azt a listában egy "s" jelzi a következőképpen:
-rwsr-xr–x 1 root shadow 27920 ago 15 22:45 /usr/bin/passwd
Ez a tulajdonság szükséges ahhoz, hogy a normál felhasználók olyan feladatokat hajthassanak végre, amelyek magasabb jogosultságokat igényelnek, mint a normál felhasználók számára elérhetők. Előfordulhat, hogy bizonyos feladatok, amelyek magasabb jogosultságokat igényelnek, nem nyilvánvalóak (például a ping parancs , amelynek hálózati interfészen keresztül vezérlőcsomagokat kell küldenie és figyelnie kell rájuk).
Setuid a végrehajtható fájlokban
Általában ez a bit a végrehajtható fájlokon van beállítva. Ha egy bináris végrehajtható fájlhoz hozzá van rendelve a setuid attribútum, a normál rendszerfelhasználók futtathatják azt a fájlt, és jogosultságokat szerezhetnek a fájl tulajdonosától (általában root ) a létrehozott folyamatban . Amikor a folyamat rendszergazdai jogosultságokat kap, az alkalmazás olyan feladatokat hajthat végre a rendszeren, amelyeket a normál felhasználók általában nem tudnának elvégezni. A rendszer megakadályozza, hogy a végrehajtható fájlt meghívó felhasználó bármilyen módon módosítsa az új folyamatot, például a ptrace, LD_LIBRARY_PATH használatával vagy jelek küldésével (magától a termináltól érkező jeleket elfogadja).
Például a setuid bitet az /usr/bin/passwd fájl használja, így mindenki ellenőrzött módon módosíthatja a jelszavát. A program futtatása lehetővé teszi a felhasználó számára, hogy írjon a jelszófájlba (/etc/shadow, nem tévesztendő össze az /etc/passwd-vel), de anélkül, hogy írási engedélyt kellene adnia a fájlnak, ami nagy biztonsági rést jelentene.
Bár a setuid szolgáltatás sok esetben nagyon hasznos, biztonsági kockázatot jelenthet, ha a setuid attribútumot nem gondosan megtervezett végrehajtható programokhoz rendelik hozzá. A felhasználók kihasználhatják a hibás programok sebezhetőségét, hogy tartósan magasabb jogosultságokhoz jussanak, vagy akaratlanul is futtathatnak egy trójai falót .
A setgid attribútum lehetővé teszi a csoport alapú jogosultságok megváltoztatását egy folyamaton, ugyanúgy, ahogy a setuid teszi a felhasználó alapú jogosultságokhoz.
Setuid a könyvtárakban
A setgid jelző egy könyvtárban teljesen más jelentéssel bír, mint a fájlokon való alkalmazása. A setgid engedéllyel rendelkező könyvtárak arra kényszerítik az összes bennük létrehozott fájlt és alkönyvtárat, hogy a könyvtár tulajdonosának csoportjába tartozzon, és ne a fájlt vagy alkönyvtárat létrehozó felhasználó csoportjába.
A setuid jelzőnek viszont nincs hatása, ha egy könyvtárra alkalmazzák. Ennek az az oka, hogy ha a könyvtár tulajdonosát a könyvtárban létrehozott objektumokra továbbítaná, az ott fájlt létrehozó felhasználó azonnal elveszítené a tulajdonosi jogosultságait a fájlhoz, ami esetleg megakadályozná, hogy újra felhasználhassa vagy módosítsa. .
Példák
SUID-engedélyek hozzáadása egy példa binárishoz (felhasználó)
# chmod u+s /home/user/executable
SUID-engedélyek eltávolítása egy bináris (felhasználó) számára
# chmod us /bin/ping
GUID-engedélyek hozzáadása egy példa binárishoz (csoport)
# chmod g+s /home/user/executable
GUID-engedélyek eltávolítása egy példa binárishoz (csoport)
# chmod gs /home/user/executable
SUID attribútumokkal rendelkező bináris fájl engedélyeinek megtekintése
# ls -al /bin/ping
-rwsr-xr-x 1 gyökér gyökér 35712 2011 -05-03 12 :43 /bin/ping
Keresse meg az összes SUID vagy SGID engedéllyel rendelkező fájlt
# find / -path /proc -prune -o -type f -perm +6000 -ls
Keresse meg az összes fájlt, amely csak SUID engedéllyel rendelkezik
# find / -path /proc -prune -o -type f -perm +4000 -ls
Keresse meg az összes olyan fájlt, amely csak SGID engedéllyel rendelkezik
# find / -path /proc -prune -o -type f -perm +2000 -ls
Használati példák
SUID
4711 engedély a root tulajdonában lévő végrehajtható fájlhoz .
A so-and-so nevű felhasználó megpróbálja futtatni a fájlt. A végrehajtható fájl engedélyei minden végrehajtási engedéllyel rendelkező felhasználóhoz be vannak állítva (471 1 ), így a so-and- so végrehajthatja a fájlt. A fájl tulajdonosa root , és a SUID engedély be van állítva ( 4 711), így a fájl rootként fut .
Így a fájl root -ként fut le , ami azt jelenti, hogy ez-és-más olyan fájlokat módosíthat, amelyeket általában nem tud anélkül, hogy teljes jogosultságokat adna. Ezt a bináris fájl használja /usr/bin/passwd. módosítania kell az y passwdfájlt , amely a felhasználói fiókadatokat és a jelszókivonatokat tárolja, de ezeket a fájlokat csak a root módosíthatja .
/etc/passwd/etc/shadow
[ so-so @ host ~ ] $ stat -c "%a %U:%G %n" /usr/bin/passwd
4701 root:root /usr/bin/passwd
[ so-and-so @ host ~ ] $ passwd
Jelszó módosítása az ilyen-olyanokhoz.
ÚTMUTATÓ
2071 egy "plants" nevű könyvtár, amelynek tulajdonosi csoportja a "sultan", tulajdonosa pedig a "root".
Az "így-és-úgy" nevű felhasználó elsősorban az "így-úgy" csoporthoz, másodsorban a "szultána" csoporthoz tartozik. A "so-and-so" létrehoz egy "mango" nevű új könyvtárat a "plants" könyvtárban. Az új "mango" nevű könyvtárat birtokló csoport a "sultano" kifejezést örökli.
A GUID nélkül a tulajdonosi csoport "így és olyan" lett volna.
[ ilyen-és-úgy @ host ~ ] $ csoportok ilyen
-és-úgy- úgy : ilyen-és-úgy szultán
[ so-and-so @ host ~ ] $ stat -c "%a %U:%G %n" ~/plants/
2770 so-and-so:sultan /home/so-and-so/plants/
[ so-so @ host ~ ] $ mkdir ~/plants/mango
[ so-so @ host ~ ] $ touch ~/plants/.mango
[ so-and-so @ host ~ ] $ stat -c "%U:%G %n" ~/plants/mango/
so-and -so:sultan /home/so-and-so/plants/mango/
[ so-and-so @ host ~ ] $ stat -c "%U:%G %n" ~/plants/.mango
so-and- so:sultan /home/so-and-so/plants/.mango
[ so-so @ host ~ ] $ érintési teszt
[ so-and-so @ host ~ ] $ stat -c "%U:%G %n" ~/test
so-and-so:so-and-so /home/so-and-so/test