# Llistes de Control d'Accés (ACL)

# 1. Introducció

Les **llistes de control d'accés** (ACL, de l'anglès *Access Control Lists*) són mecanismes de seguretat que defineixen quins usuaris, grups o processos tenen permís per accedir a recursos del sistema (fitxers, directoris, serveis de xarxa, etc.) i amb quins permisos concrets.

Les ACL amplien el model de permisos tradicional d'Unix/Linux (propietari/grup/altres) permetent assignar permisos individuals a qualsevol usuari o grup, sense necessitat de canviar la propietat dels fitxers.

# 2. ACL en sistemes de fitxers Linux

## 2.1. Model de permisos tradicional vs. ACL

El model POSIX clàssic assigna permisos en tres nivells:

| Nivell     | Descripció                     |
|------------|-------------------------------|
| `user`     | El propietari del fitxer       |
| `group`    | El grup propietari             |
| `other`    | La resta d'usuaris             |

Aquest model és limitat: no permet donar permisos a un usuari concret sense modificar el grup ni la propietat del fitxer.

Les **POSIX ACL** solucionen aquest problema afegint entrades addicionals per a usuaris i grups específics.

## 2.2. Requisits

El sistema de fitxers ha d'estar muntat amb suport ACL. En sistemes moderns (ext4, xfs, btrfs), les ACL estan habilitades per defecte.

Per verificar-ho:

```bash
tune2fs -l /dev/sdaX | grep "Default mount options"
```

O comprovant que al `/etc/fstab` apareix l'opció `acl` (en alguns sistemes és implícita).

## 2.3. Eines principals: `getfacl` i `setfacl`

### Instal·lació

```bash
# Debian/Ubuntu
sudo apt install acl

# Fedora/RHEL
sudo dnf install acl

# Arch/Manjaro
sudo pacman -S acl
```

### Veure les ACL d'un fitxer

```bash
getfacl fitxer.txt
```

Exemple de sortida:

```nano
# file: fitxer.txt
# owner: ramon
# group: professors
user::rw-
user:alumne1:r--
group::r--
group:admins:rw-
mask::rw-
other::---
```

### Establir permisos ACL

```bash
# Donar permisos de lectura i escriptura a un usuari concret
setfacl -m u:alumne1:rw fitxer.txt

# Donar permisos a un grup
setfacl -m g:admins:rx /directori/

# Eliminar una entrada ACL concreta
setfacl -x u:alumne1 fitxer.txt

# Eliminar totes les ACL del fitxer
setfacl -b fitxer.txt
```

### ACL per defecte en directoris

Les **ACL per defecte** s'apliquen als fitxers i subdirectoris creats dins d'un directori:

```bash
setfacl -d -m u:alumne1:rw /directori/
```

Tots els nous fitxers creats dins de `/directori/` heretaran aquesta ACL.

## 2.4. La màscara (mask)

La màscara limita els permisos efectius de les entrades ACL per a usuaris i grups (excepte el propietari i `other`). Es calcula automàticament, però es pot ajustar:

```bash
setfacl -m mask::r-- fitxer.txt
```

> **Important:** Si un usuari té `rw-` a la seva ACL, però la màscara és `r--`, el permís efectiu serà `r--`.

## 2.5. Còpia i restauració d'ACL

```bash
# Exportar les ACL d'un directori
getfacl -R /directori/ > acl_backup.txt

# Restaurar les ACL
setfacl --restore=acl_backup.txt
```

# 3. Resum d'ordres (referència ràpida)

```bash
# Veure ACL
getfacl fitxer

# Afegir permís a usuari
setfacl -m u:usuari:rwx fitxer

# Afegir permís a grup
setfacl -m g:grup:rx fitxer

# ACL per defecte en directori
setfacl -d -m u:usuari:rw /dir/

# Eliminar una entrada
setfacl -x u:usuari fitxer

# Eliminar totes les ACL
setfacl -b fitxer

# Backup d'ACL
getfacl -R /dir/ > backup_acl.txt

# Restaurar ACL
setfacl --restore=backup_acl.txt
```

# 4. Referències

- `man acl` — Documentació POSIX ACL al sistema
- `man setfacl` — Manual de l'ordre `setfacl`
- `man getfacl` — Manual de l'ordre `getfacl`
- [Arch Wiki: Access Control Lists](https://wiki.archlinux.org/title/Access_Control_Lists)

#### Versions d'aquest document

+ HTML - [acl.html](https://proferamon.com/tic/acl.html)
+ PDF - [acl.pdf](https://proferamon.com/tic/docs/acl.pdf)
+ ODT - [acl.odt](https://proferamon.com/tic/odt/acl.odt)
+ MD - [acl.md](https://proferamon.com/tic/md/acl.md)

[Domini Públic (CC0)](https://creativecommons.org/publicdomain/zero/1.0/deed.ca)

