
SUID, SGID en Sticky Bits zijn krachtige speciale machtigingen die u kunt instellen voor uitvoerbare bestanden en mappen op Linux. We zullen de voordelen – en mogelijke valkuilen – van het gebruik ervan delen.
Ze zijn al in gebruik
Beveiliging inbouwen in een besturingssysteem voor meerdere gebruikers levert verschillende problemen op. Neem bijvoorbeeld het (schijnbaar) basisconcept van wachtwoorden. Ze moeten allemaal worden opgeslagen, zodat elke keer dat iemand inlogt, het systeem het wachtwoord dat hij invoert, kan vergelijken met de opgeslagen kopie. Het is duidelijk dat wachtwoorden de sleutels tot het koninkrijk zijn, en daarom moeten ze worden beschermd.
Op Linux worden opgeslagen wachtwoorden op twee manieren beschermd: ze zijn gecodeerd en alleen iemand met root privileges hebben toegang tot het bestand dat de wachtwoorden bevat. Dat klinkt misschien goed, maar het levert een dilemma op: als er maar mensen zijn met root privileges hebben toegang tot opgeslagen wachtwoorden, hoe kunnen degenen die die toegang niet hebben hun wachtwoord wijzigen?
Uw status verhogen
Gewoonlijk worden Linux-opdrachten en -programma’s uitgevoerd met dezelfde set machtigingen als de persoon die het programma start. Wanneer root voert het passwd commando om een wachtwoord te wijzigen, het wordt uitgevoerd met rootmachtigingen. Dat betekent de passwd commando heeft vrij toegang tot de opgeslagen wachtwoorden in het /etc/shadow het dossier.
Wat ideaal zou zijn, is een schema waarin iedereen op het systeem het passwd programma, maar de passwd programma behouden root’s verhoogde privileges. Dit zou iedereen in staat stellen om haar eigen wachtwoord te wijzigen.
Het bovenstaande scenario is precies wat de Set User ID-bit (SUID) doet. Het voert programma’s en opdrachten uit met de machtigingen van de bestandseigenaar, in plaats van de machtigingen van de persoon die het programma start.
U verhoogt de status van het programma
Er is echter nog een ander dilemma. Voorkomen moet worden dat de persoon zich met het wachtwoord van iemand anders bemoeit. Linux bevat het SUID schema waarmee het applicaties kan draaien met een set tijdelijk geleende rechten – maar dat is slechts de helft van het beveiligingsverhaal.
Het controlemechanisme dat voorkomt dat iemand met het wachtwoord van een andere persoon werkt, bevindt zich in het passwd programma, niet het besturingssysteem en het SUID-schema.
Programma’s die met verhoogde bevoegdheden worden uitgevoerd, kunnen beveiligingsrisico’s opleveren als ze niet zijn gemaakt met een ‘security by design’-mentaliteit. Dat betekent dat beveiliging het eerste is dat u in overweging neemt, en dan bouwt u daarop voort. Schrijf uw programma niet en probeer het daarna een laagje veiligheid te geven.
Het grootste voordeel van open source software is dat je zelf naar de broncode kunt kijken of kunt verwijzen naar vertrouwde peer-reviews ervan. In de broncode voor het passwd programma, zijn er controles, zodat u kunt zien of de persoon die het programma uitvoert dat is root. Verschillende capaciteiten zijn toegestaan als iemand dat is root (of iemand die sudo).
Dit is de code die detecteert of iemand dat is root.

Het volgende is een voorbeeld waarin daarmee rekening is gehouden. Omdat root elk wachtwoord kan wijzigen, hoeft het programma zich niet bezig te houden met de controles die het gewoonlijk uitvoert om te zien welke wachtwoorden de persoon toestemming heeft, wijzigen. Dus voor root, het slaat die controles over en verlaat de controlefunctie.

Met de kernopdrachten en hulpprogramma’s van Linux kun je erop vertrouwen dat er beveiliging in zit en dat de code vele malen is herzien. Natuurlijk is er altijd de dreiging van nog onbekende exploits. Patches of updates verschijnen echter snel om nieuw geïdentificeerde kwetsbaarheden tegen te gaan.
Het is software van derden – vooral software die niet open-source is – die u uiterst voorzichtig moet gebruiken SUID met. We zeggen niet dat je het niet moet doen, maar als je het doet, wil je er zeker van zijn dat het je systeem niet aan risico’s blootstelt. U wilt de privileges van een programma dat zichzelf en de persoon die het uitvoert, niet op de juiste manier zelfbesturen.
Linux-opdrachten die SUID gebruiken
Hieronder volgen enkele van de Linux-opdrachten die de SUID-bit gebruiken om de opdracht verhoogde rechten te geven wanneer deze door een gewone gebruiker worden uitgevoerd:
ls -l /bin/su
ls -l /bin/ping
ls -l /bin/mount
ls -l /bin/umount
ls -l /usr/bin/passwd

Merk op dat de bestandsnamen rood zijn gemarkeerd, wat aangeeft dat de SUID-bit is ingesteld.
De machtigingen voor een bestand of map worden gewoonlijk weergegeven door drie groepen van drie tekens: rwx. Deze staan voor lezen, schrijven en uitvoeren. Als de brieven aanwezig zijn, is die toestemming verleend. Als een koppelteken (-) in plaats van dat er een letter aanwezig is, is die toestemming echter niet gegeven.
Er zijn drie groepen van deze machtigingen (van links naar rechts): die voor de eigenaar van het bestand, voor leden van de groep van het bestand en voor anderen. Wanneer de SUID bit is ingesteld op een bestand, een “s” staat voor de toestemming van de eigenaar om uit te voeren.
Als het SUID bit is ingesteld op een bestand dat geen uitvoerbare mogelijkheden heeft, een hoofdletter “S” geeft dit aan.
We zullen een voorbeeld bekijken. Regelmatige gebruiker dave typt de passwd opdracht:
passwd

De passwd opdrachtprompts dave voor zijn nieuwe wachtwoord. We kunnen de ps commando om de details van lopende processen te zien.
We zullen gebruiken ps met grep in een ander terminalvenster en zoek naar het passwd werkwijze. We gebruiken ook de -e (elk proces) en -f (full-format) opties met ps.
We typen het volgende commando:
ps -e -f | grep passwd

Er worden twee regels gerapporteerd, waarvan de tweede de grep proces op zoek naar opdrachten met de string “passwd” erin. Het is echter de eerste regel die ons interesseert, want dat is die voor de passwd werkwijze dave gelanceerd.
We kunnen de passwd proces verloopt hetzelfde als wanneer root had het gelanceerd.
De SUID-bit instellen
Het is gemakkelijk om het SUID beetje met chmod. De u+s symbolische modus stelt de SUID bit en de u-s symbolische modus wist de SUID beetje.
Om enkele van de concepten van de SUID-bit te illustreren, hebben we een klein programma gemaakt met de naam htg. Het staat in de hoofdmap van het dave gebruiker, en het heeft niet de SUID bitset. Wanneer het wordt uitgevoerd, worden de echte en effectieve gebruikers-ID’s (UID) weergegeven.
De echte UID is van de persoon die het programma heeft gestart. De effectieve ID is het account waarmee het programma zich gedraagt alsof het is gestart door.
We typen het volgende:
ls -lh htg
./htg

Wanneer we de lokale kopie van het programma uitvoeren, zien we dat de echte en effectieve ID’s beide zijn ingesteld op dave. Het gedraagt zich dus precies zoals een normaal programma zou moeten.
Laten we het kopiëren naar het /usr/local/bin directory zodat anderen het kunnen gebruiken.
We typen het volgende met chmod om de SUID bit, en controleer vervolgens of het is ingesteld:
sudo cp htg /usr/local/bin
sudo chmod u+s /usr/local/bin/htg
ls -hl /usr/local/bin/htg

Het programma wordt dus gekopieerd en de SUID-bit is ingesteld. We zullen het opnieuw uitvoeren, maar deze keer zullen we de kopie in het /usr/local/bin map:
htg

Ondanks dat dave het programma heeft gestart, wordt de effectieve ID ingesteld op de root gebruiker. Dus indien mary start het programma, hetzelfde gebeurt, zoals hieronder getoond:
htg

De echte ID is mary, en de effectieve ID is root. Het programma wordt uitgevoerd met de machtigingen van de rootgebruiker.
VERWANT: Hoe de chmod-opdracht op Linux te gebruiken
De SGID Bit
De ingestelde groeps-ID (SGID) bit lijkt erg op de SUID beetje. Wanneer de SGID bit is ingesteld op een uitvoerbaar bestand, wordt de effectieve groep ingesteld op de groep van het bestand. Het proces wordt uitgevoerd met de machtigingen van de leden van de groep van het bestand, in plaats van de machtigingen van de persoon die het heeft gestart.
We hebben onze htg programma zodat het ook de effectieve groep laat zien. We veranderen de groep van de htg programma om gebruiker te zijn mary’s standaardgroep, mary. We gebruiken ook de u-s en g+s symbolische modi met chown om het SUID bit en stel de SGID.
Om dit te doen, typen we het volgende:
sudo chown root:mary /usr/local/bin/htg
sudo chmod u-s,g+s /usr/local/bin/htg
ls -lh /usr/local/bin/htg

Je kan de … zien SGID bit aangegeven door de “s” in de groepsmachtigingen. Merk ook op dat de groep is ingesteld op mary en de bestandsnaam is nu geel gemarkeerd.
Laten we, voordat we het programma uitvoeren, vaststellen welke groepen dave en mary behoren tot. We gebruiken de id commando met de -G (groepen) optie, om alle groeps-ID’s af te drukken. Dan voeren we het htg programma als dave.
We typen de volgende commando’s:
id -G dave
id -G mary
htg

De ID van de standaardgroep voor mary is 1001, en de effectieve groep van de htg programma is 1001. Dus, hoewel het werd gelanceerd door dave, wordt het uitgevoerd met de machtigingen van de leden in het mary groep. Het is hetzelfde alsof dave was toegetreden tot de mary groep.
Laten we de SGID bit naar een directory. Eerst maken we een directory met de naam ‘werk’ en wijzigen we de groep in ‘nerd’. We zullen dan de SGID bit op de directory.
Wanneer we ls om de instellingen van de directory te controleren, gebruiken we ook de -d (directory) optie zodat we de details van de directory zien, niet de inhoud ervan.
We typen de volgende commando’s:
sudo mkdir work
sudo chown dave:geek work
sudo chmod g+s work
ls -lh -d work

De SGID bit en “geek” -groep zijn ingesteld. Deze hebben invloed op alle items die zijn gemaakt in het work directory.
We typen het volgende om het work directory, maak een directory met de naam “demo” en controleer de eigenschappen ervan:
cd work
mkdir demo
ls -lh -d demo

De SGID bit en “geek” -groep worden automatisch toegepast op de “demo” -directory.
Laten we het volgende typen om een bestand te maken met de touch commando en controleer de eigenschappen ervan:
touch useful.sh
ls -lh useful.sh

De groep van het nieuwe bestand wordt automatisch ingesteld op ‘nerd’.
VERWANT: Hoe de chown-opdracht op Linux te gebruiken
Het kleverige stukje
Het plakkerige bit dankt zijn naam aan zijn historische doel. Wanneer het op een uitvoerbaar bestand werd ingesteld, gaf het het besturingssysteem aan dat de tekstgedeelten van het uitvoerbare bestand in ruil moesten worden gehouden, waardoor ze sneller opnieuw konden worden gebruikt. Onder Linux heeft het plakkerige bit alleen invloed op een directory – het zou niet logisch zijn om het in een bestand te zetten.
Wanneer u de sticky bit op een directory instelt, kunnen mensen alleen bestanden verwijderen die bij hen in die directory horen. Ze kunnen geen bestanden verwijderen die van iemand anders zijn, ongeacht welke combinatie van bestandsrechten voor de bestanden is ingesteld.
Hierdoor kunt u een directory maken die iedereen – en de processen die ze starten – kan gebruiken als gedeelde bestandsopslag. De bestanden zijn beveiligd omdat, nogmaals, niemand de bestanden van iemand anders kan verwijderen.
Laten we een map maken met de naam ‘gedeeld’. We gebruiken de o+t symbolische modus met chmod om de plakkerige bit in die map te plaatsen. We kijken dan naar de machtigingen voor die map, evenals naar het /tmp en /var/tmp mappen.
We typen de volgende commando’s:
mkdir shared
sudo chmod o+t shared
ls -lh -d shared
ls -lh -d /tmp
ls -lh -d /var/tmp

Als de sticky bit is ingesteld, wordt het uitvoerbare bit van de ‘andere’ set bestandsrechten ingesteld op ’t’. De bestandsnaam is ook blauw gemarkeerd.
De /tmp en /var/tmp mappen zijn twee voorbeelden van mappen waarvoor alle bestandsrechten zijn ingesteld voor de eigenaar, groep en anderen (daarom zijn ze groen gemarkeerd). Ze worden gebruikt als gedeelde locaties voor tijdelijke bestanden.
Met die machtigingen zou iedereen theoretisch alles moeten kunnen doen. Het plakkerige bit overschrijft ze echter en niemand kan een bestand verwijderen dat niet van hem is.
Herinneringen
Het volgende is een korte checklist van wat we hierboven hebben behandeld voor toekomstig gebruik:
-
SUIDwerkt alleen op bestanden. - U kunt zich aanmelden
SGIDnaar mappen en bestanden. - U kunt de plakkerige bit alleen op mappen toepassen.
- Als de “
s“,”g“, Of”t”Indicatoren verschijnen in hoofdletters, de uitvoerbare bit (x) is niet ingesteld.