---
title:  "Bestands- en mappenrechten"
excerpt: "Wat eerst begint als een simpel gegeven, verbergt toch een aantal zaken die een zekere complexiteit meebrengen. Sticky bit, SUID, GUID en Umask verklaren we hier."
date:   "2023-07-22T12:00:00.000Z"
author: Eli Winderickx
hero_image: /cover_permissions.png
category: Security,Permissies,Expert Tip
---
## De basis
Rechten binnen Linux worden gemakkelijk als een numerieke waarde voorgesteld en werken met een groepering van drie verzamelingen aan rechten. Die drie zijn:
- Eigenaar (Owner)
- Groep (Group)
- Anderen (Other)

Een voorbeeld van die rechten is dan `0775`. De eerste `0` overlopen we later. Daarna volgt het cijfer voor Eigenaar, Groep en tot slot Anderen. Ook de vertaling van die drie laatste cijfers is vrij eenvoudig te vertalen als we het cijfer omzetten naar bit waarde. Voor het cijfer `7` is dat `111`

1 = 4 -> Lezen (Read)\
1 = 2 -> Aanpassen (Write)\
1 = 1 -> Uitvoeren (Execute)

## Standaard rechten
In Linux worden er standaard rechten voorzien. Voor mappen is `777` en bestanden `666`. Die Uitvoeren-rechten zijn nodig op mappen om te kunnen zien wat de inhoud is van die map. Voor bestanden is het niet veilig om standaard uitvoer-rechten te geven.

Als jij nu een nieuw bestand aanmaakt met `touch bestand` of je maakt een nieuwe map aan met `mkdir map` en je controleert de rechten met `ls -l`, `stat map` of `stat bestand`, zal je merken dat deze niet de standaard rechten krijgt. De reden daarvoor is dat er bovenop de standaard rechten nog een extra systeem zit die rechten afneemt; `umask`

### Umask
Het `umask` commando komt standaard met de shell meegeleverd zoals `cd`, `export` of `history`. Als je een `man umask` uitvoert in verschillende shells, krijg je dan ook verschillende pagina's te zien. In mijn mening is de `man`-pagina over umask binnen bash niet duidelijk maar als je binnen `fish` de `man`-pagina opvraagt, krijg je veel duidelijkere uitleg. Hier overlopen we het even.

Je kan `umask` zonder extra parameters uitvoeren om de ingestelde waarde terug te krijgen. In mijn geval is dat `0022`. Deze cijfers worden bit-gewijs afgetrokken van de standaard rechten. Voor mappen wordt dat dan `0755` en voor bestanden `0644`. Wil je dit leesbaarder zien kan je de `-S` flag meegeven en dan krijg je te zien welke rechten maximaal bewaard worden.
```
u=rwx,g=rx,o=rx
```

We kunnen dit niveau verhoren of verlagen door ofwel in cijfer of letter waarde het rechten niveau mee te geven aan het `umask`-commando. Hieronder geven we aan dat de standaard rechten mogen gebruikt worden.

```
umask 0000
# Ofwel
umask u=rwx,g=rwx,o=rwx
```

## Het eerste cijfer
Vooraan de rechten zie je vaak een `0` terugkomen. Dit is niet per ongeluk. Deze gaat een extra instelling bewaren voor ons, namelijk of we een `Set User ID`, `Set Group ID` of een `Sticky bit` hebben ingesteld. Ook dit cijfer kan binair opgebouwd worden;
1 = 4 -> SUID\
1 = 2 -> SGID\
1 = 1 -> Sticky bit

> Een ander ezelbruggetje voor de `s` is speciaal

### Set User ID
Deze waarde is enkel relevant als je dit toepast op een bestand en specifiek een uitvoerbaar bestand. Hiermee gaat het namelijk lijken alsof de eigenaar het bestand uitvoert, ook al doet een andere gebruiker dat. Dit vooral handig voor commando's zoals `passwd` waar iedereen `/etc/shadow` moet kunnen manipuleren op een veilige manier. Dit kan je toepassen door:
```
chmod 4774 script.sh # In cijfers moeten we de volledige rechtenreeks steeds meegeven
# Ofwel
chmod u+s script.sh
```

### Set Group ID
De `SGID` kan je instellen op zowel mappen als bestanden. Toegepast op een map krijgen nieuwe items onder die map automatisch de groep van de parent map mee. Bijvoorbeeld hebben we de map `accounting` waar ook een groep `accounting` is ingesteld. Hier kunnen we de `SGID` instellen met:
```
chmod 2775 accounting
# Ofwel
chmod g+s accounting
```

Als gebruiker `milly` hieronder een nieuwe map aanmaken, gaat deze ook de group `accounting` krijgen en niet `milly` wat standaard het geval is. Zo kan iedereen binnen de `accounting` group genieten van `milly`'s nieuwe map.

Daarnaast kunnen we de `SGID` ook instellen op een bestand. Wordt dat bestand uitgevoerd, dan zal dat met de rechten van die groep gedaan worden. Gelijkaardig aan de `SUID` instelling

### Sticky bit
Nog zo'n vreemde vogel is de `Sticky bit`. Als we deze instellen op een map kunnen nieuwe items daaronder enkel verwijderd of aangepast worden door de eigenaar of root. Is een andere gebruiker lid van eenzelfde groep die ingesteld is op zo'n item onder die map, dan kan die dat niet aanpassen of verwijderen.

In te stellen met:
```
chmod 1775 map
# Ofwel
chmod o+t map
```