Speciale Permissies in Linux: SUID, SGID, & Sticky Bit

Heb je ooit in een situatie gezeten waarin je een taak moest uitvoeren op een Linux-systeem, alleen om geconfronteerd te worden met een frustrerende toegangsweigering? Nou, zeg vaarwel tegen die problemen en verwelkom de wereld van speciale rechten in Linux!

Deze tutorial is je ticket om de fijnere punten van speciale rechten in Linux onder de knie te krijgen — Sticky Bit, Set User ID (SUID) en Set Group ID (SGID). Deze speciale rechten bieden een hoger niveau van beveiligingscontrole.

Lees verder en beheer je bestanden veilig met precisie en vertrouwen!

Vereisten

Voordat je in de details van speciale rechten in Linux duikt, zorg ervoor dat je een Linux-machine hebt. Deze tutorial gebruikt Ubuntu 22.04 LTS (Jammy Jellyfish) voor hands-on demonstraties.

Bestanden uitvoeren met Speciale Rechten in Linux (SUID)

Normaal gesproken bepalen Linux-bestandsrechten de mogelijkheid van een gebruiker om een bestand te lezen, schrijven of uit te voeren op basis van hun rechten en die van hun groep. Toch zijn er situaties waarin een gebruiker een bestand moet uitvoeren met de rechten van de eigenaar van het bestand in plaats van hun eigen rechten.

Bijvoorbeeld, stel je een programma voor dat alleen door rootgebruikers kan worden uitgevoerd, maar er is een noodzaak voor een normale gebruiker om het uit te voeren voor een specifieke taak. In dergelijke gevallen is SUID onmisbaar.

Om te zien hoe SUID-machtigingen kunnen worden ingesteld, volg deze stappen:

1. Open de terminal en voer de volgende commando’s uit om een gebruiker (useradd) met de naam A-gebruiker (willekeurig) aan te maken en geef hem een wachtwoord (passwd).

sudo useradd A-user
sudo passwd A-user
Creating a new user

2. Voer vervolgens het onderstaande stat-commando uit om de bestaande machtigingen van het cat-commando te bekijken.

stat /usr/bin/cat

Let op de toegangsmachtigingen hieronder, omdat je ze later nodig zult hebben voor vergelijkingen:

  • 0755 – Staat het bestand toe om te worden uitgevoerd met de machtigingen van de eigenaar, waardoor niet-bevoorrechte gebruikers verhoogde rechten krijgen wanneer ze het bestand uitvoeren.
  • -rwxr-xr-x – Stelt toestemming in voor de eigenaar om het bestand te lezen, schrijven en uit te voeren (rwx), terwijl groepsleden en andere gebruikers het bestand kunnen lezen en uitvoeren (r-x en r-x).
Viewing access permissions of the cat command

3. Voer nu het onderstaande chmod-commando uit, dat geen uitvoer geeft maar de SUID-bit instelt op het cat-commando.

Dit commando maakt het mogelijk dat het cat-commando wordt uitgevoerd met de machtigingen van de bestandseigenaar in plaats van de machtigingen van de gebruiker die het commando uitvoert.

? Merk op dat het gebruik van SUID met voorzichtigheid moet gebeuren, omdat dit potentieel beveiligingsrisico’s kan introduceren als het niet goed wordt geïmplementeerd. Zorg ervoor dat je SUID alleen toepast op vertrouwde commando’s en bestanden.

sudo chmod u+s /usr/bin/cat

4. Nadat je de SUID-bit hebt ingesteld, voer je het volgende stat-commando uit om de SUID-bit te controleren door de machtigingen van het cat-commando opnieuw te controleren.

stat /usr/bin/cat

Als het succesvol is, zie je het volgende, waarbij je een vergelijking maakt met de informatie die je hebt genoteerd in stap twee:

  • 0755 veranderd naar 4755, waar het getal 4 de SUID-bit vertegenwoordigt.
  • -rwxr-xr-x veranderd naar -rwsr-xr-x, waar s respectievelijk de gebruikersuitvoer (x) representeert.
Verifying the SUID bit

5. Voer het onderstaande cat-commando uit om de machtiging van de momenteel ingelogde gebruiker te testen om toegang te krijgen tot het /etc/shadow-bestand. Dit bestand is een kritiek systeembestand waarin versleutelde gebruikerswachtwoorden en gerelateerde informatie worden opgeslagen, die alleen toegankelijk zijn voor een root-gebruiker.

Standaard laat het cat-commando je de inhoud van een bestand in Linux bekijken. Maar dit gedrag geldt niet altijd voor elk bestand.

cat /etc/shadow

De onderstaande boodschap verschijnt omdat de huidige gebruiker geen toestemming heeft om het bestand te openen.

Viewing the /etc/shadow file’s content via a user without appropriate permissions

6. Voer nu elk van de onderstaande commando’s uit om over te schakelen (su) naar de nieuwe gebruiker (A-gebruiker) en probeer opnieuw toegang te krijgen tot het bestand /etc/shadow.

Deze keer wordt het cat-commando uitgevoerd met de rechten van de bestandseigenaar (meestal root) in plaats van de rechten van de gebruiker die het commando heeft uitgevoerd.

# Schakel over naar A-gebruiker
su A-user
# Bekijk de inhoud van het bestand /etc/shadow
cat /etc/shadow

Omdat je tijdelijk toestemming hebt verleend aan A-gebruiker om de inhoud van dat bestand te lezen, krijg je een uitvoer zoals hieronder.

Viewing the /etc/shadow file’s content

7. Om veiligheidsredenen voer je de volgende commando’s uit om uit te exiten uit de huidige gebruiker (A-gebruiker) te gaan en de rechten van het cat-commando terug te zetten naar de oorspronkelijke staat.

exit
sudo chmod u-s /usr/bin/cat
Removing the SUID bit from the cat command

8. Voer tot slot het onderstaande commando uit om te controleren of het SUID-bit is verwijderd.

stat /usr/bin/cat

Merk op dat het SUID-bit 4 en s niet langer in de toegangsrechten voorkomen.

Confirming the SUID bit removal

Het inschakelen van samenwerkingsworkflows in Linux-mappen (SGID)

Het uitvoeren van bestanden met speciale rechten in Linux via SUID werkt ongetwijfeld goed. Maar wat als je streeft naar samenwerkingsworkflows, waarbij meerdere gebruikers samenwerken aan projecten? Meestal moet je ervoor zorgen dat nieuw gemaakte bestanden de groepseigenaar van de bovenliggende map erven.

Wanneer je met dit scenario wordt geconfronteerd, blijkt SGID de game-changer te zijn. Deze krachtige functie vereenvoudigt het beheer van gedeelde resources en verbetert op groepen gebaseerde workflows in Linux-omgevingen.

Om te zien hoe de SGID werkt, maak je een groep aan, voeg je gebruikers toe, stel je SGID-machtigingen in op een map en test je de functionaliteit als volgt:

1. Voer de volgende opdrachten uit om in te loggen als de rootgebruiker en een nieuwe groep met de naam demo (willekeurig) aan te maken. Deze groep wordt gebruikt om de SGID-functionaliteit te testen.

Deze opdrachten doen geen

# Schakel over naar root
sudo su
# Maak een nieuwe groep aan
groupadd demo
Switching to root and creating a job

2. Voer vervolgens de onderstaande opdrachten uit om twee gebruikers (userA en userB) aan te maken die je zult gebruiken om een samenwerkingsomgeving te simuleren.

useradd -s /bin/bash userA
passwd userA

useradd -s /bin/bash userB
passwd userB
Creating users with passwords for simulating a collaborative environment

3. Na het aanmaken van nieuwe gebruikers, voer de onderstaande usermod opdrachten uit, die geen uitvoer naar het terminal produceren maar de gebruikers (userA en userB) toevoegen aan de demo groep.

usermod -aG demo userA
usermod -aG demo userB

4. Voer nu elke onderstaande opdracht uit, maak een map (mkdir) genaamd /demo-dir (willekeurig) aan, en stel de gebruikers- en groepseigendommen van de map in op respectievelijk userA en demo.

? Als deze opdrachten succesvol zijn, produceren ze geen uitvoer, wat gedurende deze tutorial van toepassing is.

# Maak een map aan
mkdir /demo-dir
# Wijzig de eigendommen van de map
chown userA:demo /demo-dir

5. Voer vervolgens de volgende ls opdracht uit om de machtigingen van de map /demo-dir te bekijken.

ls -ld /demo-dir/

De uitvoer hieronder verifieert dat de gebruiker van de map /demo-dir is ingesteld op gebruikerA en de groep op demo.

Viewing the /demo-dir directory’s permissions

6. Met geverifieerde rechten, voer de chmod-opdracht hieronder uit om de SGID-bit in te stellen op de map /demo-dir/ als volgt:

  • g+s – Set the SGID bit on the /demo-dir/ directory.
  • o-rwx – Remove all permissions (read, write, execute) for others.
  • u+rwx – Grant read, write, and execute permissions to the owner.
  • g+rwx – Grant read, write, and execute permissions to the group.
chmod g+s,u+rwx,g+rwx,o-rwx /demo-dir/

7. Nadat SGID is ingesteld, voer de volgende opdracht uit om de rechten van de map /demo-dir te verifiëren.

stat /demo-dir

Als het succesvol is, zie je de SGID-bit ingesteld, weergegeven door het nummer 2 vóór de octale modusrechten en s in de groepseigenaar uitvoeren (x) toestemming plek (rws).

Verifying the SGID bit set to the /demo-dir directory

8. Voer vervolgens elke opdracht hieronder uit om een /home-map voor gebruikerA te maken.

mkdir /home/userA
chown userA:userA /home/userA

9. Voer de volgende opdrachten uit om over te schakelen (su) naar gebruikerA en een bestand (touch) genaamd tekstA.txt (willekeurig) te maken in de map /demo-dir.

Deze opdrachten hebben geen uitvoer (wat geldt voor de rest van deze tutorial), maar je zult de rechten van het bestand in de volgende stap verifiëren.

# Overschakelen naar gebruikerA
su - userA
# Map wijzigen
cd /demo-dir
# Een tekstbestand maken
touch textA.txt

10. Voer de onderstaande ls-opdracht uit om de rechten van het bestand tekstA.txt te bekijken.

ls -l textA.txt

Hieronder is het groepseigenaar van het bestand textA.txt demo, dat de primaire groep is van de maker, gebruikerA. Leden van de groep demo kunnen het bestand lezen en wijzigen, terwijl anderen het alleen kunnen lezen.

Om ervoor te zorgen dat nieuwe bestanden in de /demo-dir map de groepseigenaarschap van de map erven, moet een SGID-bit worden ingesteld op de map, die je in de volgende stappen zult behandelen.

Verifying the textA.txt file’s permissions

11. Voer nu de volgende commando’s uit om uit de huidige gebruiker (gebruikerA) te stappen en de SGID-bit (chmod g+s) in de /demo-dir map in te stellen

# Verlaat gebruikerA
exit
# Stel SGID in voor /demo-dir
chmod g+s /demo-dir
Setting the SGID bit to the /demo-dir directory

12. Zodra SGID is ingesteld, voer dan het onderstaande commando uit om te verifiëren dat de SGID-bit die je aan de /demo-dir map hebt toegevoegd.

stat /demo-dir

Zoals hieronder getoond, zul je merken dat de SUID-bit 2 is toegevoegd, en er is een s op de plek van de groepseigenaaruitvoering. Deze uitvoer bevestigt dat de SGID-bit succesvol is ingesteld op de /demo-dir map.

Verifying the SGID is set to the /demo-dir directory

13. Schakel vervolgens terug naar gebruikerA en maak een ander bestand genaamd testA.txt (willekeurig) aan in de /demo-dir map.

# Schakel over naar gebruikerA
su - userA
# Verander van map
cd /demo-dir
# Maak een tekstbestand aan
touch testA.txt

14. Nadat het is aangemaakt, voer dan het onderstaande ls commando uit om het eigenaarschap van het nieuwe bestand (testA.txt) te controleren.

ls -l testA.txt

Als de SGID zoals verwacht werkt, toont de uitvoer aan dat terwijl gebruikerA de eigenaar is, de groepseigendom demo is vanwege de SGID-bit ingesteld op de /demo-dir directory.

Verifying permissions of the testA.txt file

15. Maak nu een /home directory aan voor gebruikerB om de SGID-functionaliteit verder te testen.

mkdir /home/userB
chown userB:userB /home/userB

16. Schakel over naar gebruikerB en maak een bestand genaamd testB.txt (willekeurig) aan in dezelfde /demo-dir directory.

# Overschakelen naar gebruikerB
su - userB
# Verander van directory
cd /demo-dir
# Maak een tekstbestand aan
touch testB.txt
Switching to userB and creating the testB.txt file

17. Bekijk (ls) de informatie van het nieuwe bestand (testB.txt).

ls -l testB.txt

Controleer de eigenaar van het textB.txt bestand.

Checking the ownership of the textB.txt file

Beveiliging van Bestanden Binnen Directories (Sticky Bit)

Het inschakelen van samenwerkingsworkflows in Linux-directories bevordert teamwork en naadloze samenwerking. Maar wanneer je een beveiligde omgeving moet creëren voor effectief beheer van bestanden, komen de Sticky Bit-rechten van pas.

Door de Sticky Bit in te stellen, geef je in feite de “sleutels tot het kasteel” in handen van de eigenaar van het bestand, de eigenaar van de directory of de rootgebruiker. Dit zorgt ervoor dat alleen zij de bevoegdheid hebben om het bestand binnen de directory te verwijderen of hernoemen, wat een extra bescherming biedt voor gevoelige gegevens.

Om Sticky Bit-rechten in te stellen, moet je eerst een gedeelde directory maken met de volgende stappen:

1. Meld je aan als de rootgebruiker en maak een (gedeelde) map (mkdir) aan waar meerdere gebruikers bestanden kunnen maken.

# Schakel over naar root
sudo su
# Maak een map aan (gedeeld)
mkdir /shared-dir

2. Voer vervolgens de onderstaande opdrachten uit om de machtigingen van de /gedeelde-map map te wijzigen om schrijfmachtigingen te verlenen aan iedereen.

Het eerste getal (1) in 1777 stelt de Sticky Bit in, terwijl de rest (777) de map leesbaar, beschrijfbaar en uitvoerbaar maakt voor iedereen.

# Machtigingen wijzigen, stel de Sticky Bit in
chmod 1777 /shared-dir
# Bekijk de machtigingen van de map
ls -ld /shared-dir

De volgende zijn kenmerken of attributen van de Sticky Bit in een Linux-systeem:

Feature Function
Directory Protection When the Sticky Bit is set on a directory, it allows only the owner of a file within that directory to delete or rename their own files. Other users, even if they have write permissions to the directory, cannot delete or rename files owned by other users.
Shared Directories The sticky bit is handy for directories that are shared among multiple users. For example, on a system with a /tmp directory used by all users to store temporary files, setting the Sticky Bit prevents users from accidentally or maliciously deleting files owned by other users.

Hieronder zie je de letter ‘t’ in het laatste deel van het toestemmingsveld, wat aangeeft dat de Sticky Bit is ingesteld op de /gedeelde-map map.

Viewing permissions of the /shared-dir directory

3. Schakel over naar gebruikerA en maak een bestand genaamd bestandA.txt (willekeurig) aan in de /gedeelde-map map:

# Schakel over naar gebruikerA
su - userA
# Maak een tekstbestand aan
touch /shared-dir/fileA.txt

4. Log uit bij gebruikerA, schakel over naar gebruikerB, en maak een ander bestand genaamd bestandB.txt (willekeurig) aan in dezelfde /gedeelde-map map.

# Exit gebruikerA
exit
# Schakel over naar gebruikerB
su - userB
# Maak een tekstbestand aan
touch /shared-dir/fileB.txt

5. Nu, verlaat gebruikerB, schakel over naar gebruikerA, en probeer bestandB.txt van gebruikerB te verwijderen.

# Verlaat gebruikerB
exit
# Schakel over naar gebruikerA
su - userA
# Verwijder een bestand van gebruikerB
rm /shared-dir/fileB.txt

Je krijgt een output zoals hieronder, omdat alleen de eigenaar van het bestand wijzigingen kan aanbrengen of het bestand kan verwijderen.

Attempting to delete a file (fileB.txt) owned by another user (userB)

6. Voer tot slot de volgende opdracht uit (ls) om alle bestanden binnen de gedeelde map (/gedeelde-map) weer te geven.

ls /shared-dir/

Als de Sticky Bit-permissies werken, zie je dat het bestandB.txt bestand dat is gemaakt door gebruikerB veilig en ongeschonden is gebleven en niet is verwijderd.

Confirming the fileB.txt file still exists

Conclusie

Terwijl je deze verkenning van speciale machtigingen in Linux afrondt, heb je een krachtige set tools ontgrendeld: de SUID, SGID, en Sticky Bit. Gewapend met deze kennis kun je nu toegangsbeheer fijn afstemmen en je bestanden met precisie beveiligen.

Maar stop hier niet! Waarom probeer je niet een gedeelde map op te zetten met SGID en te experimenteren met hoe bestanden groepseigendom erven? De Linux-wereld ligt aan je voeten, en met elke onderneming zul je de kunst van het beveiligen van je systeem meester worden!

Source:
https://adamtheautomator.com/special-permissions-in-linux/