Öltöny

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2018. július 1-jén felülvizsgált verziótól ; az ellenőrzések 3 szerkesztést igényelnek .

A setuid és a setgid (a felhasználói azonosító beállítása végrehajtáskor  és a csoportazonosító beállítása végrehajtáskor  ) Unix -engedélyjelzők,  amelyek lehetővé teszik a felhasználók számára, hogy futtatható fájlokat futtassanak a végrehajtható fájl tulajdonosának vagy csoportjának jogaival.  

Általános információk

Unix - szerű rendszereken az alkalmazás a megadott alkalmazást elindító felhasználó jogaival fut. Ez további biztonságot nyújt, mivel a felhasználói folyamatok nem kaphatnak írási hozzáférést olyan fontos rendszerfájlokhoz, mint például az /etc/passwd , amely a root tulajdonában van .

Ha a végrehajtható fájlban a suid bit van beállítva, akkor a program végrehajtásakor automatikusan megváltoztatja az "effective userID"-t a fájl tulajdonosának azonosítójára. Ez azt jelenti, hogy függetlenül attól, hogy ki futtatja ezt a programot, végrehajtáskor a fájl tulajdonosának jogai vannak.

Történelem

A suid bitet Dennis Ritchie találta fel, és az AT&T szabadalmaztatta az Egyesült Államokban 1979-ben. Később a 4135240 számú „Adatfájlok tartalmának védelme” szabadalmat tették közzé.

setuid és setgid fájlokon

Ha a set u id attribútum be van állítva egy fájlon , akkor a fájlt futtató normál felhasználó a fájl tulajdonosának (általában root felhasználónak ) minősül a futó folyamaton belül . Az emelés után egy alkalmazás olyan feladatokat hajthat végre, amelyeket egy normál felhasználó nem tudna elvégezni. A rendszer megakadályozza, hogy a felhasználó módosítsa az új folyamatot. A versenyfeltételek lehetősége miatt sok operációs rendszer figyelmen kívül hagyja a shell szkriptek set attribútumait. .

Bár a set u id attribútum sok esetben nagyon hasznos, a visszaélés biztonsági kockázatot jelenthet, ha az attribútumot nem gondosan megtervezett végrehajtható fájlhoz rendelik . A felhasználók kihasználhatják az alulfejlett programok sebezhetőségét, hogy magasabb jogosultságokat szerezzenek, vagy véletlenül trójai programokat indítsanak el .

A set g id attribútum beállítása csoportemelkedést ad .

A setuid és setgid attribútumokat általában a chmod paranccsal állítjuk be, az első bitpárt 4 -re (set u id) vagy 2 -re (set g id) állítva. A parancs chmod 6711mindkét bitpárt egyszerre állítja be (4+2=6). Karakter argumentumokkal is beállíthatja ezeket a biteket a chmod ug+s.

setuid a könyvtárakon

A könyvtárakhoz beállított setuid és setgid biteknek nagyon eltérő jelentése van.

A beállított g id bit egy könyvtárban ( chmod g+s) azt eredményezi , hogy csak az új könyvtárak és a benne létrehozott fájlok öröklik az adott könyvtár csoportazonosítóját a fájlt létrehozó felhasználó csoportazonosítója helyett. Az új alkönyvtárak is öröklik a setgid bitet. Ez lehetővé teszi, hogy megosztott munkaterületet hozzon létre egy csoport számára anélkül, hogy a csoporttagoknak kifejezetten módosítaniuk kellene jelenlegi csoportjukat új fájlok és könyvtárak létrehozásához.

Az öröklődés csak az új fájlokhoz és könyvtárakhoz van beállítva. A már meglévő fájloknak és könyvtáraknak manuálisan kell beállítaniuk ezt a bitet, például:

megkeresi a /könyvtár /útvonalát -type d -exec chmod g+s {} \;

Vegye figyelembe azt is, hogy egy ilyen csoport összes felhasználója esetén az umask -ot az alapértelmezett 0022-ről 0012-re kell módosítani, különben az új fájlok/mappák nem rendelkeznek írási (w) jogosultsággal a csoport számára.

A könyvtárakhoz beállított setuid bitet a Unix legtöbb verziója figyelmen kívül hagyja .

setuid és setgid nem végrehajtható fájlokon

A suid/sgid bitek beállítása nem végrehajtható fájlokon általában értelmetlen.

Példa

[ bob@foo ] $ cat /etc/passwd alice:x:1007:1007::/home/alice:/bin/bash bob:x:1008:1008::/home/bob:/bin/bash [ bob@foo ] $ macska printid.c #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> int main ( void ) { printf ( "Valódi UID\t= %d\n" , getuid () ) ; printf ( "Effective UID\t= %d\n" , geteuid ()) ; printf ( "Valódi GID\t= %d\n" , getgid ()) ; printf ( "Hatásos GID\t= %d\n" , getegid ()) ; return EXIT_SUCCESS ; } [ bob@foo ] $ gcc -Wall printid.c -o printid [ bob@foo ] $ chmod ug+s printid [ bob@foo ] $ su alice Jelszó: [ alice@foo ] $ ls -l -rwsr-sr-x 1 bob bob 6944 2007-11-06 10:22 printid [ alice @foo ] $ ./printid Valódi UID = 1007 Hatékony UID = 1008 Valódi GID = 1007 Hatékony GID = 1008 [ alice@foo ] $

Biztonság

A setuid bitet tartalmazó program „potenciálisan veszélyes”. "Normál" esetben nem engedi meg a normál felhasználónak, hogy olyan dolgot tegyen, ami meghaladja a hatáskörét (például a passwd program csak a saját jelszavának megváltoztatását teszi lehetővé). De még egy ilyen program kisebb hibája is oda vezethet, hogy a támadó olyan egyéb műveletek végrehajtására kényszerítheti, amelyeket a program szerzője nem biztosított.

Lásd még