---
title:  "Rechtenbeheer on steroids"
excerpt: "Het standaard rechtenbeheer is vrij beperkt in toegang regelen. Gelukkig kan je met ACL een heel pak meer. Hier meer daarover!"
date:   "2023-10-12T06:00:00.000Z"
author: Eli Winderickx
hero_image: /cover_ACL.png
category: ACL,Linux,Beveiliging
---
## Discretionary Access Control
Een moeilijke naam voor het standaard rechtensysteem in Linux. Dit systeem bepaalt wie wat mag doen wel welke bestanden of mappen. Standaard is dat opgedeeld in drie groeperingen van rechten;
- Gebruiker (of eigenaar)
- Groep
- Alle andere gebruikers

Per deze drie groepen kan je opnieuw drie rechten geven; Read, Write en Execute. Deze rechten zijn dan in te stellen met chown (change owner) om de eigenaar of groep te veranderen en chmod (change mode) om de rechten voor de drie entiteiten aan te passen. De basiskennis gaat verder. Je kan de rechten instellen met symbolische of numerieke waarden. Waar je bij symbolische waarden volledig moet uitschrijven welke rechten voor eigenaar, groe. en anderen zijn (u=rwx,g=rwx,o=rwx)en voor numerieke waarden kan je een snel sommetje maken. (777 => iedere 7 is 4,voor leesrechten, plus 2, voor schrijfrechten plus 1 voor uitvoerrechten). Meer over die rechten in [een eerder post](https://blog.winderickx.me/posts/22Jul-Permissions)

## Probleemstelling
In sommige gevallen heb je meerdere teams die niet noodzakelijke dezelfde rechten mogen hebben maar toch moeten samenwerken in dezelfde locatie. Het basisrechtenbeheer systeem schiet hier tekort. Als we leden van één groep bepaalde rechten geven, kunnen we niet een andere groep andere rechten geven zonder dat we alle andere gebruikers diezelfde rechten ook geven.

## De oplossing: ACL
Access Control List is een uitbreiding op het basis rechtensysteem en stelt ons in staat om meerdere groepen en gebruikers rechten te geven op bestanden. Ieder bestand en map heeft nog steeds slechts één eigenaar en groep eigenaar maar daarnaast kunnen extra rechten verdeeld worden. De tools hiervoor zitten standaard in onze favoriete Distro's zoals RedHat, Rocky Linux en uiteraard Fedora genaamd `getfacl` en `setfacl`.

Wanneer we `getfacl` uitvoeren op een map, krijgen we de standaard rechten te zien maar iets leuker gepresenteerd. Daarnaast kunnen we ook een flag `-t` meegeven om dezelfde info ook in kollommen gepresenteerd te krijgen.

```bash
getfacl .
# file: .
# owner: ewinderickx
# group: ewinderickx
user::rwx
group::---
other::---

getfacl -t .
# file: .
USER   ewinderickx  rwx
GROUP  ewinderickx  ---
other
```

### Extra rechten instellen
Na `getfacl`, gaan we aan de slag met `setfacl`. Hiermee kunnen we de extra rechten beheren. De syntax om extra rechten toe te voegen is heel simpel.

```bash
# Instellingen voor gebruikers of groepen
setfacl -m user:bob:rw /home/development/
setfacl -m group:devtest:rwx /home/development/
# Kortere versie om alles ineens uit te voeren
setfacl -m u:bob:rw,g:devtest:rwx /home/development/
```

De gebruiker `bob` heeft nu additioneel aan de eigenaar en de groep eigenaar ook lees en schrijfrechten. De `dev` groep heeft daarbovenop ook nog eens uitvoerrechten. Dat terwijl andere gebruikers helemaal geen rechten moeten hebben.

Als we nu `getfacl` uitvoeren op de `/home/development` map ziet het er normaal zo uit. We hebben hier 770 ingesteld als basis rechten met de SGID en sticky bit. De groepseigenaar zal nu developers blijven en iedereen kan enkel bestanden verwijderen die daar eigenaar van is.

```
# file: .
# owner: root
# group: developers
# flags: -st
user::rwx
user:bob:rw-
group::rwx
group:devtest:rwx
mask::rwx
other::---
```

### Default rechten
Complexe rechten zoals die met ACL worden standaard niet toegepast. Als je de `setfacl` uitvoert zoals hierboven, voer je eenmalig een operatie uit. Dat is niet handig als er nieuwe bestanden worden aangemaakt. Hiervoor is er wel nog de `defaults` optie in ACL. Als je de rechten instelt op een map met de `-d` flag, worden de rechten automatisch toegepast op de nieuwe bestanden onder die map.

```bash
setfacl -d -m u:bob:rw,g:devtest:rwx /home/developers
```

Dat geeft dan:
```
# file: .
# owner: root
# group: developers
# flags: -st
user::rwx
user:bob:rw-
group::rwx
group:devtest:rwx
mask::rwx
other::---
default:user::rwx
default:user:bob:rw-
default:group::rwx
default:group:devtest:rwx
default:mask::rwx
default:other::---
```

Een bestand dat iemand uit de developers groep aanmaakt, krijgt nu dus ook de rechten van voor devtest en bob zoals hierboven staat. Handig maar vooral ook extra veilig!