Setuid, setgid og klissete bit forklart

Setuid, setgid og klissete bit forklart
Linux har 3 typer tilgang til filer og kataloger: Lesing, skriving og utførelsestillatelser.

Lesetillatelse gir brukere tilgang til å lese filer mens du skriver tillatelser lar brukere redigere eller fjerne filer, utførelsestillatelser lar dem kjøre filer.

Disse tillatelsene kan brukes med forskjeller for fileieren, brukere som tilhører filens gruppe, og alle brukere (ikke eieren eller gruppebrukere).

Bit Setuid, Setgid og Sticky lar deg implementere ytterligere begrensninger eller privilegier uten å endre tillatelsestabellen.

Vanlige Linux -tillatelser ble dypt forklart ved Linux -tillatelser forklart, en anbefalt lesning før du fortsatte med denne opplæringen. Den nåværende opplæringen fokuserer på Flags Setuid, Setgid og Sticky for å "arve" fileieren eller gruppetillatelsene til brukere med begrenset tilgang og forhindre at ikke-privilegerte brukere fjerner filer de ikke eier.

Forstå biten setuid:

Følgende skjermbilde viser innholdet i katalogen Linuxhintsetuid og filtillatelsene:

Som du kan se, tilhører alle filer brukeren og gruppen Linuxhint; filen opplæringen.tekst har lest og skrevet tillatelser for eieren, lesetillatelser for brukere av samme gruppe, og ingen tillatelser i det hele tatt for andre brukere.

Hvis en annen bruker enn fileieren, som ikke tilhører gruppen, prøver å lese filen, vil han mislykkes på grunn av mangelen på tillatelser for alle brukere eller andre brukere.

Følgende skjermbilde viser brukeren Torvalds uten hell prøvde å få tilgang til opplæringen.tekst fil.

La oss nå anta brukeren Linuxhint ønsker å holde opplæringen.TXT begrenset mens de tillater brukere å lese den bare gjennom en spesifikk applikasjon. Dette kan oppnås ved hjelp av flagget setuid.

Med andre ord, brukeren Torvalds vil ikke kunne lese filen opplæringen.tekst. Likevel vil han kjøre leser-eid av brukeren Linuxhint, arver hans tillatelser under utførelsesprosessen. Dette er mulig hvis eieren legger til setuid Litt til filens tillatelsestabell, instruere filen om å alltid behandles som av eieren og med eierrettigheter selv om en annen bruker utføres av en annen bruker Torvalds.

MERK: Du kan bruke C -koden nedenfor til å reprodusere følgende eksempler. Kompilere løping CC -kode.C -o leser

Leserapplikasjonskode:

#inkludere
#include // for exit () -funksjon
int main ()
Char C [1000];
Fil *fptr;
if ((fptr = fopen ("tutorial.txt "," r ")) == null)
printf ("Feil! Filen kan ikke åpnes.");
// program går ut hvis filpekeren returnerer null.
Avslutt (1);

søvn (5);
// leser tekst til Newline er oppstått
fscanf (fptr, "%[^\ n]", c);
printf ("Data fra filen: \ n%s", c);
fClose (FPTR);
retur 0;

La oss se hva som skjer hvis brukeren Torvalds, som har tillatelse til å kjøre applikasjonen, før brukeren går leser, Utfør leser Før Linuxhint bruker setuidflagget.

Som du kan se, klarte Torvalds å kjøre leseren, et C -program designet for å lese opplæringen.txt med følgende tillatelsestabell, men leser Kunne ikke gi ham tilgang til opplæringen.tekst fordi Torvalds har ikke tillatelser til å lese den.

Leser Tillatstabell vises nedenfor:

-RWXR-XR-X 1 Linuxhint Linuxhint Reader

La oss nå se hva som skjer når Linuxhint legger setuidflagget til leser Tillatelser Tabell ved å kjøre:

chmod u+s leser

Hvis du løper ls -l , Du vil legge merke til tillatelsestabellen endret, og programnavnet vises i rødt, og varsler deg om mulig risiko. Det nye tillatelsestabellen ser slik ut:

-RWSR-XR-X

Den nye S Jeg fremhevet i Blue viser at filen har setuidflagget; Hver gang filen blir utført, vil prosessen tilhøre fileieren uavhengig av hvem som utfører programmet. Siden eieren vil utføre filen før systemet, vil utførelsen arve eierens tillatelser. Det er derfor nå, etter Linuxhint Lagt til Setuid -flagget, brukeren Torvalds Må kunne lese opplæringen.txt gjennom leser.

MERK: Torvalds kan kjøre leser Fordi alle brukere har utførelsesrettigheter; hvis Linuxhint Fjerner utførelsestillatelser for alle brukere, Torvalds vil ikke kunne kjøre det.

De setuid FLAG definerer filen som av eieren, og brukeren som utfører den vil arve eiertillatelser, men Setuid definerer ikke hvem som kan utføre filen.

Som du ser klarte Torvalds å lese “Data fra filen:

Du skal ikke kunne lese dette ”.

Hvis jeg kjører skriptet, kjører jeg følgende PS -kommando, vil du se en forskjell mellom den virkelige brukeren (RUSER) og den effektive brukeren (brukeren) i prosessen 4332 (leser).

PS -AO PID, UID, RUSER, bruker, rgroup, egruppe, kommando

Skjermbildet over viser til tross for den virkelige brukeren som kjører leser er torvalds eller en annen bruker, filen blir alltid behandlet som av Linuxhint, med hans tillatelser, og det er derfor Torvalds bare kan se filen gjennom applikasjonen.

Setuid -flagget kan fjernes ved å løpe:

chmod u-s

Forstå biten setgid:

Setgid ligner Setuid, men i stedet for å endre brukeren som behandler filen, erstatter den den effektive gruppen for filegruppen, og gir tilgang i henhold til gruppen tillatelser.

Hvis bit -setgiden blir brukt på en katalog, vil alle filer som er opprettet i katalogen tilhøre katalogens gruppe.

Følgende skjermbilde viser at Torvalds ikke har tillatelse til å lese opplæringen.txt, bare eieren og gruppen kan lese filen. Selv med en leser, Torvalds kan ikke lese filen fordi han ikke har noen tillatelser, og ingen setuidbit ble lagt til.

La oss se hva som skjer etter at Linuxhint legger til Setgid:

CHMOD G+S -leser


-RWXR-SR-X: Som du kan se i tillatelsestabellen, er nå S i gruppekolonnen, noe som betyr at når programmet blir utført, vil det alltid kjøre med sine egne gruppeprivilegier.

Så la oss se hva som skjer når Torvalds prøver å få tilgang til opplæringen.TXT igjen ved hjelp av leser:

Torvalds klarte å lese opplæringen.tekst; La oss se hva PS -kommandoen viser på leserens prosess:

PS -AO PID, UID, RUSER, bruker, rgroup, egruppe, kommando

Som du kan se i prosess 6713, er brukeren som kjører filen Torvalds, men den effektive gruppen er Linuxhint, filens gruppe; Derfor kunne Torvalds få tilgang til opplæringen.txt med Readers gruppetillatelser.

Setgid -biten kan fjernes ved å løpe:

chmod g-s

Forstå den klissete biten:

En annen tillatelsesbit er den klissete biten, som, hvis definert, forhindrer ikke-privilegerte brukere i å fjerne innhold. Hvis den klissete biten brukes, kan bare eieren eller roten fjerne filer, men ikke alle brukere, selv om de har skrivetillatelser.

Følgende eksempel viser at brukeren Linuxhint legger den klissete biten til gjeldende katalog:

chmod +t .

DRWXR-XR-T: Som du ser nå, er det en T på slutten av tillatelsesbordet til Linuxhintsetuid katalog. Dette betyr at brukere ikke kan fjerne filer de ikke eier i katalogen, selv om de har skrivetillatelser.

Følgende skjermbilde viser tillatelser for en fil som heter “noe”Under katalogen Linuxhintsetuid med den spesielle klissete biten:

Som du kan se, til tross for at du har skrivetillatelser både på katalogen og på filen, kan ikke Torvalds fjerne filen noe:

Jeg håper du fant denne opplæringen på setuid, setgid og klissete litt nyttig. Fortsett å følge Linuxhint for flere Linux -tips og opplæringsprogrammer.