setuid - setuid
De Unix- toegangsrechtenvlaggen setuid en setgid ( afkorting van "set user ID" en "set group ID") stellen gebruikers in staat een uitvoerbaar bestand uit te voeren met de bestandssysteemmachtigingen van respectievelijk de eigenaar of groep van het uitvoerbare bestand en om het gedrag in mappen te veranderen. Ze worden vaak gebruikt om gebruikers op een computersysteem in staat te stellen programma's uit te voeren met tijdelijk verhoogde rechten om een specifieke taak uit te voeren. Hoewel de veronderstelde gebruikers-ID of groeps-ID-privileges niet altijd verhoogd zijn, zijn ze op zijn minst specifiek.
De vlaggen setuiden setgidzijn nodig voor taken die andere privileges vereisen dan wat de gebruiker normaal krijgt, zoals de mogelijkheid om systeembestanden of databases te wijzigen om hun inlogwachtwoord te wijzigen. Sommige taken die extra privileges vereisen, zijn misschien niet meteen duidelijk, zoals de pingopdracht, die besturingspakketten op een netwerkinterface moet verzenden en ernaar moet luisteren .
Effecten
De setuiden setgidvlaggen hebben verschillende effecten, afhankelijk van het feit of ze worden toegepast op een bestand, een directory of binaire uitvoerbare of niet binair uitvoerbaar bestand. De setuiden setgidvlaggen hebben alleen effect op de binaire uitvoerbare bestanden en niet op scripts (bijv Bash, Perl, Python).
Indien ingesteld op een uitvoerbaar bestand
Wanneer de setuidof setgidattributen zijn ingesteld op een uitvoerbaar bestand, dan zullen alle gebruikers die het bestand kunnen uitvoeren het bestand automatisch uitvoeren met de privileges van de eigenaar van het bestand (gewoonlijk root ) en/of de groep van het bestand, afhankelijk van de ingestelde vlaggen. Hierdoor kan de systeemontwerper toestaan dat vertrouwde programma's worden uitgevoerd die een gebruiker anders niet zou mogen uitvoeren. Deze zijn misschien niet altijd duidelijk. Het ping- commando heeft bijvoorbeeld mogelijk toegang nodig tot netwerkprivileges waartoe een normale gebruiker geen toegang heeft; daarom kan het de vlag setuid worden gegeven om ervoor te zorgen dat een gebruiker die een ander systeem moet pingen, dit kan doen, zelfs als zijn eigen account niet de vereiste bevoegdheden heeft om pakketten te verzenden.
Om veiligheidsredenen wordt de gebruiker een beroep gewoonlijk verboden het systeem veranderen van de nieuwe werkwijze op enige wijze, zoals door het gebruik ptrace, LD_LIBRARY_PATHof signalen naar het, de verhoogde voorrecht te benutten, hoewel signalen van de terminal nog worden geaccepteerd.
De setuiden setgidbits worden doorgaans met de opdracht chmoddoor de hoge orde octaal cijfer 4 voor setuidof 2 voor setgid. " " zal zowel de en bits (4+2=6) instellen, waardoor het bestand leesbaar/schrijf/uitvoerbaar wordt voor de eigenaar (7), en uitvoerbaar door de groep (eerste 1) en anderen (tweede 1). Wanneer een andere gebruiker dan de eigenaar het bestand uitvoert, wordt het proces uitgevoerd met gebruikers- en groepsrechten die door de eigenaar zijn ingesteld. Als het bestand bijvoorbeeld eigendom is van gebruiker en groep , wordt het uitgevoerd ongeacht wie het bestand uitvoert.
chmod 6711 filesetuidsetgidrootwheelroot:wheel
De meeste implementaties van het chmodcommando ondersteunen ook fijnmazige, symbolische argumenten om deze bits in te stellen. De bij voorkeur fijnmazige modus wordt in de onderstaande demonstratie weergegeven als de " chmod ug+s"
Beveiligingsimpact
Hoewel de setuidfunctie in veel gevallen erg handig is, kan het oneigenlijke gebruik ervan een veiligheidsrisico vormen als het setuidkenmerk wordt toegewezen aan uitvoerbare programma's die niet zorgvuldig zijn ontworpen. Vanwege mogelijke beveiligingsproblemen negeren veel besturingssystemen het setuidkenmerk wanneer het wordt toegepast op uitvoerbare shellscripts .
De aanwezigheid van setuiduitvoerbare bestanden verklaart waarom de chrootsysteemaanroep niet beschikbaar is voor niet- rootgebruikers op Unix. Zie beperkingen vanchroot voor meer details.
Indien ingesteld op een directory
Het instellen van de setgidmachtiging voor een map (" chmod g+s") zorgt ervoor dat nieuwe bestanden en submappen die erin zijn gemaakt, de groeps-ID overnemen , in plaats van de primaire groeps-ID van de gebruiker die het bestand heeft gemaakt (de eigenaar-ID wordt nooit beïnvloed, alleen de groeps-ID) .
- Nieuw gemaakte submappen erven het
setgidbit. Dit maakt dus een gedeelde werkruimte voor een groep mogelijk zonder het ongemak dat groepsleden hun huidige groep expliciet moeten wijzigen voordat ze nieuwe bestanden of mappen maken. - heeft alleen invloed op de groeps-ID van nieuwe bestanden en submappen die zijn gemaakt nadat de
setgidbit is ingesteld, en wordt niet toegepast op bestaande entiteiten. - heeft geen invloed op de groeps-ID van de bestanden die elders zijn gemaakt en naar de betreffende map zijn verplaatst. Het bestand blijft de groeps-ID dragen die is gemaakt toen en waar het werd gemaakt.
Het instellen van de setgidbit op bestaande subdirectories moet handmatig gebeuren, met een commando zoals:find /path/to/directory -type d -exec chmod g+s '{}' \;
De setuidmachtigingen die voor een directory zijn ingesteld, worden op de meeste UNIX- en Linux- systemen genegeerd . Echter FreeBSD kan worden geconfigureerd om te interpreteren setuidop een manier die vergelijkbaar is met setgid, in welk geval het dwingt alle bestanden en sub-directories gemaakt in een directory te worden beheerd door de eigenaar van die directory - een eenvoudige vorm van overerving. Dit is over het algemeen niet nodig op de meeste systemen die zijn afgeleid van BSD , omdat mappen standaard worden behandeld alsof hun setgidbit altijd is ingesteld, ongeacht de werkelijke waarde. Zoals vermeld in open(2), "Wanneer een nieuw bestand wordt gemaakt, krijgt het de groep van de map die het bevat."
Voorbeelden
Toestemmingen controleren
Permissies van een bestand kunnen in octale vorm en/of alfabetische vorm worden gecontroleerd met de opdrachtregeltool stat
[ torvalds ~ ] $ stat -c "%a %A" ~/test/
1770 drwxrwx--T
SUID
4701 op een uitvoerbaar bestand dat eigendom is van 'root' en de groep 'root'
Een gebruiker met de naam 'thompson' probeert het bestand uit te voeren. De uitvoerrechten voor alle gebruikers zijn ingesteld (de '1') zodat 'thompson' het bestand kan uitvoeren. De bestandseigenaar is 'root' en de SUID-machtiging is ingesteld (de '4') - dus het bestand wordt uitgevoerd als 'root'.
De reden dat een uitvoerbaar bestand als 'root' zou worden uitgevoerd, is dat het specifieke bestanden kan wijzigen die de gebruiker normaal gesproken niet zou mogen, zonder de gebruiker volledige root-toegang te geven.
Een standaardgebruik hiervan is te zien bij het /usr/bin/passwdbinaire bestand. /usr/bin/passwdmoet wijzigen /etc/passwden /etc/shadowwelke accountinformatie en wachtwoordhashes voor alle gebruikers opslaan, en deze kunnen alleen worden gewijzigd door de gebruiker 'root'.
[ thompson ~ ] $ stat -c "%a %U:%G %n" /usr/bin/passwd
4701 root:root /usr/bin/passwd
[ thompson ~ ] $ passwd
passwd: Changing password for thompson
De eigenaar van het proces is niet de gebruiker die het uitvoerbare bestand uitvoert, maar de eigenaar van het uitvoerbare bestand
SGID
2770 in een map met de naam 'music' die eigendom is van de gebruiker 'root' en de groep 'engineers'
Een gebruiker met de naam 'torvalds' die primair tot de groep 'torvalds' maar secundair tot de groep 'ingenieurs' behoort, maakt een map met de naam 'elektronisch' aan onder de map 'muziek'. Het groepseigendom van de nieuwe directory met de naam 'elektronisch' erft 'ingenieurs'. Dit is hetzelfde bij het maken van een nieuw bestand met de naam 'imagine.txt'
Zonder SGID zou het groepseigendom van de nieuwe map/het nieuwe bestand 'torvalds' zijn geweest, aangezien dat de primaire groep gebruikers 'torvalds' is.
[ 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
plakkerig stukje
1770 op een directory met de naam 'videogames' die eigendom is van de gebruiker 'torvalds' en de groep 'engineers'.
Een gebruiker met de naam 'torvalds' maakt een bestand met de naam 'tekken' aan in de map 'videogames'. Een gebruiker genaamd 'wozniak', die ook deel uitmaakt van de groep 'engineers', probeert het bestand met de naam 'tekken' te verwijderen, maar hij kan dit niet, aangezien hij niet de eigenaar is.
Zonder sticky bit had 'wozniak' het bestand kunnen verwijderen, omdat de map met de naam 'videogames' lezen en schrijven door 'engineers' toestaat. Een standaard gebruik hiervan is te zien in de /tmpmap.
[ 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 met SGID
3171 in een map met de naam 'blog' die eigendom is van de groep 'engineers' en de gebruiker 'root'
Een gebruiker met de naam 'torvalds' die primair tot de groep 'torvalds' maar secundair tot de groep 'engineers' behoort, creëert een bestand of map met de naam 'thoughts' in de map 'blog'. Een gebruiker met de naam 'wozniak' die ook tot de groep 'engineers' behoort, kan het bestand of de map met de naam 'thoughts' niet verwijderen, hernoemen of verplaatsen, omdat hij niet de eigenaar is en de sticky bit is ingesteld. Als 'gedachten' echter een bestand is, kan 'wozniak' het bewerken.
Sticky bit heeft de uiteindelijke beslissing. Als sticky bit en SGID niet waren ingesteld, zou de gebruiker 'wozniak' het bestand met de naam 'thoughts' kunnen hernoemen, verplaatsen of verwijderen omdat de map met de naam 'blog' lezen en schrijven per groep toestaat, en wozniak behoort tot de groep, en met de standaard 0002 umask kunnen nieuwe bestanden per groep worden bewerkt. Sticky bit en SGID kunnen worden gecombineerd met iets als een alleen-lezen umask of een alleen-toevoegen-attribuut.
[ 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!
Veiligheid
Ontwikkelaars ontwerpen en programma's die dit bit uitvoerbare bestanden gebruiken zorgvuldig ter voorkoming beveiligingsproblemen onder andere omvatten bufferoverruns en injectie pad . Succesvolle buffer-overrun-aanvallen op kwetsbare applicaties stellen de aanvaller in staat willekeurige code uit te voeren onder de rechten van het misbruikte proces. In het geval dat een kwetsbaar proces de setuidbit gebruikt om uit te voeren als root, wordt de code uitgevoerd met root-privileges, waardoor de aanvaller in feite root-toegang krijgt tot het systeem waarop het kwetsbare proces wordt uitgevoerd.
Van bijzonder belang bij een setuidproces is de omgeving van het proces. Als de omgeving niet goed is opgeschoond door een geprivilegieerd proces, kan het gedrag ervan worden gewijzigd door het niet-geprivilegieerde proces waarmee het is gestart. Bijvoorbeeld GNU libc was op een gegeven moment kwetsbaar voor misbruik gebruik setuiden een omgeving variabele die toegestaan uitvoeren van code van niet-vertrouwde gedeelde bibliotheken .
Geschiedenis
Het setuidbit is uitgevonden door Dennis Ritchie en opgenomen in su. Zijn werkgever, toen Bell Telephone Laboratories , vroeg in 1972 patent aan; het patent werd in 1979 verleend als patentnummer US 4135240 "Bescherming van de inhoud van gegevensbestanden". Het octrooi werd later in het publieke domein geplaatst .
Zie ook
Referenties
Externe links
- Chen, Hao; Wagner, David ; en Dean, Drew; Setuid ontrafeld (pdf)
- Tsafrir, Dan; Da Silva, Dilma ; en Wagner, David; De duistere kwestie van het veranderen van de procesidentiteit: een herziening van Setuid demystified (pdf)
- Pollock, Wayne; Unix-bestands- en directorymachtigingen en -modi