setuid - setuid
De Unix adgangsrettigheder flag setuid og setgid (forkortelse for "sæt bruger-id" og "sæt gruppe-ID") giver brugerne mulighed for at køre en eksekverbar med filsystemet på den eksekverbare ejer eller gruppe lovgivning, og til at ændre adfærd i mapper. De bruges ofte til at tillade brugere på et computersystem at køre programmer med midlertidigt forhøjede privilegier for at udføre en bestemt opgave. Mens de forudsatte bruger-id eller gruppe-id-rettigheder ikke altid er hævet, er de i det mindste specifikke.
Flagene setuidog setgider nødvendige for opgaver, der kræver forskellige privilegier, end hvad brugeren normalt får, såsom evnen til at ændre systemfiler eller databaser for at ændre deres loginadgangskode. Nogle af de opgaver, der kræver yderligere privilegier, er muligvis ikke umiddelbart indlysende, f.eks. pingKommandoen, som skal sende og lytte efter kontrolpakker på et netværksinterface.
Effekter
Den setuidog setgidflag har forskellige effekter, afhængigt af, om de anvendes til en fil, til en mappe eller binær eksekverbar eller ikke binær eksekverbar fil. Den setuidog setgidflag har en effekt kun på binære eksekverbare filer og ikke på scripts (f.eks Bash, Perl, Python).
Når den er indstillet til en eksekverbar fil
Når setuideller setgidattributterne er indstillet på en eksekverbar fil, vil alle brugere, der er i stand til at udføre filen, automatisk udføre filen med rettighederne til filens ejer (almindeligvis rod ) og / eller filens gruppe afhængigt af det indstillede flag. Dette giver systemdesigneren tilladelse til at køre pålidelige programmer, som en bruger ellers ikke fik lov til at udføre. Disse er måske ikke altid indlysende. For eksempel kan ping- kommandoen have brug for adgang til netværksrettigheder, som en normal bruger ikke kan få adgang til; derfor kan det gives setuid-flag for at sikre, at en bruger, der har behov for at pinge et andet system, kan gøre det, selvom deres egen konto ikke har det nødvendige privilegium til at sende pakker.
Af sikkerhedsmæssige årsager er den kaldende bruger normalt forbudt af systemet fra at ændre den nye proces på nogen måde, såsom ved anvendelse af ptrace, LD_LIBRARY_PATHeller sende signaler til det, at udnytte den hævede privilegium, selvom signaler fra terminalen stadig vil blive accepteret.
Den setuidog setgidbits er normalt sat med kommandoen chmodved at indstille oktal cifrede high-order til 4 til setuideller 2 til setgid. " " indstiller både og bits (4 + 2 = 6), hvilket gør filen læs / skriv / eksekverbar for ejeren (7) og eksekverbar af gruppen (første 1) og andre (anden 1). Når en anden bruger end ejeren udfører filen, kører processen med bruger- og gruppetilladelser, der er angivet af den af ejeren. For eksempel, hvis filen ejes af bruger og gruppe , kører den som uanset hvem der udfører filen.
chmod 6711 filesetuidsetgidrootwheelroot:wheel
De fleste implementeringer af chmodkommandoen understøtter også mere detaljerede, symbolske argumenter for at indstille disse bits. Den fortrinsvis finere form vises i demonstrationen nedenfor som " chmod ug+s"
Sikkerhedspåvirkning
Selvom setuidfunktionen i mange tilfælde er meget nyttig, kan dens ukorrekte anvendelse udgøre en sikkerhedsrisiko, hvis setuidattributten tildeles eksekverbare programmer, der ikke er omhyggeligt designet. På grund af potentielle sikkerhedsproblemer ignorerer mange operativsystemer setuidattributten, når de anvendes på eksekverbare shell-scripts .
Tilstedeværelsen af setuideksekverbare filer forklarer, hvorfor chrootsystemopkaldet ikke er tilgængeligt for ikke- root- brugere på Unix. Se begrænsningerchroot for flere detaljer.
Når det er indstillet til et bibliotek
Indstilling af setgidtilladelsen til en mappe (" chmod g+s") får nye filer og underkataloger, der er oprettet i den, til at arve dens gruppe-id snarere end det primære gruppe-id for den bruger, der oprettede filen (ejer-id'et påvirkes aldrig, kun gruppe-id'et) .
- Nyoprettede underkataloger arver
setgidbiten. Dette muliggør således et delt arbejdsområde for en gruppe uden ulejligheden ved at kræve, at gruppemedlemmer eksplicit ændrer deres nuværende gruppe, før de opretter nye filer eller mapper. - påvirker kun gruppe-id'et for nye filer og underkataloger, der er oprettet, efter at
setgidbit er indstillet, og anvendes ikke på eksisterende enheder. - påvirker ikke gruppe-ID for de filer, der oprettes et andet sted og flyttes til det pågældende bibliotek. Filen fortsætter med at bære det gruppe-id, der blev foretaget, da og hvor den blev oprettet.
Indstilling af setgidbit på eksisterende underkataloger skal udføres manuelt med en kommando som f.eksfind /path/to/directory -type d -exec chmod g+s '{}' \;
Den setuidtilladelse sæt på en mappe ignoreres på de fleste UNIX og Linux- systemer. Men FreeBSD kan konfigureres til at fortolke setuidpå en måde, der svarer til setgid, i hvilket tilfælde det tvinger alle filer og undermapper oprettes i en mappe, der ejes af denne mappe ejer - en simpel form for arv. Dette er generelt ikke nødvendigt på de fleste systemer, der stammer fra BSD , da kataloger som standard behandles som om deres setgidbit altid er indstillet, uanset den aktuelle værdi. Som det er angivet i open(2), "Når en ny fil oprettes, får den gruppen af det bibliotek, der indeholder den."
Eksempler
Kontrol af tilladelser
Tilladelser til en fil kan kontrolleres i oktal og / eller alfabetisk form med kommandolinjeværktøjet stat
[ torvalds ~ ] $ stat -c "%a %A" ~/test/
1770 drwxrwx--T
SUID
4701 på en eksekverbar fil, der ejes af 'root' og gruppen 'root'
En bruger ved navn 'thompson' forsøger at udføre filen. Den eksekverbare tilladelse for alle brugere er indstillet ('1'), så 'thompson' kan udføre filen. Filejeren er 'root', og SUID-tilladelsen er indstillet ('4') - så filen udføres som 'root'.
Årsagen til, at en eksekverbar køres som 'root', er, så den kan ændre bestemte filer, som brugeren normalt ikke ville have lov til, uden at give brugeren fuld rootadgang.
En standardbrug af dette kan ses med den /usr/bin/passwdbinære fil. /usr/bin/passwdskal ændre, /etc/passwdog /etc/shadowsom gemmer kontooplysninger og adgangskode hashes for alle brugere, og disse kan kun ændres af brugerens 'root'.
[ thompson ~ ] $ stat -c "%a %U:%G %n" /usr/bin/passwd
4701 root:root /usr/bin/passwd
[ thompson ~ ] $ passwd
passwd: Changing password for thompson
Ejeren af processen er ikke den bruger, der kører den eksekverbare fil, men ejeren af den eksekverbare fil
SGID
2770 på et bibliotek med navnet 'musik', der ejes af brugeren 'root' og gruppen 'ingeniører'
En bruger ved navn 'torvalds', der primært tilhører gruppen 'torvalds', men sekundært til gruppen 'ingeniører' opretter et bibliotek med navnet 'elektronisk' under biblioteket med navnet 'musik'. Gruppeejerskabet af det nye bibliotek med navnet 'elektronisk' arver 'ingeniører.' Dette er det samme, når du opretter en ny fil med navnet 'imag.txt'
Uden SGID ville gruppeejerskabet af den nye mappe / fil have været 'torvalds', da det er den primære gruppe af brugernes 'torvalds'.
[ torvalds ~ ] $ groups torvalds
torvalds : torvalds engineers
[ torvalds ~ ] $ stat -c "%a %U:%G %n" ./music/
2770 root:engineers ./music/
[ torvalds ~ ] $ mkdir ~/music/electronic
[ torvalds ~ ] $ stat -c "%U:%G %n" ./music/electronic/
torvalds:engineers ./music/electronic/
[ torvalds ~ ] $ echo 'NEW FILE' > ./music/imagine.txt
[ torvalds ~ ] $ stat -c "%U:%G %n" ./music/imagine.txt
torvalds:engineers ./music/imagine.txt
[ torvalds ~ ] $ touch ~/test
[ torvalds ~ ] $ stat -c "%U:%G %n" ~/test
torvalds:torvalds ~/test
Sticky bit
1770 på et bibliotek med navnet 'videospil', der ejes af brugeren 'torvalds' og gruppen 'ingeniører'.
En bruger ved navn 'torvalds' opretter en fil med navnet 'tekken' under mappen med navnet 'videospil'. En bruger ved navn 'wozniak', som også er en del af gruppen 'ingeniører', forsøger at slette filen med navnet 'tekken', men det kan han ikke, da han ikke er ejeren.
Uden klæbrig bit kunne 'wozniak' have slettet filen, fordi kataloget med navnet 'videospil' tillader læsning og skrivning af 'ingeniører'. En standardbrug af dette kan ses i /tmpmappen.
[ torvalds /home/shared/ ] $ groups torvalds
torvalds : torvalds engineers
[ torvalds /home/shared/ ] $ stat -c "%a %U:%G %n" ./videogames/
1770 torvalds:engineers ./videogames/
[ torvalds /home/shared/ ] $ echo 'NEW FILE' > videogames/tekken
[ torvalds /home/shared/ ] $ su - wozniak
Password:
[ wozniak ~/ ] $ groups wozniak
wozniak : wozniak engineers
[ wozniak ~/ ] $ cd /home/shared/videogames
[ wozniak /home/shared/videogames/ ] $ rm tekken
rm: cannot remove ‘tekken’: Operation not permitted
Sticky bit med SGID
3171 på et bibliotek med navnet 'blog' ejet af gruppen 'ingeniører' og brugeren 'root'
En bruger ved navn 'torvalds', der primært hører til gruppen 'torvalds', men sekundært til gruppen 'ingeniører' opretter en fil eller mappe med navnet 'tanker' inde i kataloget 'blog'. En bruger ved navn 'wozniak', der også tilhører gruppen 'ingeniører' kan ikke slette, omdøbe eller flytte filen eller biblioteket med navnet 'tanker', fordi han ikke er ejeren, og den sticky bit er indstillet. Men hvis 'tanker' er en fil, kan 'wozniak' redigere den.
Sticky bit har den endelige beslutning. Hvis sticky bit og SGID ikke var indstillet, kunne brugeren 'wozniak' omdøbe, flytte eller slette filen med navnet 'tanker', fordi biblioteket med navnet 'blog' tillader læsning og skrivning efter gruppe, og wozniak tilhører gruppen, og standard 0002 umask gør det muligt at redigere nye filer efter gruppe. Sticky bit og SGID kunne kombineres med noget som en skrivebeskyttet umask eller en append-attribut.
[ torvalds /home/shared/ ] $ groups torvalds
torvalds : torvalds engineers
[ torvalds /home/shared/ ] $ stat -c "%a %U:%G %n" ./blog/
3171 root:engineers ./blog/
[ torvalds /home/shared/ ] $ echo 'NEW FILE' > ./blog/thoughts
[ torvalds /home/shared/ ] $ su - wozniak
Password:
[ wozniak ~/ ] $ cd /home/shared/blog
[ wozniak /home/shared/blog/ ] $ groups wozniak
wozniak : wozniak engineers
[ wozniak /home/shared/blog/ ] $ stat -c "%a %U:%G %n" ./thoughts
664 torvalds:engineers ./thoughts
[ wozniak /home/shared/blog/ ] $ rm thoughts
rm: cannot remove ‘thoughts’: Operation not permitted
[ wozniak /home/shared/blog/ ] $ mv thoughts /home/wozniak/
mv: cannot move ‘thoughts’ to ‘/home/wozniak/thoughts’: Operation not permitted
[ wozniak /home/shared/blog/ ] $ mv thoughts pondering
mv: cannot move ‘thoughts’ to ‘pondering’: Operation not permitted
[ wozniak /home/shared/blog/ ] $ echo 'REWRITE!' > thoughts
[ wozniak /home/shared/blog/ ] $ cat thoughts
REWRITE!
Sikkerhed
Udviklere designer og implementerer programmer, der bruger denne bit på eksekverbare filer omhyggeligt for at undgå sikkerhedssårbarheder, herunder bufferoverskridelser og stiinjektion . Vellykkede bufferoverløbsangreb på sårbare applikationer giver angriberen mulighed for at udføre vilkårlig kode under rettighederne til den udnyttede proces. I tilfælde af at en sårbar proces bruger setuidbit til at køre som root, udføres koden med root-rettigheder, hvilket faktisk giver angriberens root-adgang til det system, som den sårbare proces kører på.
Af særlig betydning i tilfælde af en setuidproces er processens miljø . Hvis miljøet ikke rengøres ordentligt af en privilegeret proces, kan dets adfærd ændres af den uprivilegerede proces, der startede det. For eksempel var GNU libc på et tidspunkt sårbar over for en exploit- brug setuidog en miljøvariabel, der tillod at udføre kode fra ikke-tillidte delte biblioteker .
Historie
Den setuidlidt blev opfundet af Dennis Ritchie og indgår i su. Hans arbejdsgiver, dengang Bell Telephone Laboratories , ansøgte om patent i 1972; patentet blev tildelt i 1979 som patentnummer US 4135240 "Beskyttelse af datafilens indhold". Patentet blev senere offentliggjort .
Se også
Referencer
eksterne links
- Chen, Hao; Wagner, David ; og Dean, Drew; Setuid demystificeret (pdf)
- Tsafrir, Dan; Da Silva, Dilma ; og Wagner, David; Det skumle spørgsmål om ændring af procesidentitet: Revidering af Setuid demystificeret (pdf)
- Pollock, Wayne; Unix fil- og katalogtilladelser og -tilstande