SUID en SGID in Linux uitgelegd met voorbeelden
On oktober 1, 2021 by adminStel je een situatie voor waarin je een script of uitvoerbaar bestand hebt dat altijd door een bepaalde gebruiker moet worden uitgevoerd, simpelweg omdat die gebruiker de juiste toegangsrechten heeft voor de acties die door het script worden ondernomen. U wilt ook dat andere gebruikers dat script kunnen uitvoeren, maar uiteindelijk moet het worden uitgevoerd door de oorspronkelijke gebruiker van het script (omdat die gebruiker alleen de vereiste rechten heeft voor de acties die worden ondernomen).
Zo draaien Linux applicaties en programma’s standaard met exact dezelfde rechten als de gebruiker die het uitvoert. Om deze reden hebben we een goede oplossing nodig voor de bovenstaande situatie (dat wil zeggen: Alle gebruikers moeten in staat zijn om een programma van een bepaalde gebruiker uit te voeren alsof de eigenaar het zelf heeft uitgevoerd).
Dit is waar SUID in beeld komt. SUID is niets anders dan een speciale permissie bit beschikbaar in Linux, die dit met veel gemak bereikt.
Als u de eigenaar bent van een uitvoerbaar bestand, zullen andere gebruikers met behulp van de SUID-toestemming het uitvoerbare bestand uitvoeren met uw toestemming en niet die van hen.
SUID wordt normaal gesproken in Linux gebruikt om tijdelijk verhoogde rechten te geven tijdens de uitvoering. Deze verhoging van privileges is helemaal niet permanent. Het is een tijdelijke verheffing, alleen wanneer het programma/script wordt uitgevoerd.
Voorbeelden van uitvoerbare bestanden in Linux met SUID-toestemming bit ingesteld
Laten we dit eens begrijpen aan de hand van een voorbeeld. Uit de bovenstaande lijst van uitvoerbare bestanden is /usr/bin/passwd iets dat uitvoerbaar zou moeten zijn door alle gebruikers in het systeem (dit is omdat alle gebruikers in staat zouden moeten zijn om hun eigen wachtwoord te veranderen). Als je niet weet hoe wachtwoorden werken in Linux, raad ik je aan om het onderstaande artikel te lezen.
Lees: Hoe wachtwoorden werken in Linux
Het wijzigen van het wachtwoord van een gebruiker vereist dat de gebruiker het /etc/passwd, /etc/shadow bestand in linux bewerkt. Dit is echter alleen toegestaan voor de root gebruiker. Dit is de reden dat SUID bit is toegepast op het bestand /usr/bin/passwd. Omdat root de eigenaar is van dat bestand, en SUID is ingesteld op dat bestand, zal iedere gebruiker die het /usr/bin/passwd commando uitvoert, dit doen als root gebruiker. Laten we dit eens praktisch bekijken.
Hieronder ziet u het passwd commando, uitgevoerd door de gebruiker sarath. Laten we eens kijken of dat passwd commando wordt uitgevoerd als root user.
$ passwdChanging password for user sarath.Changing password for sarath.(current) UNIX password:
Laten we een andere terminal openen, en ps aux commad opstarten en kijken of het passwd commando proces wordt uitgevoerd met root user. Dit kan gedaan worden zoals hieronder getoond wordt.
$ ps aux | grep passwdroot 24531 0.0 0.0 156928 1664 pts/0 S+ 07:24 0:00 passwd
U kunt duidelijk zien dat het passwd commando proces draait met de root gebruiker (zichtbaar in het eerste veld van de bovenstaande uitvoer.). Net als bij passwd, zal elk commando uit de eerder getoonde lijst van SUID toegepaste bestanden, altijd draaien met de toestemming van de eigenaar van het bestand, ongeacht welke gebruiker het uitvoert.
Zie ook dat zelfs het ping commando SUID is (zie de initiële lijst hierboven), dit komt omdat de uitvoering van PING verschillende netwerk operaties vereist, die alleen door root kunnen worden uitgevoerd.
Hoe SUID configureren in Linux?
Het configureren van SUID op uw benodigde bestanden/script is een enkel CHMOD commando verwijderd.
$ chmod u+s /path/to/file/or/executable
Vervang “/path/to/file/or/executable”, in het bovenstaande commando, met het absolute pad van het script waar u SUID bit op nodig heeft. Dit kan ook bereikt worden door de numerieke methode van chmod te gebruiken.
$ chmod 4755 /path/to/file/or/executable
De eerste “4” in “4755” geeft SUID aan. Een ander voorbeeld van een numerieke methode staat hieronder.
$ chmod 4750 /path/to/file/or/executable
Basically, in the numerieke methode, simply prepend 4 to the other permission sets that is needed on that file.
Hoe controleer je of SUID is toegepast op een bestand of niet?
U kunt controleren of SUID bit is toegepast op een bestand of niet met behulp van ls commando zoals hieronder getoond.
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 commando zou u moeten laten zien of SUID is toegepast of niet. Kijk gewoon naar het eerste veld van ls -l uitvoer. De s in -rwsr-xr-x geeft SUID bit aan. In sommige gevallen zal u een hoofdletter S zien in plaats van een kleine s zoals we hierboven zagen. Een hoofdletter S geeft aan dat er geen uitvoerbare rechten zijn op dat bestand/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
U kunt duidelijk zien in de bovenstaande uitvoer dat het verwijderen van uitvoerbare rechten van het bestand /usr/bin/passwd de uitvoer van ls -l veranderde in een hoofdletter S. Als u weer uitvoerbare rechten toekent aan dat bestand, wordt het een kleine s, zoals hieronder te zien is.
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
Hoe vind ik alle bestanden met SUID bit ingeschakeld in Linux?
U kunt het onderstaande find commando gebruiken om alle bestanden in het systeem te vinden met SUID bit ingeschakeld. Als het commando vinden nieuw voor u is, raad ik u aan het onderstaande artikel te lezen.
Lees: Zoek commando in Linux met voorbeelden
root@ip-10-12-2-217:~# find / -perm -4000 -exec ls -l {} \;
Vervang de eerste / in het bovenstaande commando met de gewenste locatie om alle SUID bestanden op die locatie te vinden. Om bijvoorbeeld alle bestanden met SUID in /usr/bin te vinden, voert u het onderstaande commando uit.
Let op het feit dat SUID bit wordt genegeerd op mappen in Linux.
SGID lijkt erg veel op SUID. Het enige verschil is dat een script/bestand met SGID dezelfde rechten heeft als de eigenaar van de groep.
Als u SGID instelt op directories, zullen alle bestanden of directories die in die directory worden aangemaakt eigendom zijn van dezelfde gemeenschappelijke groep (groepseigenaar van de directory waar SGID is geconfigureerd).
Voorbeelden van SGID-bestanden in Linux
Hoe SGID te configureren in Linux?
Gelijk aan SUID, kan SGID geconfigureerd worden met chmod commando zoals hieronder getoond.
root@localhost:~# chmod g+s /path/to/file
Vervang “/path/to/file”, in bovenstaand commando, met het absolute pad van het script waar je SGID bit op nodig hebt. Dit kan ook worden bereikt met de numerieke methode van chmod (zie hieronder).
root@localhost:~# chmod 2755 /path/to/file
Hoe controleer je of SGID is toegepast op een bestand of script?
Gelijk aan SUID, kun je eenvoudig ls -l uitvoeren op een bestand/directory om te zien of SGID is ingeschakeld of niet. Het voorbeeld hieronder laat hetzelfde zien.
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
Het kleine s-deel van het eerste veld in de about uitvoer (-rwxr-sr-x) geeft de SGID bit aan. Vergelijkbaar met SUID, als u geen uitvoerbare rechten op de groep hebt toegepast, zal het een hoofdletter S zijn in plaats van een kleine zoals hieronder getoond.
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
En het inschakelen van uitvoerbare rechten op de groep, zal het een kleine s maken (zoals hieronder getoond.)
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
Geef een antwoord