• Dave McKay

    @TheGurkha

  • Februari 26, 2020, 8:00am EDT
Fatmawati Achmad Zaenuri/

SUID, SGID, en Sticky Bits zijn krachtige speciale permissies die je kunt instellen voor uitvoerbare bestanden en mappen onder Linux. We bespreken de voordelen en mogelijke valkuilen van het gebruik ervan.

Ze zijn al in gebruik

Het inbouwen van beveiliging in een multiuser besturingssysteem stelt je voor verschillende dilemma’s. Neem bijvoorbeeld het (schijnbaar) basisconcept van wachtwoorden. Ze moeten allemaal worden opgeslagen, zodat elke keer dat iemand inlogt, het systeem het wachtwoord dat hij intypt kan vergelijken met de opgeslagen kopie. Aangezien wachtwoorden de sleutels tot het koninkrijk zijn, moeten ze uiteraard worden beveiligd.

Op Linux zijn opgeslagen wachtwoorden op twee manieren beveiligd: ze zijn versleuteld, en alleen iemand met root-privileges kan toegang krijgen tot het bestand dat de wachtwoorden bevat. Dat klinkt misschien goed, maar er is een probleem: Als alleen mensen met root privileges toegang hebben tot opgeslagen wachtwoorden, hoe kunnen mensen die geen toegang hebben hun wachtwoorden dan veranderen?

Uw status verhogen

Normaal gesproken worden Linux commando’s en programma’s uitgevoerd met dezelfde rechten als de persoon die het programma opstart. Wanneer root het passwd commando uitvoert om een wachtwoord te veranderen, draait het met root’s permissies. Dat betekent dat het passwd commando vrijelijk toegang heeft tot de opgeslagen wachtwoorden in het /etc/shadow bestand.

Advertentie

Wat ideaal zou zijn is een schema waarin iedereen op het systeem het passwd programma kan starten, maar het passwd programma de verhoogde rechten van root laat behouden. Dit zou iedereen in staat stellen om haar eigen wachtwoord te veranderen.

Het bovenstaande scenario is precies wat de Set User ID bit (SUID) doet. Het draait programma’s en commando’s met de rechten van de bestandseigenaar, in plaats van de rechten van de persoon die het programma start.

Je verhoogt de status van het programma

Er is echter een ander dilemma. De persoon moet voorkomen worden dat hij met iemand anders zijn wachtwoord kan knoeien. Linux bevat het SUID schema dat het mogelijk maakt om applicaties te draaien met een set tijdelijk geleende rechten-maar dat is slechts de helft van het beveiligingsverhaal.

Advertentie

Het controlemechanisme dat voorkomt dat iemand met andermans wachtwoord kan werken, zit in het passwd programma, niet in het besturingssysteem en het SUID schema.

Programma’s die draaien met verhoogde rechten kunnen beveiligingsrisico’s opleveren als ze niet zijn gemaakt met een “security by design” mentaliteit. Dat betekent dat veiligheid het eerste is waar je over nadenkt, en dan bouw je daarop verder. Schrijf niet je programma en probeer het daarna van een laagje beveiliging te voorzien.

Het grootste voordeel van open source software is dat je de broncode zelf kunt bekijken of kunt verwijzen naar betrouwbare peer-reviews ervan. In de broncode van het passwd programma staan controles, zodat je kunt zien of de persoon die het programma uitvoert root is. Verschillende mogelijkheden zijn toegestaan als iemand root is (of iemand die sudo gebruikt).

Dit is de code die detecteert of iemand root is.

Het volgende is een voorbeeld waarin daar rekening mee wordt gehouden. Omdat root elk wachtwoord kan veranderen, hoeft het programma geen moeite te doen met de controles die het gewoonlijk uitvoert om te zien welke wachtwoorden de persoon toestemming heeft om te veranderen. Dus, voor root, slaat het deze controles over en verlaat het de controle functie.

Advertentie

Met de kern Linux commando’s en hulpprogramma’s, kunt u er zeker van zijn dat ze zijn ingebouwd in de beveiliging en dat de code vele malen is gecontroleerd. Natuurlijk, er is altijd de dreiging van nog onbekende exploits. Echter, patches of updates verschijnen snel om nieuw ontdekte kwetsbaarheden te verhelpen.

Het is software van derden – vooral software die niet open-source is – waar je uiterst voorzichtig mee moet zijn SUID. 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 blootstelt aan risico’s. Je wilt niet de privileges van een programma verhogen dat zichzelf en de persoon die het uitvoert niet correct zal besturen.

Linux commando’s die SUID gebruiken

Hieronder staan enkele Linux commando’s die de SUID bit gebruiken om het commando verhoogde privileges te geven wanneer het door een gewone gebruiker wordt 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 gemarkeerd zijn, wat aangeeft dat de SUID bit is ingesteld.

Advertentie

De permissies op een bestand of directory worden meestal weergegeven door drie groepen van drie tekens: rwx. Deze staan voor lezen, schrijven en uitvoeren. Als de letters aanwezig zijn, is die toestemming verleend. Staat er echter een koppelteken (-) in plaats van een letter, dan is die permissie niet gegeven.

Er zijn drie groepen van deze permissies (van links naar rechts): die voor de eigenaar van het bestand, voor leden van de groep van het bestand, en voor anderen. Wanneer het SUID bit op een bestand is gezet, staat een “s” voor de execute permissie van de eigenaar.

Als het SUID bit is gezet op een bestand dat geen executeerbare mogelijkheden heeft, geeft een hoofdletter “S” dit aan.

We zullen een voorbeeld bekijken. Gewone gebruiker dave typt het passwd commando:

passwd

Advertentie

Het passwd commando vraagt dave om zijn nieuwe wachtwoord. We kunnen het ps commando gebruiken om de details van lopende processen te zien.

We zullen ps gebruiken met grep in een ander terminal venster en zoeken naar het passwd proces. We zullen ook de -e (elk proces) en -f (volledig formaat) opties gebruiken met ps.

We typen het volgende commando:

ps -e -f | grep passwd

Twee regels worden gerapporteerd, waarvan de tweede het grep proces is dat zoekt naar commando’s met de string “passwd” erin. Het is echter de eerste regel die ons interesseert, omdat dat de regel is voor het passwd proces dat dave heeft gestart.

We kunnen zien dat het passwd proces hetzelfde loopt als wanneer root het had gestart.

De SUID Bit instellen

Het is eenvoudig om de SUID bit te veranderen met chmod. De u+s symbolische modus stelt de SUID bit in en de u-s symbolische modus wist de SUID bit.

Advertentie

Om enkele van de concepten van de SUID bit te illustreren, hebben we een klein programma gemaakt genaamd htg. Het staat in de root directory van de dave gebruiker, en het heeft het SUID bit niet ingesteld. Wanneer het wordt uitgevoerd, toont het de echte en effectieve gebruikers-ID’s (UID).

De echte UID behoort toe aan de persoon die het programma heeft gestart. De effectieve ID is de account waarmee het programma is gestart.

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 zoals een normaal programma zou moeten doen.

Advertentie

Laten we het kopiëren naar de /usr/local/bin directory zodat anderen het kunnen gebruiken.

We typen het volgende, met chmod om de SUID bit in te stellen, en controleren dan of het is ingesteld:

sudo cp htg /usr/local/bin
sudo chmod u+s /usr/local/bin/htg
ls -hl /usr/local/bin/htg

Dus, het programma is gekopieerd, en de SUID bit is ingesteld. We voeren het programma opnieuw uit, maar deze keer in de map /usr/local/bin:

htg

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

htg

Advertentie

De echte ID is mary, en de effectieve ID is root. Het programma draait met de rechten van de root-gebruiker.

GERELATEERD: How to Use the chmod Command on Linux

The SGID Bit

The Set Group ID (SGID) bit is very similar to the SUID bit. Wanneer het SGID bit is ingesteld op een uitvoerbaar bestand, wordt de effectieve groep ingesteld op de groep van het bestand. Het proces draait met de permissies van de leden van de groep van het bestand, in plaats van de permissies van de persoon die het gestart heeft.

We hebben ons htg programma aangepast zodat het ook de effectieve groep laat zien. We veranderen de groep van het htg programma in de standaard groep van gebruiker mary, mary. We zullen ook de symbolische modi u-s en g+s gebruiken met chown om de SUID bit te verwijderen en de SGID in te stellen.

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

U ziet de SGID bit aangeduid door de “s” in de groepstoestemmingen. Merk ook op dat de groep is ingesteld op mary en de bestandsnaam is nu geel gemarkeerd.

Advertentie

Voordat we het programma uitvoeren, laten we vaststellen tot welke groepen dave en mary behoren. We gebruiken het id commando met de -G (groups) optie, om alle groep ID’s af te drukken. Vervolgens voeren we het programma htg uit als dave.

We typen de volgende opdrachten:

id -G dave
id -G mary
htg

De ID van de standaardgroep voor mary is 1001, en de effectieve groep van het programma htg is 1001. Dus, hoewel het is gestart door dave, wordt het uitgevoerd met de rechten van de leden in de mary groep. Het is hetzelfde als wanneer dave lid was geworden van de mary groep.

Laten we de SGID bit toepassen op een directory. Eerst maken we een directory aan genaamd “work,” en veranderen de groep in “geek.” Vervolgens zetten we de SGID bit op de directory.

Wanneer we ls gebruiken om de instellingen van de directory te controleren, zullen we ook de -d (directory) optie gebruiken, zodat we de details van de directory zien, niet de inhoud.

We typen de volgende commando’s:

sudo mkdir work
sudo chown dave:geek work
sudo chmod g+s work
ls -lh -d work

Advertentie

De SGID bit en “geek” groep zijn ingesteld. Deze zullen van invloed zijn op alle items die in de work directory worden gemaakt.

We typen het volgende om de work directory binnen te gaan, een directory genaamd “demo,” aan te maken en de eigenschappen ervan te controleren:

cd work
mkdir demo
ls -lh -d demo

De SGID bit en “geek” groep worden automatisch toegepast op de “demo” directory.

Let op het volgende om een bestand te maken met het touch commando en controleer de eigenschappen:

touch useful.sh
ls -lh useful.sh

Advertentie

De groep van het nieuwe bestand wordt automatisch ingesteld op “geek.”

GERELATEERD: How to Use the chown Command on Linux

The Sticky Bit

The sticky bit dankt zijn naam aan zijn historische doel. Wanneer het is ingesteld op een uitvoerbaar bestand, geeft het aan het besturingssysteem aan dat de tekstgedeelten van het uitvoerbare bestand in de swap moeten worden bewaard, zodat ze sneller opnieuw kunnen worden gebruikt. Op Linux heeft de sticky bit alleen effect op een directory-het instellen op een bestand zou geen zin hebben.

Als je de sticky bit op een directory instelt, kunnen mensen alleen bestanden verwijderen die bij hen horen in die directory. Ze kunnen geen bestanden verwijderen die van iemand anders zijn, ongeacht de combinatie van bestandsrechten die op de bestanden zijn ingesteld.

Dit stelt je in staat om een directory te maken die iedereen -en de processen die ze starten- kunnen gebruiken als gedeelde bestandsopslag. De bestanden zijn beschermd omdat, nogmaals, niemand de bestanden van iemand anders kan verwijderen.

Advertentie

Laten we een directory maken genaamd “shared.” We gebruiken de o+t symbolische modus met chmod om de sticky bit op die directory te zetten. Vervolgens bekijken we de permissies van die directory, evenals van de directory’s /tmp en /var/tmp.

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 klevende bit is ingesteld, wordt de uitvoerbare bit van de “andere” set bestandspermissies op “t” gezet. De bestandsnaam is ook blauw gemarkeerd.

De mappen /tmp en /var/tmp zijn twee voorbeelden van mappen waarin alle bestandspermissies zijn ingesteld voor de eigenaar, groep en anderen (daarom zijn ze groen gemarkeerd). Ze worden gebruikt als gedeelde locaties voor tijdelijke bestanden.

Advertentie

Met deze permissies, zou iedereen, theoretisch, in staat moeten zijn om alles te doen. Echter, de sticky bit overruled ze, en niemand kan een bestand verwijderen dat niet van hem is.

Herinneringen

Het volgende is een snelle checklist van wat we hierboven hebben behandeld voor toekomstige referentie:

  • SUID werkt alleen op bestanden.
  • Je kunt SGID toepassen op mappen en bestanden.
  • U kunt de klevende bit alleen op mappen toepassen.
  • Als de indicatoren “s“, “g“, of “t” in hoofdletters verschijnen, is de uitvoerbare bit (x) niet ingesteld.
Dave McKay
Dave McKay gebruikte voor het eerst computers toen ponsband nog in de mode was, en hij programmeert sindsdien. Na meer dan 30 jaar in de IT industrie, is hij nu een full-time technologie journalist. Tijdens zijn loopbaan heeft hij gewerkt als freelance programmeur, manager van een internationaal software ontwikkelingsteam, een IT services project manager, en, meest recent, als een Data Protection Officer. Dave is een Linux evangelist en voorstander van open source.Read Full Bio ”

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.