Votre IP: 38.107.191.118 
  
 
Google
 
Accueil e-mail Linux
Linux
Perl
Perl
C
Langage C
Dico
Dictionnaire
Biblio liens
Bibliothèque de liens
Index articles
Index articles
 

Date création : 28-10-2007 00:00:00
Date de la dernière modification : 10-01-2008 12:27:16
Linux  Vous êtes dans : GNU/Linux Tutoriels / Sécurité

ACL

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


I. PREREQUIS table de matières

- 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 table de matières

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 table de matières

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 table de matières

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 table de matières

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 table de matières

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 table de matières

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 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

Création : octobre 2007  © Tous droits réservés 2007 linux-perl-c
Valid HTML 4.01 TransitionalValid CSS