setuid - setuid

De Unix accessrättigheter flaggor setuid och setgid (förkortning för "set användar-ID" och "set grupp-ID") tillåter användare att köra en körbar med filsystembehörigheterna för den körbara ägare eller grupp respektive och för att ändra beteende i kataloger. De används ofta för att tillåta användare på ett datorsystem att köra program med tillfälligt förhöjda behörigheter för att utföra en specifik uppgift. Medan de antagna användar-ID- eller grupp-ID-behörigheterna inte alltid är förhöjda, är de åtminstone specifika.

Flaggorna setuidoch setgidbehövs för uppgifter som kräver andra behörigheter än vad användaren normalt ges, till exempel möjligheten att ändra systemfiler eller databaser för att ändra sitt inloggningslösenord. Vissa av de uppgifter som kräver ytterligare behörigheter kanske inte är uppenbara omedelbart, till exempel pingkommandot, som måste skicka och lyssna efter kontrollpaket i ett nätverksgränssnitt.

Effekter

Den setuidoch setgidflaggor har olika effekter beroende på om de tillämpas på en fil till en katalog eller binär körbar eller icke binär körbar fil. Den setuidoch setgidflaggor har en effekt endast på binära körbara filer och inte skript (t.ex. Bash, Perl, Python).

När den är inställd på en körbar fil

När setuideller setgidattributen är inställda på en körbar fil kommer alla användare som kan köra filen automatiskt att köra filen med rättigheterna för filens ägare (vanligtvis rot ) och / eller filens grupp, beroende på flagguppsättningen. Detta gör det möjligt för systemdesignern att tillåta pålitliga program att köras som en användare annars inte skulle kunna utföra. Dessa kanske inte alltid är uppenbara. Till exempel kan ping- kommandot behöva åtkomst till nätverksbehörigheter som en vanlig användare inte kan komma åt; därför kan det ges setuid-flaggan för att säkerställa att en användare som behöver pinga ett annat system kan göra det, även om deras eget konto inte har den behörighet som krävs för att skicka paket.

Av säkerhetsskäl, är det anropande användaren vanligtvis förbjudet av systemet från att ändra den nya processen på något sätt, såsom genom användning av ptrace, LD_LIBRARY_PATHeller att sända signaler till den, för att utnyttja den upphöjda privilegium, även om signaler från terminalen fortfarande kommer att accepteras.

Den setuidoch setgidbitarna normalt in med kommandot chmodgenom inställning av hög ordning oktalt siffra till 4 för setuideller 2 för setgid. " " ställer in både bitarna och bitarna (4 + 2 = 6), vilket gör filen läs / skriv / körbar för ägaren (7) och körbar av gruppen (första 1) och andra (andra 1). När en annan användare än ägaren kör filen, körs processen med användar- och gruppbehörigheter som har fastställts av dess ägare. Till exempel, om filen ägs av användare och grupp , körs den oavsett vem som kör filen. chmod 6711 filesetuidsetgidrootwheelroot:wheel

De flesta implementeringar av chmodkommandot stöder också mer detaljerade, symboliska argument för att ställa in dessa bitar. Det företrädesvis finkornade läget visas i demonstrationen nedan som " chmod ug+s"

Säkerhetspåverkan

Även om setuidfunktionen är mycket användbar i många fall kan dess felaktiga användning utgöra en säkerhetsrisk om setuidattributet tilldelas körbara program som inte är noggrant utformade. På grund av potentiella säkerhetsproblem ignorerar många operativsystem setuidattributet när det tillämpas på körbara skalskript .

Närvaron av setuidkörbara filer förklarar varför chrootsystemanropet inte är tillgängligt för icke- root- användare på Unix. Se begränsningarchroot för mer information.

När den är inställd på en katalog

Att ställa in setgidbehörigheten i en katalog (" chmod g+s") får nya filer och underkataloger som skapas inom den att ärva dess grupp-ID , snarare än det primära grupp-ID för användaren som skapade filen (ägare-ID: t påverkas aldrig, bara grupp-ID) .

  1. Nyskapade underkataloger ärver setgidbiten. Således möjliggör detta en delad arbetsyta för en grupp utan besväret att kräva att gruppmedlemmar uttryckligen ändrar sin nuvarande grupp innan de skapar nya filer eller kataloger.
  2. påverkar endast grupp-ID för nya filer och underkataloger som skapats efter att setgidbiten har ställts in och tillämpas inte på befintliga enheter.
  3. påverkar inte grupp-ID för filerna som skapas någon annanstans och flyttas till katalogen i fråga. Filen fortsätter att bära grupp-ID som genomfördes när och var den skapades.

Att ställa in setgidbiten på befintliga underkataloger måste göras manuellt med ett kommando somfind /path/to/directory -type d -exec chmod g+s '{}' \;

Det setuidtillstånd ligger på en katalog ignoreras på de flesta UNIX och Linux- system. Men FreeBSD kan konfigureras att tolka setuidpå ett sätt som liknar setgid, i vilket fall det tvingar alla filer och underkataloger skapas i en katalog att ägas av den katalogen ägare - en enkel form av arv. Detta behövs vanligtvis inte på de flesta system som härrör från BSD , eftersom kataloger som standard behandlas som om deras setgidbit alltid är inställd, oavsett det verkliga värdet. Som anges i open(2), "När en ny fil skapas ges den gruppen i katalogen som innehåller den."

Exempel

Kontrollerar behörigheter

Behörigheter för en fil kan kontrolleras i oktal form och / eller alfabetisk med kommandoradsverktyget stat

[ torvalds ~ ] $ stat -c "%a %A" ~/test/
1770 drwxrwx--T

SUID

4701 på en körbar fil som ägs av 'root' och gruppen 'root'

En användare med namnet 'thompson' försöker köra filen. Den körbara behörigheten för alla användare är inställd ("1") så "thompson" kan köra filen. Filägaren är "root" och SUID-behörigheten är inställd ("4") - så filen körs som "root".

Anledningen till att en körbar körs som 'root' är så att den kan ändra specifika filer som användaren normalt inte skulle ha tillåtelse, utan att ge användaren full root-åtkomst.

En standardanvändning av detta kan ses med den /usr/bin/passwdbinära filen. /usr/bin/passwdmåste modifieras /etc/passwdoch /etc/shadowsom lagrar kontoinformation och lösenordshash för alla användare, och dessa kan endast ändras av användarens "root".

[ thompson ~ ] $ stat -c "%a %U:%G %n" /usr/bin/passwd
4701 root:root /usr/bin/passwd

[ thompson ~ ] $ passwd
passwd: Changing password for thompson

Ägaren av processen är inte användaren som kör den körbara filen utan ägaren av den körbara filen

SGID

2770 i en katalog med namnet "musik" som ägs av användaren "root" och gruppen "ingenjörer"

En användare som heter 'torvalds' som tillhör främst gruppen 'torvalds' men sekundärt till gruppen 'ingenjörer' skapar en katalog med namnet 'elektronisk' under katalogen 'musik'. Gruppägarskapet för den nya katalogen med namnet 'elektronisk' ärver 'ingenjörer.' Det här är detsamma när du skapar en ny fil med namnet 'imagine.txt'

Utan SGID skulle gruppägarskapet för den nya katalogen / filen ha varit 'torvalds' eftersom det är den primära gruppen av användarnas '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

Klibbig bit

1770 i en katalog med namnet "videospel" som ägs av användaren "torvalds" och gruppen "ingenjörer".

En användare med namnet 'torvalds' skapar en fil med namnet 'tekken' under katalogen 'videospel'. En användare med namnet 'wozniak', som också ingår i gruppen 'ingenjörer', försöker ta bort filen med namnet 'tekken' men det kan han inte, eftersom han inte är ägaren.

Utan klibbig bit kunde 'wozniak' ha tagit bort filen, eftersom katalogen 'videospel' tillåter läsning och skrivning av 'ingenjörer'. En standardanvändning av detta 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 i en katalog med namnet "blogg" som ägs av gruppen "ingenjörer" och användaren "root"

En användare med namnet 'torvalds' som tillhör främst gruppen 'torvalds' men sekundärt till gruppen 'ingenjörer' skapar en fil eller katalog med namnet 'tankar' i katalogen 'blogg'. En användare med namnet 'wozniak' som också tillhör gruppen 'ingenjörer' kan inte ta bort, byta namn på eller flytta filen eller katalogen med namnet 'tankar', eftersom han inte är ägare och den klibbiga biten är inställd. Men om "tankar" är en fil kan "wozniak" redigera den.

Sticky bit har det slutliga beslutet. Om klibbig bit och SGID inte hade ställts in kunde användaren 'wozniak' byta namn på, flytta eller ta bort filen med namnet 'tankar' eftersom katalogen med namnet 'blogg' tillåter läsning och skrivning efter grupp, och wozniak tillhör gruppen och standard 0002 umask tillåter att nya filer redigeras i grupp. Sticky bit och SGID kan kombineras med något som en skrivskyddad 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!

säkerhet

Utvecklare designar och implementerar program som använder denna bit på körbara filer noggrant för att undvika säkerhetsproblem inklusive buffertöverskridanden och sökvägsinjektion . Framgångsrika buffertöverskridande attacker på utsatta applikationer gör det möjligt för angriparen att köra godtycklig kod under rätten till den process som utnyttjas. I händelse av att en sårbar process använder setuidbiten för att köras som root, kommer koden att köras med root-behörigheter, vilket i själva verket ger angriparens root-åtkomst till systemet där den sårbara processen körs.

Av särskild vikt vid en setuidprocess är processens miljö . Om miljön inte rengörs ordentligt av en privilegierad process kan dess beteende ändras av den okontrollerade processen som startade den. Till exempel GNU libc var vid ett tillfälle sårbar för en utnyttja hjälp setuidoch en miljövariabel som tillät exekvera kod från opålitliga delade bibliotek .

Historia

Den setuidbit uppfanns av Dennis Ritchie och ingår i su. Hans arbetsgivare, då Bell Telephone Laboratories , ansökte om patent 1972; patentet beviljades 1979 som patentnummer US 4135240  "Skydd av datafilsinnehåll". Patenten placerades senare i det offentliga området .

Se även

Referenser

externa länkar