# Access Control List

Access Control List (ACL) — liste de contrôle d'accès en français — désigne traditionnellement deux choses en sécurité informatique :
* un système permettant de faire une gestion plus fine des droits d'accès aux fichiers que ne le permet la méthode employée par les systèmes UNIX.
* en réseau, une liste des adresses et ports autorisés ou interdits par un pare-feu.
La notion d'ACL est cela dit assez généraliste, et on peut parler d'ACL pour gérer les accès à n'importe quel type de ressource.
Une ACL est une liste d’Access Control Entry (ACE) ou entrée de contrôle d'accès donnant ou supprimant des droits d'accès à une personne ou un groupe.

## ACL sur les fichiers
### Sous UNIX

Sous UNIX, les ACL ne remplacent pas la méthode habituelle des droits. Pour garder une compatibilité, elles s'ajoutent à elle au sein de la norme POSIX 1re.
Les systèmes de type UNIX n'acceptent, classiquement, que trois types de droits :
* lecture (Read)
* écriture (Write)
* exécution (eXecute)
pour trois types d'utilisateurs :
* le propriétaire du fichier
* les membres du groupe auquel appartient le fichier
* tous les autres utilisateurs
Cependant, cette méthode ne couvre pas suffisamment de cas, notamment en entreprise. En effet, les réseaux d'entreprises nécessitent l'attribut de droits pour certains membres de plusieurs groupes distincts, ce qui nécessite diverses astuces lourdes à mettre en œuvre et à entretenir sous Unix.
L'intervention de l'administrateur est souvent nécessaire pour créer les groupes intermédiaires qui permettront de partager des fichiers entre plusieurs utilisateurs ou groupes d'utilisateurs, tout en les gardant confidentiels face aux autres.
Les ACL comblent ce manque en donnant à n'importe quel utilisateur, ou groupe, un des trois droits (lecture, écriture et exécution), et cela sans limitation du nombre d'utilisateurs à ajouter.
Mac OS X gère les ACL depuis la version 10.4 (Tiger).

#### Utilisation

Les deux commandes permettant de visualiser les droits ACL et de les modifier sont, sous UNIX :
* getfacl : pour visualiser
* setfacl : pour modifier
Il faut néanmoins avoir ajouté dans le fichier /etc/fstab, en option, "acl".

### Windows

Les ACL sont implémentés par le système de fichiers NTFS, et prises en charge par Windows NT 4.0 et ses successeurs (Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows 10, Windows 11, Windows Server 2008 R2 et Windows Server 2012 R2, Windows Server 2016, Windows Server 2019). Sous NTFS, les ACL peuvent être définis sur des fichiers ou des répertoires et acceptent les types de droits suivants :
* parcours d'un dossier ;
* liste d'un dossier ;
* lecture des méta-données ;
* ajout de fichier ;
* ajout de répertoire ;
* ajout de données à un fichier existant ;
* modification des droits ;
* suppression ;
* lecture ;
* appropriation ;
* exécution.
Ces droits s'appliquent soit à des utilisateurs (réels, virtuels - tel le propriétaire du fichier - ou systèmes), soit à des groupes d'utilisateurs (réels, virtuels ou systèmes). L'application d'un droit à un utilisateur ou à un groupe est nommé ACE. Il est possible d'autoriser ou de rompre l'héritage hiérarchique des ACL entre les différents répertoires, ainsi que de paramétrer le type d'héritage (sur les dossiers, les fichiers, à tous niveaux de profondeur, uniquement le premier, etc.).
Sous les systèmes Windows NT, une distinction supplémentaire est faite entre deux types d'ACL : les listes de contrôle d'accès discrétionnaire (DACL pour Discretionary Access Control List) et les listes de contrôle d'accès système (SACL pour System Access Control List). Les DACL permettent de contrôler les accès aux objets et les SACL permettent de contrôler l'audition (on parle parfois d'ACE d'audit) des accès aux objets. Quand le type d'ACL n'est pas précisé, il s'agit toujours de listes de contrôle d'accès discrétionnaire.
Le nouveau système de fichiers, exFAT, proposé depuis le Service Pack 1 de Windows Vista et Windows CE 6 pour remplacer la FAT prend aussi en charge les ACL.

## En réseau

Une ACL sur un pare-feu ou un routeur filtrant, est une liste d'adresses ou de ports autorisés ou interdits par le dispositif de filtrage.
Les Access Control List sont divisés en trois grandes catégories, l'ACL standard, l'ACL étendue et la nommée-étendue.
* L'ACL standard ne peut contrôler que deux ensembles : l'adresse IP source et une partie de l'adresse IP de destination, au moyen de masque générique.
* L'ACL étendue peut contrôler l'adresse IP de destination, la partie de l'adresse de destination (masque générique), le type de protocole (TCP, UDP, ICMP, IGRP, IGMP, etc.), le port source et de destination, les flux TCP, IP TOS (Type of service) ainsi que les priorités IP.
* L'ACL nommée-étendue est une ACL étendue à laquelle on a affecté un nom.
Par exemple, sous Linux c'est le système Netfilter qui gère l'ACL. La création d'ACL qui autorise le courrier électronique entrant, depuis n'importe quelle adresse IP, vers le port 25 (alloué communément à SMTP) se fait avec la commande suivante : iptables --insert INPUT --protocol tcp --destination-port 25 --jump ACCEPT
Iptables est la commande qui permet de configurer NetFilter.
Les ACL conviennent bien à des protocoles dont les ports sont statiques (connus à l'avance) comme SMTP, mais ne suffisent pas avec des logiciels comme BitTorrent où les ports peuvent varier.