Sécurité - Les Access Control Lists (ACLs)

Décembre 2016


ACL


Outrepasser les droits de base d'un système Linux en utilisant les ACLs.


I. PREREQUIS


- Connaissance de base du système GNU/Linux
- Installation des logiciels
- Connaître l'arborescence d'un système GNU/Linux
- Être coutumier de la ligne de commande (shell ou terminal ou console)
- Commandes de base
- Notions de droits d'accès aux fichiers
- Gestion des utilisateurs d'un système GNU/Linux
- Kernel linux

Voir aussi les attributs de fichiers (surtout l'option -i
qui nous rappelle les droits d'accès) linux gestion des attributs de fichiers sur ext2

Ouf, tout ça. Ben, alors les ACLs ne sont faites que pour les gurus GNU/Linux?!
Non, ne soyez pas pressé d'en tirer des conclusions.
Après la lecture de ce petit tutorial vous serez capable de mettre en oeuvre les ACLs.
Cependant le tutorial ne vous apprendra pas des stratégies à mettre en place mais seulement comment on peut utiliser les ACLs et aussi quelques raisons de le faire.

II. Introduction


Les ACLs offrent la possibilité de positionner des droits d'accès supplémentaires.
Le propriétaire d'un fichier peut grâce aux ACLs accorder des privilèges à un ou plusieurs utilisateurs et/ou groupes qui se substitueront aux droits d'accès de base.

Avec les ACLs c'est possible de donner des droits à un utilisateur qui ne fait pas partie du groupe en ne modifiant pas les droits pour les autres.
De même on peut autoriser des droits d'accès pour un groupe d'utilisateurs qui n'est pas le groupe du fichier.
Il n'y a pas des limites concernant le nombre d'utilisateurs ou groupes à ajouter avec les ACLs.

La sauvegarde avec tar ne mémorise pas les ACLs positionnés.

III. Définition


Un ACL est composé de plusieurs entrées de type ACL. Une entrée spécifie les permissions d'accès pour un objet associé pour un utilisateur ou groupe d'utilisateurs en utilisant une combinaison des droits traditionnels r, w et x.

Autrement dit une entrée ACL est composée d'un :
  • tag qui précise une identité d'utilisateurs
  • tag optionnel d'utilisateurs ou groupes
  • la liste de permissions accordées


J'ai préféré utiliser le terme tag (dans le manuel en anglais, man acl), mais si vous voulez,vous pouvez lire balise au lieu de tag.

Les tags définis sont les suivants :
_________________________________________________________________________________
ACL_USER_OBJ  | les droits d'accès pour le propriétaire
---------------------------------------------------------------------------------|
ACL_USER      | les droits d'accès pour les users identifiés par le tag optionnel
---------------------------------------------------------------------------------|
ACL_GROUP_OBJ | les droits d'accès pour le groupe du fichier
---------------------------------------------------------------------------------|
ACL_GROUP     | les droits d'accès pour le groupe identifié par le tag optionnel
---------------------------------------------------------------------------------|
ACL_MASK      | les droits maximum accordés à ACL_USER, ACL_GROUP_OBJ, ACL_GROUP
---------------------------------------------------------------------------------|
ACL_OTHER     | les droits d'accès qui ne correspondent à aucune entrée = autres
_________________________________________________________________________________|

Algorithme de recherche des ACLs

SI l'UID effectif de processus correspond avec l'UID de propriétaire ALORS 

  SI ACL_USER_OBJ contiennent les permissions nécessaires ALORS 
    l'accès est autorisé 
  SINON 
    l'accès est interdit 
  FIN SI 

SINON SI l'UID effectif de processus correspond à n'importe quel ACL_USER ALORS 

  SI ACL_USER et ACL_MASK contiennent les permissions nécessaires ALORS 
    l'accès est autorisé 
  SINON 
    l'accès est interdit 
  FIN SI 
SINON SI le GID effectif or n'importe quel GID de processus correspond au GID de fichier ou ACL_GROUP ALORS 

  SI ACL contient un ACL_MASK ALORS 
    
    SI ACL_MASK et n'importe quel ACL_GROUP_OBJ ou ACL_GROUP contiennent les permissions nécessaires ALORS 
      l'accès est autorisé 
    SINON 
      l'accès est interdit 
    FIN SI 

  SINON <comment>à ce niveau ACL_GROUP ne peut pas être sans ACL_MASK</comment> 
    SI ACL_GROUP_OBJ contient les permissions nécessaires ALORS 
      l'accès est autorisé 
    SINON 
      l'accès est interdit 
    FIN SI
  FIN SI 

SINON SI ACL_OTHER contient les permissions nécessaires ALORS 
  l'accès est autorisé 
SINON 
  l'accès est interdit 
FIN SI

Je vous souhaite une bonne compréhension. Et si vous ne comprenez pas, ça ne vous empêchera pas d'utiliser les ACLs. Des fois la pratique est bien plus claire que la théorie.

Par exemple pour résumer tout ça, voilà ce que donne la pratique :
[d[efault]]:tag:utilisateur|groupe:droits

Pour tag on utilise :
u[ser], g[roup], o[ther], m[ask]

Quand le champ utilisateur|groupe est vide, l'entrée s'applique au propriétaire. Les fichiers créés dans un répertoire qui a une ACL avec le tag default, détient l'ACL de répertoire.

Observation !

Ce qui est délimité par les crochets est optionnel.
Autrement dit la forme courte est permise.

IV. Mise en place de support pour les ACLs


Vérification de la prise en charge des ACLs par le kernel


Le kernel de la famille 2.6 kernel inclut le support acl pour ext2, ext3, jfs and xfs.
Si le kernel n'inclut pas les support vous devez recompiler le kernel.

Pour plus d'info regardez sur le site ACLs acl.bestbits.at/
Voici ce que ça donne pour la version 2.6.17.3 du kernel.

$ uname -a && grep -i 'acl' /boot/config-$(uname -r) 
Linux debian 2.6.17.3 #1 PREEMPT Sat Jul 1 11:24:31 CEST 2006 i686 GNU/Linux 
CONFIG_EXT2_FS_POSIX_ACL=y 
CONFIG_EXT3_FS_POSIX_ACL=y 
CONFIG_JFS_POSIX_ACL=y 
CONFIG_FS_POSIX_ACL=y 
CONFIG_XFS_POSIX_ACL=y 
# CONFIG_NFS_V3_ACL is not set 
# CONFIG_NFSD_V3_ACL is not set

Installation du paquetage acl


Maintenant que le support est pris en charge par le kernel il nous reste à installer le support logiciel qui nous permettra d'utiliser les acl.

Il s'agit du paquetage acl qui contient les commandes getfacl et setfacl.

Debian : apt-get install acl
Mandriva 2006: urpmi acl

Préparation des partitions


Pour positionner des ACL sur des fichiers, la partition contenant ces fichiers doit supporter les acl.

Pour ça il existe deux façons de le faire :
  • temporaire
    mount /dev/partition -o defaults,acl /point/de/montage
  • permanent - édition de /etc/fstab
    /dev/partition /home ext3 defaults,acl 0 2
    Pour partition c'est en fonction de votre configuration :
    • hda, hdb,.. pour un disque dur IDE
    • sda, sdb,.. pour un disque dur SCSI

V. Les commandes


setfacl


La commande setfacl nous permet de positionner les ACLs.
On développera seulement les options -m, -x, -L et -R.
Regardez le manuel man setfacl pour plus de détails.

-m, --modify - modifier les ACL d'un fichier ou répertoire
-x, --remove - supprime des entrées ACLs
-b, --remove-all - supprime toutes les entrées ACLs
-L, --logical - suivi des liens symboliques
-R, --recursive - application des ACLs de façon récursive

getfacl


La commande getfacl nous permet d'afficher les ACLs.
  • l'option -R permet de voir les ACLs de façon récursive
  • l'option -L pour le suive des liens symboliques


man getfacl pour plus de détails.

VI. Sauvegarde et restauration des ACLs


Ce qui était saugrenue pour la commande chmod, ne l'est pas dans le cas d'ACLs. La commande getfacl permet de sauvegarder les ACLs

Exemple : Mémoriser les ACLs d'une arborescence
$ getfacl -R /chemin/vers/rep > /chemin/vers/get_rep.acl
La commande setfacl permet de restaurer les ACLs

Exemple : Restauration des ACLs d'une arborescence
$ setfacl --restore=/chemin/vers/get_rep.acl

VII. Exemples d'utilisations des ACLs


Ce n'est pas facile d'imaginer toutes les configurations donc je vous laisse découvrir par vous même les besoins en fonction de vos configurations.

Voici un lien ou vous trouverez un exemple d'utilisation.
okki666.free.fr/docmaster/articles/linux100.htm

Réfléchissez bien avant l'utilisation des ACLs.
Si chmod fait l'affaire ne vous compliquez pas la vie.
En revanche où chmod ne peut rien faire pensez aux ACLs.

Exemple 1 :

- un répertoire appartenant au propriétaire jeff et groupe ccm

Pour jeff les droits sont ( Lecture, Ecriture, Exécution) rwx
Pour le groupe ccm les droits sont (Lecture et Exécution) r-x
Pour les autres aucun droit donc ---

Mais jeff veut donner aux modérateurs qui font partie du groupe modo,
le droit de lecture r.

Dans cette situation chmod ne peux rien faire. Alors, faisons appel aux ACLs.
$ setfacl -R -m group:modo:r /home/ccm/unmondemeilleur

Exemple 2
  • sur le même fichier jeff a décidé d'accorder à sebsauvage tout les droits
  • et aussi à mamiemando et jipicydes droits d'exécution


A savoir qu'ils font tous parti du groupe modo.
$ setfacl -R -m u:egavuasbes:wx,u:mamiemando:x,u:jipicy:x /home/ccm/unmondemeilleur

Exemple 3

jipicy étant sollicité par Royal Dutch Shell ;) vu ses compétences en Shell
mamiemando sollicitée par C PLUS ELECTRONICS.COM pour la maîtrise du langage C

jeff a décidé de leur retirer les droits d'exécution temporairement.
$ setfacl -R -x u:jipicy $ setfacl -R -x u:mamiemando

Exemple 4

Un jour jeff a décidé de retirer les ACLs pour pouvoir réorganiser le projet, mais avant il a fait une sauvegarde des ACLs
$ getfacl -R /home/ccm/unmondemeilleur> /home/jeff/changerlemonde/unmondmeilleur.save.acl 
$ setfacl -R -b /home/ccm/unmondemeilleur

A voir également :

Ce document intitulé «  Sécurité - Les Access Control Lists (ACLs)  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.