Les ACLs (Access Control Liste) sous debian
I définition
Les ACLs ou Liste de Contrôle d'accès permettent de gérer les
permissions caractérisant les autorisations d'accès à un fichier de façon
beaucoup plus fine que le mécanisme Linux traditionnel.
Le support des ACLs sur un serveur SAMBA est le moyen
ultime d'intégrer totalement les postes clients WINDOWS en travaillant
avec la Windind.
Les ACLs permettent de réduire sensiblement le nombre de
partages nécessaires. Un dossier unique par serveur sera créé pour la gestion
des classes, que ce soit pour les élèves ou pour les profs.
II Les droits sous linux.
Les trois niveaux de permission, Read, Write et eXecute, sont codés chacun
sur un bit, sont manipulables avec la commande chmod, et sont appliqués
sur les trois uniques classes d'utilisateurs : User, Group, et Other. Dans ce
schéma, User représente le propriétaire du fichier, Group les utilisateurs du
même groupe que User, c'est-à-dire partageant les mêmes GID (group id, défini
dans /etc/group), et Other, tous les autres utilisateurs, c'est-à-dire
appartenant à un groupe différent.
Le masque de bits contenant les protections données par défaut à un
fichier (c'est-à-dire lors de sa création) est stocké dans le fichier inode,
et ce masque est initialisé par défaut avec la valeur définie dans la
variable d'environnement umask. Cette variable est définie au niveau
système, existe pour tout utilisateur donné et peut lui être spécifique.
Cette valeur correspond aux protections rw,r,r pour User, Group et Other,
respectivement.
III Utiliser les ACLs
Structure d'une Access Control List :Une ACL est une structure composée des
données suivantes :
ACL_USR_OBJ propriétaire
ACL_USR utilisateur identifié
ACL_GROUP_OBJ groupe d'appartenance
ACL_GROUP groupe nommé
ACL_MASK droits effectifs
ACL_OTHER autres utilisateurs
Les champs ACL_USR_OBJ, ACL_GROUP_OBJ et ACL_OTHER correspondent exactement
aux structures de protection conventionnelles sur les fichiers Unix. Il y a une
et une seule de chacune de ces trois structures dans une ACL.
ACL_USER et ACL_GROUP définissent les appartenances et les droits pour les
utilisateurs et les groupes et impliquent une définition dans ACL_MASK. Cette définition
limite les droits portés par les deux structures précédentes, en réalisant
un droit effectif, qui est la somme des droits portés par les champs
USER et/ou GROUP et le masque.
Dans le cas où la valeur définie dans le masque vient réduire l'étendue
des droits définis dans les champs USER et GROUP, la valeur affichée par la
commande getfacl sera suivie du champ effective, indiquant les
droits réellement mis en oeuvre.
Le caractère + peut être affiché à la suite des attributs d'un fichier
suite à un ls -l si les attributs qui sont alors affichés ne décrivent
pas complètement les protections associées au fichier.
Ils existent deux commandes : setfacl(1) et getfacl(1) qui vont
vous permettre de définir des ACLs, et de voir le contenu des ACL
IV La commande Getfacl en mode console
LA commande Getfacl permet seulement de visualiser les permissions sur les fichiers ou
les répertoires. Vous pouvez voir ci dessous les nombreuses
possibilités de la commande
getfacl
getfacl 0.7.8 -- get file access control lists
Usage: getfacl [-adRLPvh] file ...
-a, --accessdisplay the file access control list only
-d, --defaultdisplay the default access control list only
--omit-headerdo not display the comment header
--all-effective print all effective rights
--no-effective print no effective rights
--skip-base skip files that only have the base entries
-R, --recursive recurse into subdirectories
--post-oder visit subdirectories first
-L, --logical logical walk, follow symbolic links
-P, --physical physical walk, do not follow symbolic links
--tabularuse tabular output format
--absolute-names don't strip lending '/' in pathnames
-v, --version print version and exit
-h, --help this help text
debian:/var/se3/Classes# getfacl Classe_1ES1/
# file:
Classe_1ES1
# owner:
admin
# group:
nogroup
user::rwx
user:blaise.pascal:r-x
user:jules.michelet:r-x
user:evariste.galois:r-x
user:marie.curie:r-x
user:alain.mimoun:r-x
group::---
group:Classe_1ES1:r-x
group:admins:rwx
mask::rwx
other::---
default:user::rwx
default:user:blaise.pascal:rwx
default:user:jules.michelet:rwx
default:user:evariste.galois:rwx
default:user:marie.curie:rwx
default:user:alain.mimoun:rwx
default:group::---
default:group:admins:rwx
default:mask::rwx
default:other::---
V La commande Setfacl en mode console
Les syntaxes de base de
setfacl sont :
# setfacl <-s/-m/-x> u:<utilisateur>:<permissions> <fichier(s)>
# setfacl <-s/-m/-x> g:<groupe>:<permissions> <fichier(s)>
# setfacl <-s/-m/-x> o:<permissions> <fichier(s)>
Les paramètres -s, -m, et -x servent respectivement à attribuer, modifier et
supprimer une permission. u, g et o servent à spécifier si l'on s'adresse à
un utilisateur, à un groupe ou bien aux autres utilisateurs. Les permissions
restent les permissions classiques sous Unix à savoir r, w et x.
setfacl 0.7.8 -- set file access control lists
Usage: setfacl [-bkndRLPvh] { -s|-S|-m|-M|-x|-X ... } ... file ...
-s, --set=aclset the ACL of file(s), replacing the current ACL
-S, --set-file=file read ACL entries to set from file
-m, --modify=acl modify the current ACL(s) of file(s)
-M, --modify-file=file read ACL entries to modify from file
-x, --remove=acl remove entries from the ACL(s) of file(s)
-X, --remove-file=file read ACL entries to remove from file
-b, --remove-all remove all extended ACL entries
-k, --remove-default remove the default ACL
--maskdo recalculate the effective rights mask
-n, --no-mask don't recalculate the effective rights mask
-d, --default operations apply to the default ACL
-R, --recursive recurse into subdirectories
--post-order visit subdirectories first
-L, --logical logical walk, follow symbolic links
-P, --physical physical walk, do not follow symbolic links
--restore=file restore ACLs (inverse of `getfacl -R')
--test test mode (ACLs are not modified)
-v, --version print version and exit
-h, --help this help text
Exemple, nous voulons donner au groupe pierrot le droit de
lecture sur le fichier test.txt :
#
setfacl -s g:pierrot:rtest.txt
Exemple 2, nous souhaitons modifier les permissions de l'utilisateur petit sur le
répertoire /var/www et nous voulons que ces permissions s'applique également aux
sous-dossiers de ce répertoire :
#
setfacl -R -m u:petit:rwx /var/www
Exemple 3 : nous souhaitons retirer toutes les permissions sur
le fichier /etc/fichier :
#
setfacl -b /etc/fichier
Exemple 4 : nous voulons donner les mêmes permissions à
/etc/fichier qu'à /var/www :
#
getfacl /var/www | setfacl -S- /etc/fichier
VI La gestion des ACLs avec l'interface graphique
Les ACLs peuvent se gérer en mode console avec les fonctions
Getfacl et Setacl; mais aussi avec Windows 2000 ou Windows XP Pro.
Pour cela sélectionner le fichier ou le répertoire auquel vous
souhaitez gérer les droits et cliquez sur Propriétés, Sécurité.

Si vous souhaitez donnez des droits à une personne ou a un
groupe qui n'apparait pas dans la liste des ayants droits cliquez sur Ajouter et
sélectionner la personne ou le groupe.

Validez votre choix en cliquant sur OK
Vous pouvez donner les droits suivants sur l'élément
sélectionnez :

Vous pouvez affiner votre délégation de droit en cliquant sur
Avancé.

Ce menu permet de choisir si vous étendez vos droits par
récursivité sur les sous-répertoires, les fichiers etc ....

VII Exemple
Pour l'exemple nous ferons référence au serveur
de fichiers Samba-Edu3.
Exemple 1
1°) Je souhaite créer un répertoire
"profs-techno" dans le répertoire I (Docs)
Vous effectuerez la création en mode console et en mode
graphique avec un client Windows 2000 ou XP Pro.
2°) Vous allez créer un groupe de "profs_techno"
a l'aide de l'interface SE3.
et remplir le groupe d'enseignant de la discipline
3°) Affectez les droits en mode console pour et seulement
pour le groupe "prof_techno".
setfacl -m g:profs_techno :rwx /var/se3/Docs/profs_techno
Connectez-vous en tant qu'un professeur de technologie et
essayer d'accéder à ce répertoire.
Faites la même chose mais en tant qu'enseignant d'une
autre matière.
Que constatez-vous ?
4°) Affectez les droits en mode console à tous les
élélments récursif du répertoire "prof_techno".
setfacl -m d g:profs_techno :rwx /var/se3/Docs/profs_techno
5°) Supprimer le répertoire profs_techno sur I et
réitérer la même opération à l'aide du client Windows.
6°) Pour chaque création effectuer un getfacl
profs_techno imprimer et comparer le résultat en mode console et client
Windows.
Exemple 2
Sujet : L'établissement souhaite pour son
groupe IDD avoir un répertoire"IDD1" dans lequel on trouvera deux
sous-répertoire travail et essai.
Le répertoire travail ne doit être accessible qu'au
professeur enseignant dans l'IDD et les deux élèves responsables de chaque
groupe. Les autres membres du groupe IDD ne doivent pas avoir accés à ce
répertoire.
Le répertoire essai doit permettre à chaque membre de l'IDD
de déposer leurs travaux. Les autres membres du groupe qui ne sont pas
propriétaires du dépôt ne pourront que lire les fichiers sans pouvoir les
modifier ni les copier.
Seul les deux enseignants auront des accés complets sur
le répertoire "IDD1"
Etablir l'affectation et la gestion des ACLs en mode
console et en mode client Windows.
Imprimer le rapport avec getfacl.