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 coutumié 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 strategies à 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 identifé 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éfê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 solicité par
Royal Dutch Shell ;) vu ses compétences en
Shell
mamiemando solicité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éorgarniser 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