Kostym

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 1 juli 2018; kontroller kräver 3 redigeringar .

setuid och setgid (förkortning för set användar-ID vid körning  och set  grupp-ID vid körning )  är Unix- behörighetsflaggor som tillåter användare att köra körbara filer med rättigheterna för ägaren eller gruppen av den körbara filen.  

Allmän information

Unix -liknande system körs applikationen med rättigheterna för den användare som anropade den angivna applikationen. Detta ger ytterligare säkerhet, eftersom en användarprocess inte kan få skrivåtkomst till viktiga systemfiler, såsom /etc/passwd , som ägs av root .

Om den körbara filen har suid-biten inställd, ändrar detta program automatiskt det "effektiva användar-ID" när det körs till identifieraren för användaren som äger filen. Det vill säga, oavsett vem som kör det här programmet, har det rättigheterna för ägaren av denna fil när det körs.

Historik

Suid-biten uppfanns av Dennis Ritchie och patenterades i USA av AT&T 1979. Senare släpptes patent 4135240 "Skydd av datafilinnehåll" till allmänheten.

setuid och setgid på filer

När attributet set u id är inställt på en fil höjs den vanliga användaren som kör den filen till filens ägareanvändare (vanligtvis root ) inom den körande processen . När den väl är upphöjd kan en applikation utföra uppgifter som en normal användare inte skulle kunna utföra. Användaren kommer att förhindras av systemet från att ändra den nya processen. På grund av möjligheten till ett race-tillstånd ignorerar många operativsystem attributet set till skalskript. .

Även om attributet set u id är väldigt praktiskt i många fall kan missbruk av det vara en säkerhetsrisk när attributet tilldelas en körbar fil som inte är noggrant utformad. Användare kan utnyttja sårbarheter i underutvecklade program för att få förhöjda privilegier eller oavsiktligt köra ett trojansk hästprogram .

Att ställa in set g id-attributet ger gruppförhöjning .

Attributen setuid och setgid ställs vanligtvis in med kommandot chmod genom att sätta det första bitparet till 4 (set u id) eller 2 (set g id). Kommandot kommer att chmod 6711ställa in båda paren av bitar samtidigt (4+2=6). Du kan också använda teckenargument för att ställa in dessa bitar med chmod ug+s.

setuid på kataloger

Setuid- och setgid-bitarna för kataloger har en mycket olika betydelse.

Uppsättningen g id-bit i en katalog ( chmod g+s) gör att endast nya kataloger och filer som skapats i den ärver grupp-ID:t för den katalogen istället för grupp-ID:t för användaren som skapade filen. Nya underkataloger ärver också setgid-biten. Detta gör att du kan skapa en delad arbetsyta för en grupp utan besväret med att gruppmedlemmar uttryckligen behöver ändra sin nuvarande grupp för att skapa nya filer och kataloger.

Arv ställs endast in för nya filer och kataloger. Redan befintliga filer och kataloger måste ställa in denna bit manuellt, till exempel:

hitta /sökväg/till/katalog -typ d -exec chmod g+s {} \;

Observera också att för alla användare av en sådan grupp måste umasken ändras från standardvärdet 0022 till 0012, annars kommer de nya filerna/mapparna inte att ha skrivbar (w) behörighet för gruppen.

Setuid-biten som är inställd för kataloger ignoreras i de flesta versioner av Unix .

setuid och setgid på icke-körbara filer

Att ställa in suid/sgid-bitarna på icke-körbara filer är i allmänhet meningslöst.

Exempel

[ bob@foo ] $ cat /etc/passwd alice:x:1007:1007::/home/alice:/bin/bash bob:x:1008:1008::/home/bob:/bin/bash [ bob@foo ] $ cat printid.c #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> int main ( void ) { printf ( "Real UID\t= %d\n" , getuid () ) ; printf ( "Effektivt UID\t= %d\n" , geteuid ()) ; printf ( "Real GID\t= %d\n" , getgid ()) ; printf ( "Effektivt GID\t= %d\n" , getegid ()) ; returnera EXIT_SUCCESS ; } [ bob@foo ] $ gcc -Wall printid.c -o printid [ bob@foo ] $ chmod ug+s printid [ bob@foo ] $ su alice Lösenord: [ alice@foo ] $ ls -l -rwsr-sr-x 1 bob bob 6944 2007-11-06 10:22 printid [ alice @foo ] $ ./printid Verkligt UID = 1007 Effektivt UID = 1008 Verkligt GID = 1007 Effektivt GID = 1008 [ alice@foo ] $

Säkerhet

Ett program med setuid-biten är "potentiellt farligt". I det "normala" fallet kommer det inte att tillåta en normal användare att göra något som ligger utanför deras behörighet (till exempel kommer passwd- programmet bara att tillåta användaren att ändra sitt eget lösenord). Men även ett mindre fel i ett sådant program kan leda till att en angripare kan tvinga det att utföra några andra åtgärder som inte tillhandahålls av författaren till programmet.

Se även