SUID og SGID i Linux forklaret med eksempler
On oktober 1, 2021 by adminForestil dig en situation, hvor du har et script eller en eksekverbar fil, som altid skal køres af en bestemt bruger, simpelthen fordi denne bruger har de rette adgangsrettigheder til de handlinger, der udføres af scriptet. Du vil også gerne have, at andre brugere kan udføre scriptet, men i sidste ende skal det køres som den oprindelige bruger af scriptet (da denne bruger kun har de nødvendige tilladelser til de handlinger, der udføres).
Linux-programmer og -programmer køres som standard med nøjagtig de samme tilladelser som den bruger, der udfører dem. Af denne grund har vi brug for en god løsning til ovennævnte situation (dvs.: Alle brugere skal kunne udføre et program, der ejes af en bestemt bruger, som om ejeren selv udførte det).
Det er her, SUID kommer ind i billedet. SUID er intet andet end en særlig tilladelsesbit, der er tilgængelig i Linux, og som opnår dette med stor lethed.
Hvis du er ejer af en eksekverbar fil, vil andre brugere ved hjælp af SUID-tilladelsesindstillingen køre den eksekverbare fil med din tilladelse og ikke med deres.
SUID bruges normalt i Linux til at give forhøjede privilegier midlertidigt under udførelsen. Denne forhøjelse af privilegier er slet ikke permanent. Det er kun en midlertidig forhøjelse, når programmet/scriptet bliver udført.
Eksempler på eksekverbare filer i Linux med SUID-tilladelsesbit sat
Lad os forstå dette ved at se på et eksempel. Fra ovenstående liste over eksekverbare filer er /usr/bin/passwd noget, der skal kunne eksekveres af alle brugere i systemet(dette skyldes, at alle brugere skal kunne ændre deres egen adgangskode). Hvis du ikke ved hvordan passwords fungerer i linux, anbefaler jeg at du læser nedenstående artikel.
Læs: Sådan fungerer passwords i Linux
Af opdatering af en brugers password kræver, at brugeren redigerer filen /etc/passwd, /etc/shadow i linux. Dette er dog kun tilladt for root-brugeren. Dette er grunden til, at der anvendes SUID-bit på filen /usr/bin/passwd. Da root er ejer af denne fil, og da SUID er indstillet på denne fil, vil enhver bruger, der udfører kommandoen /usr/bin/passwd, udføre den som root-bruger. Lad os se dette i praksis.
Nedenfor vises kommandoen passwd, der er affyret af brugeren med navnet sarath. Lad os se, om denne passwd-kommandoproces bliver udført som root-bruger.
$ passwdChanging password for user sarath.Changing password for sarath.(current) UNIX password:
Lad os åbne en anden terminal og affyre ps aux commad og se, om passwd-kommandoprocessen kører med root-brugeren. Dette kan gøres som vist nedenfor.
$ ps aux | grep passwdroot 24531 0.0 0.0 156928 1664 pts/0 S+ 07:24 0:00 passwd
Du kan tydeligt se, at kommandoprocessen passwd command kører med root-brugeren(synligt fra det første felt i ovenstående output.). I lighed med passwd-kommandoen vil enhver kommando fra den tidligere viste liste over SUID-anvendte filer altid køre med tilladelse fra ejeren af filen, uanset hvilken bruger der udfører den.
Bemærk også, at selv ping-kommandoen er SUID(Se den indledende liste ovenfor), dette skyldes, at udførelsen af PING kræver flere netværksoperationer, som kun kan udføres af root.
Hvordan konfigurerer man SUID i Linux?
Konfigurere SUID på dine nødvendige filer/script er en enkelt CHMOD-kommando væk.
$ chmod u+s /path/to/file/or/executable
Udskift “/path/to/file/or/executable” i ovenstående kommando med den absolutte sti til det script, som du har brug for SUID-bit på. Dette kan også opnås ved at bruge den numeriske metode i chmod.
$ chmod 4755 /path/to/file/or/executable
Den første “4” i “4755” angiver SUID. Et andet eksempel på den numeriske metode er vist nedenfor.
$ chmod 4750 /path/to/file/or/executable
Grundlæggende er det i den numeriske metode blot at sætte 4 foran de andre tilladelsessæt, der er nødvendige for den pågældende fil.
Hvordan kan du kontrollere, om SUID er anvendt på en fil eller ej?
Du kan kontrollere, om SUID-bitten er anvendt på en fil eller ej, ved at bruge ls kommando som vist nedenfor.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
ls -l-kommandoen skulle vise dig, om SUID er anvendt eller ej. Du skal blot se på det første felt i ls -l output. S’et i -rwsr-xr-x angiver SUID-bit. I nogle tilfælde vil du se et stort S i stedet for et lille s, som vi så ovenfor. Et stort S angiver, at der ikke er anvendt eksekveringstilladelse til den pågældende fil/det pågældende script.
root@ip-10-12-2-217:/usr/bin# chmod -x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwSr--r-- 1 root root 47032 Jul 15 2015 passwd
Du kan tydeligt se af ovenstående output, at det at fjerne eksekverbar tilladelse fra filen /usr/bin/passwd gjorde output af ls -l til et stort S. Hvis du tilføjer eksekverbar tilladelse tilbage på den fil, bliver det lille s, som vist nedenfor.
root@ip-10-12-2-217:/usr/bin# chmod +x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
Hvordan finder man alle filer, som har SUID bit aktiveret i linux?
Du kan bruge nedenstående find-kommando til at søge i alle de filer i systemet, som har SUID bit aktiveret. Hvis du er ny til find-kommandoen, vil jeg anbefale dig at læse nedenstående artikel.
Læs: Find kommando i Linux med eksempler
root@ip-10-12-2-217:~# find / -perm -4000 -exec ls -l {} \;
Udskift den første / i ovenstående kommando med den ønskede placering for at finde alle SUID-filer på den pågældende placering. Hvis du f.eks. vil finde alle filer med SUID inde i /usr/bin, skal du køre nedenstående kommando.
Husk, at SUID-bitten ignoreres på mapper i Linux.
SGID minder meget om SUID. Den eneste forskel er, at scriptet/filen, der har SGID konfigureret, vil blive kørt med samme tilladelse som gruppens ejer.
Hvis du konfigurerer SGID på mapper, vil alle filer eller mapper, der oprettes i den pågældende mappe, være ejet af den samme fælles gruppe (gruppeejeren af den mappe, hvor SGID er konfigureret).
Eksempler på SGID-filer i linux
Hvordan konfigurerer man SGID i Linux?
Som SUID kan SGID konfigureres ved hjælp af chmod-kommandoen som vist nedenfor.
root@localhost:~# chmod g+s /path/to/file
Udskift “/path/to/file” i ovenstående kommando med den absolutte sti til det script, som du har brug for SGID-bit på. Dette kan også opnås ved at bruge den numeriske metode til chmod (vist nedenfor).
root@localhost:~# chmod 2755 /path/to/file
Hvordan kan du kontrollere, om SGID er anvendt på en fil eller et script?
Som SUID kan du nemt udføre kommandoen ls -l på en fil/mappe for at finde ud af, om SGID er aktiveret eller ej. Nedenstående viste eksempel viser det samme.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
Den lille s-del af det første felt i about-udgangen (-rwxr-sr-x) angiver SGID-bitten. I lighed med SUID, vil det, hvis du ikke har tilladelse til eksekverbare rettigheder anvendt på gruppen, være stort S i stedet for lille som vist nedenfor.
root@ip-10-12-2-217:/usr/bin# chmod g-x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-Sr-x 1 root shadow 54968 Jul 15 2015 chage
Og hvis du aktiverer tilladelse til eksekverbare rettigheder på gruppen, vil det gøre det til lille s (vist nedenfor.)
root@ip-10-12-2-217:/usr/bin# chmod g+x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
Skriv et svar