SUID och SGID i Linux förklaras med exempel
On oktober 1, 2021 by adminFöreställ dig en situation där du har ett skript eller en körbar fil som alltid måste köras av en viss användare, helt enkelt för att den användaren har rätt åtkomsträttigheter för de åtgärder som utförs av skriptet. Du vill också att andra användare ska kunna köra skriptet, men i slutändan måste det köras av den ursprungliga användaren av skriptet (eftersom den användaren bara har de nödvändiga behörigheterna för de åtgärder som vidtas).
Som standard körs Linuxprogram och -program med exakt samma behörigheter som den användare som kör det. Av denna anledning behöver vi en bra lösning för ovan nämnda situation (dvs. alla användare ska kunna köra ett program som ägs av en viss användare som om ägaren själv körde det).
Det är här SUID kommer in i bilden. SUID är inget annat än en speciell behörighetsbit som finns tillgänglig i Linux och som gör detta mycket enkelt.
Om du är ägare till en körbar fil kommer andra användare, med hjälp av behörigheten SUID, att köra den körbara filen med din behörighet och inte deras.
SUID används normalt i Linux för att ge förhöjda privilegier tillfälligt under körning. Denna höjning av privilegier är inte alls permanent. Det är en tillfällig höjning endast när programmet/scriptet exekveras.
Exempel på exekverbara filer i Linux som har SUID-behörighetsbiten inställd
Låt oss förstå detta med hjälp av ett exempel. Från listan över körbara filer ovan är /usr/bin/passwd något som bör kunna köras av alla användare i systemet (detta beror på att alla användare bör kunna ändra sitt eget lösenord). Om du inte vet hur lösenord fungerar i Linux rekommenderar jag att du läser nedanstående artikel.
Läs: Hur lösenord fungerar i Linux
Att uppdatera en användares lösenord kräver att användaren redigerar filen /etc/passwd, /etc/shadow i linux. Detta är dock endast tillåtet för root-användaren. Detta är anledningen till att SUID-biten tillämpas på filen /usr/bin/passwd. Eftersom root är ägare till den filen, och SUID är inställd på den filen, kommer alla användare som utför kommandot /usr/bin/passwd att utföra det som root-användare. Låt oss se detta i praktiken.
Nedan visas kommandot passwd som avfyras av användaren sarath. Låt oss se om den passwd-kommandoprocessen utförs som root-användare.
$ passwdChanging password for user sarath.Changing password for sarath.(current) UNIX password:
Låt oss öppna en annan terminal och starta ps aux commad och se om passwd-kommandoprocessen körs med root-användare. Detta kan göras på följande sätt:
$ ps aux | grep passwdroot 24531 0.0 0.0 156928 1664 pts/0 S+ 07:24 0:00 passwd
Du kan tydligt se att kommandoprocessen passwd körs med root-användaren (synligt i det första fältet i ovanstående utdata). I likhet med kommandot passwd kommer alla kommandon från den tidigare visade listan över SUID-tillämpade filer alltid att köras med tillstånd från ägaren av filen, oavsett vilken användare som utför det.
Märk också det faktum att till och med ping-kommandot är SUID (se den ursprungliga listan ovan), detta beror på att PING-utförandet kräver flera nätverksoperationer som endast kan utföras av root.
Hur konfigurerar man SUID i Linux?
Det räcker med ett enda CHMOD-kommando för att konfigurera SUID på de filer/skript du behöver.
$ chmod u+s /path/to/file/or/executable
Ersätt ”/path/to/file/or/executable” i kommandot ovan med den absoluta sökvägen till det skript som du behöver SUID-biten på. Detta kan också uppnås genom att använda den numeriska metoden för chmod.
$ chmod 4755 /path/to/file/or/executable
Den första ”4” i ”4755” anger SUID. Ett annat exempel på numerisk metod visas nedan.
$ chmod 4750 /path/to/file/or/executable
Grundläggande för den numeriska metoden är att helt enkelt sätta 4 före de andra behörighetsuppsättningarna som behövs för den filen.
Hur verifierar man om SUID tillämpas på en fil eller inte?
Du kan verifiera om SUID-biten tillämpas på en fil eller inte genom att använda kommandot ls enligt nedan.
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 kommandot bör visa om SUID har tillämpats eller inte. Titta helt enkelt på det första fältet i ls -l-utmatningen. S:et i -rwsr-xr-x anger SUID-biten. I vissa fall kommer du att se ett stort S istället för ett litet s som vi såg ovan. Ett stort S indikerar att det inte finns någon exekveringsbehörighet för den filen/det skriptet.
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 tydligt se i ovanstående utdata att om du tar bort exekverbar behörighet från filen /usr/bin/passwd så förvandlas utdata från ls -l till ett stort S. Om du lägger till exekverbar behörighet på den filen igen så blir det ett litet s, vilket visas nedan.
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
Hur hittar man alla filer, som har SUID bit aktiverad i Linux?
Du kan använda nedanstående find-kommando för att söka alla filer i systemet som har SUID bit aktiverad. Om du inte känner till kommandot find rekommenderar jag att du läser nedanstående artikel.
Läs: Find command in Linux with examples
root@ip-10-12-2-217:~# find / -perm -4000 -exec ls -l {} \;
Ersätt den första / i ovanstående kommando med den önskade platsen för att hitta alla SUID-filer på den platsen. Om du till exempel vill hitta alla filer med SUID i /usr/bin kör du kommandot nedan.
Vänligen kom ihåg att SUID-biten ignoreras på kataloger i Linux.
SGID liknar SUID i mycket hög grad. Den enda skillnaden är att skriptet/filen som har SGID-konfigurerats kommer att köras med samma behörighet som gruppägaren.
Om du konfigurerar SGID på kataloger kommer alla filer eller kataloger som skapas i den katalogen att ägas av samma gemensamma grupp (gruppägare för katalogen där SGID är konfigurerad).
Exempel på SGID-filer i linux
Hur konfigurerar man SGID i Linux?
Som SUID kan SGID konfigureras med hjälp av kommandot chmod enligt nedan.
root@localhost:~# chmod g+s /path/to/file
Ersätt ”/path/to/file” i kommandot ovan med den absoluta sökvägen till det skript som du vill ha SGID-biten på. Detta kan uppnås genom att använda den numeriska metoden för chmod också (visas nedan).
root@localhost:~# chmod 2755 /path/to/file
Hur verifierar man om SGID har tillämpats på en fil eller ett skript?
Som SUID kan du enkelt utföra kommandot ls -l på en fil/mapp för att ta reda på om SGID är aktiverat eller inte. Nedanstående exempel visar samma sak.
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 lilla s-delen av det första fältet i about-utmatningen (-rwxr-sr-x) anger SGID-biten. På samma sätt som för SUID, om du inte har behörighet för körning på gruppen, kommer det att vara ett stort S istället för ett litet som visas nedan.
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
Och om du aktiverar behörighet för körning på gruppen, kommer det att vara ett litet s (visas nedan.)
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
Lämna ett svar