Modifier les ACL

Introduction

Les ACL désignent ici les droits NT/2k/XP.
Ils permettent de définir des droits pour autant d'utilisateurs et de groupes que l'on souhaite (alors que les droits Unix ne permettent de fixer des droits que pour trois catégories: le propriétaire du fichier/dossier, le groupe propriétaire et tous les autres utilsateurs).


Le serveur de fichiers Samba supporte les ACL (nativement sur XFS et après application d'un patch sur ext3) et permet donc l'usage des ACL dans le contexte qui nous intéresse.
Une limitation tout de même, le système de fichier impose une limite de 20 ACL sur un dossier (voir http://wawadeb.crdp.ac-caen.fr/se3doc/x3309.htm et localement).


Il est possible de modifier les ACL sur des fichiers/dossiers de différentes façons:


Comparatif ACL et droits Unix

Plus qu'un comparatif en termes de qualité, il s'agit de préciser le fonctionnement des ACL et droits Unix.

Les ACL permettent de fixer des droits sur des fichiers et dossiers.
Ils permettent également de définir un héritage des droits sur les dossiers.
Cet héritage de droits fonctionne lorsque de nouveaux fichiers/dossiers sont créés dans le-dit dossier via un client Window$/Samba.

Exemple:

Soit un dossier '/var/se3/Classes/Classe_3A/_travail'.
Les membres du groupe 'Classe_3A' ont les droits 'rx' sur le dossier '/var/se3/Classes/Classe_3A/_travail'.
Le droit 'r' leur permet de voir le dossier '_travail'.
Ils ont également les droits 'rx' en héritage sur le dossier '/var/se3/Classes/Classe_3A/_travail', si bien que le groupe 'Classe_3A' a les droits 'rx' sur tout fichier/dossier créé directement dans ce dossier.
Ils voient donc et peuvent lire ces nouveaux dossiers/fichiers.


Avec les droits Unix, la possibilité de voir un dossier est inscrite dans les droits du dossier parent.
Ce qui permettrait de voir le dossier '_travail' au niveau Unix, ce serait le droit 'r' sur le dossier '/var/se3/Classes/Classe_3A'.


A ARRANGER

ACL: Le droit 'r' sur le dossier concerne la possibilité de voir le dossier.

UNIX: Le droit 'r' sur un dossier concerne la possibilité de voir le contenu du dossier.
La possibilité de voir le dossier vient du droit 'r' sur le dossier parent.


L'onglet 'Sécurité'

Dans l'Explorateur Window$', effectuez un 'clic-droit/Propriétés' sur un dossier.
Dans l'onglet 'Sécurité', les ACL déjà définies sont affichées.
Cliquer sur 'Ajouter', puis 'Avancé', puis 'Rechercher'.
Sélectionner l'utilisateur ou le groupe dans la liste et valider deux fois 'OK'.
Cocher les droits souhaités et valider une dernière fois OK.


Seul l'utilisateur 'admin' peut accéder à l'onglet 'Sécurité' (lorsque l'on a appliqué les 'Restrictions moyennes' sur 'base' et les 'Restrictions légères' sur 'Profs').
Peut-on rétablir l'accès à cet onglet pour les utilisateurs 'Profs'?


Par ailleurs, seul le propriétaire d'un fichier/dossier semble pouvoir modifier les ACL sur le fichier/dossier.
Ainsi, l'utilisateur 'admin' bien que disposant des ACL 'rwx' (via le groupe 'admins') n'a pas pu modifier les ACL sur un dossier créé par le prof 'redl'.


L'interface web SE3

Dans l'interface web SE3, le menu 'Ressources et partages/Droits sur fichiers' permet d'attribuer des ACL sur des dossiers.
Elle est accessible à l'utilisateur 'admin' (et aus utilisateurs 'se3_is_admin').


Ligne de commande sous Window$

Sous Window$ NT/2k/XP, en ligne de commande, il est possible d'utiliser CACLS (par défaut sur le système) ou SETACL (à télécharger... chercher).


CACLS

La commande CACLS permet de modifier des ACL en ligne de commande (utile notamment dans les scripts).


Voici l'aide affichée en saisissant la commande sans option:

K:\> cacls
Affiche ou modifie les listes de contrôle d'accès (ACL) des fichiers

CACLS nom_de_fichier [/T] [/E] [/C] [/G util:perm] [/R util [...]]
                     [/P util:perm [...]] [/D util [...]]
   nom_de_fichier  Affiche les ACL.
   /T              Modifie les ACL des fichiers spécifiés dans le
                   répertoire en cours et tous les sous-répertoires.
   /E              Edite l'ACL au lieu de la remplacer.
   /C              Continue la modification des ACL en ignorant les erreurs.
   /G util:perm    Donne  l'utilisateur spécifié les droits d'accès.
                   Perm peut être : R  Lecture
                                    W  Ecriture
                                    C  Modification (en écriture)
                                    F  Contrôle total
   /R util         Retire les droits d'accès de l'utilisateur (avec /E).
   /P util:perm    Remplace les droits d'accès de l'utilisateur spécifié.
                   Perm peut être : N  Aucun
                                    R  Lecture
                                    W  Ecriture
                                    C  Modification (en écriture)
                                    F  Contrôle total
   /D util         Refuse l'accès à l'utilisateur spcifié.
Des caractères génériques peuvent être utilisés pour préciser plusieurs
fichiers dans une commande. Vous pouvez spécifier plus d'un utilisateur dans
une commande.

Abrviations :
   CI - Héritage de conteneur (Container Inherit).
        Les répertoires héritent de l'entrée de contrôle d'accès.
   OI - Héritage d'objet (Object Inherit).
        Les fichiers héritent de l'entrée de contrôle d'accès.
   IO - Héritage uniquement (Inherit Only).
        L'entrée de contrôle d'accès ne s'applique pas au fichier ou
        répertoire en cours.

K:\>


Par exemple, j'utilise le script suivant (inspiré de ceux de JP.Tencé et JY.Morvan) pour générer le fichier 'C:\Windows\lilimath.ini' et modifier les ACL sur le fichier pour permettre à 'Tout le monde' d'y écrire:

echo o > o.txt
if exist C:\windows\lilimath.ini goto suite
echo "" > C:\windows\lilimath.ini
:suite
cacls C:\windows\lilimath.ini /E /T /G "Tout le monde":R < o.txt
cacls C:\windows\lilimath.ini /E /T /G "Tout le monde":W < o.txt
cacls C:\windows\lilimath.ini /E /T /G "Tout le monde":C < o.txt

Une astuce est utilisée pour envoyer la réponse 'o' à chaque demande de confirmation via le fichier 'o.txt'.


SETACL

A rechercher...


Ligne de commande sous Linux

Consulter

La commande 'getfacl' permet d'obtenir des informations sur les ACL appliquées sur des fichiers et dossiers.

Voici l'aide:

se3pdc:/var/se3/Classes# getfacl --help
getfacl 2.2.23 -- get file access control lists
Usage: getfacl [-dRLP] file ...
      --access            display the file access control list only
  -d, --default           display the default access control list only
      --omit-header       do 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
  -L, --logical           logical walk, follow symbolic links
  -P  --physical          physical walk, do not follow symbolic links
      --tabular           use tabular output format
      --numeric           print numeric user/group identifiers
      --absolute-names    don't strip leading '/' in pathnames
      --version           print version and exit
      --help              this help text
se3pdc:/var/se3/Classes#

Pour davantage d'informations consulter la page de man (à générer en PDF).


Voici les droits sur le dossier '/var/se3/Classes/Classe_2DE10':

se3pdc:~# getfacl /var/se3/Classes/Classe_2DE10
getfacl: Removing leading '/' from absolute path names
# file: var/se3/Classes/Classe_2DE10
# owner: admin
# group: nogroup
user::rwx
user:sandg:r-x
user:christia:r-x
user:michelej:r-x
user:chaslesm:r-x
user:laplacep:r-x
user:pasteurl:r-x
user:mimouna:r-x
group::---
group:Classe_2DE10:r-x
group:admins:rwx
mask::rwx
other::---
default:user::rwx
default:user:sandg:rwx
default:user:christia:rwx
default:user:michelej:rwx
default:user:chaslesm:rwx
default:user:laplacep:rwx
default:user:pasteurl:rwx
default:user:mimouna:rwx
default:group::---
default:group:admins:rwx
default:mask::rwx
default:other::---

se3pdc:~#

Tous les utilisateurs (des profs) définis et le groupe 'Classe_2DE10' n'ont que le droit d'entrer dans le dossier et d'en consulter le contenu.
Par contre, ils ont aussi le droit d'écriture sur les fichiers/dossiers qui seront créés dans ce dossier.


Le dossier '/var/se3/Classes/Classe_2DE10/_travail' est accessible en lecture seule aux membres du groupe 'Classe_2DE10' et en lecture écriture aux profs de l'équipe 'Equipe_2NDE10':

se3pdc:~# getfacl /var/se3/Classes/Classe_2DE10/_travail/
getfacl: Removing leading '/' from absolute path names
# file: var/se3/Classes/Classe_2DE10/_travail
# owner: admin
# group: nogroup
user::rwx
user:sandg:rwx
user:christia:rwx
user:michelej:rwx
user:chaslesm:rwx
user:laplacep:rwx
user:pasteurl:rwx
user:mimouna:rwx
group::---
group:Classe_2DE10:r-x
group:admins:rwx
mask::rwx
other::---
default:user::rwx
default:user:sandg:rwx
default:user:christia:rwx
default:user:michelej:rwx
default:user:chaslesm:rwx
default:user:laplacep:rwx
default:user:pasteurl:rwx
default:user:mimouna:rwx
default:group::---
default:group:Classe_2DE10:r-x
default:group:admins:rwx
default:mask::rwx
default:other::---

se3pdc:~#


Le dossier '/var/se3/Classes/Classe_2DE10/_profs' n'est accessible qu'aux profs de l'équipe 'Equipe_2DE10' (accès en lecture écriture):

se3pdc:~# getfacl /var/se3/Classes/Classe_2DE10/_profs/
getfacl: Removing leading '/' from absolute path names
# file: var/se3/Classes/Classe_2DE10/_profs
# owner: admin
# group: nogroup
user::rwx
user:sandg:rwx
user:christia:rwx
user:michelej:rwx
user:chaslesm:rwx
user:laplacep:rwx
user:pasteurl:rwx
user:mimouna:rwx
group::---
group:admins:rwx
mask::rwx
other::---
default:user::rwx
default:user:sandg:rwx
default:user:christia:rwx
default:user:michelej:rwx
default:user:chaslesm:rwx
default:user:laplacep:rwx
default:user:pasteurl:rwx
default:user:mimouna:rwx
default:group::---
default:group:admins:rwx
default:mask::rwx
default:other::---

se3pdc:~#


Modifier

La commande 'setfacl' permet de modifier les ACL.


Refaire les manips avec les comptes du gepfiles.zip


Voici l'aide de la commande:

se3pdc:/var/se3/Classes# setfacl --help
setfacl 2.2.23 -- set file access control lists
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } 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
      --set=acl           set the ACL of file(s), replacing the current ACL
      --set-file=file     read ACL entries to set from file
      --mask              do 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
  -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)
      --version           print version and exit
      --help              this help text
se3pdc:/var/se3/Classes#

Pour davantage d'informations consulter la page de man (à générer en PDF).


Je vais me livrer à quelques opérations et tâcher de les commenter.

Voici l'état initial sur le dossier:

se3pdc:~# getfacl /var/se3/Classes/Classe_3C
getfacl: Removing leading '/' from absolute path names
# file: var/se3/Classes/Classe_3C
# owner: admin
# group: nogroup
user::rwx
user:yellown:r-x
user:greenp:r-x
user:whitec:r-x
user:graym:r-x
user:blued:r-x
user:silverj:r-x
user:cyann:r-x
user:mercierl:rwx
user:lopezm:r-x
user:poissont:r-x
group::---
group:Classe_3C:r-x
group:admins:rwx
mask::rwx
other::---
default:user::rwx
default:user:yellown:rwx
default:user:greenp:rwx
default:user:whitec:rwx
default:user:graym:rwx
default:user:blued:rwx
default:user:silverj:rwx
default:user:cyann:rwx
default:user:mercierl:rwx
default:user:lopezm:rwx
default:user:poissont:rwx
default:group::---
default:group:admins:rwx
default:mask::rwx
default:other::---

se3pdc:~#

L'utilisateur 'redl' (prof) ne fait pas partie de l'équipe 'Equipe_3C' et n'a donc pas accès au dossier '/var/se3/Classes/Classe_3C'.
Il ne le voit pas dans le partage [Classes].


Pour ajouter les droits 'rx' à l'utilisateur 'redl' sur le dossier '/var/se3/Classes/Classe_3C':

se3pdc:~# setfacl -m u:redl:rx /var/se3/Classes/Classe_3C
se3pdc:~#

Cela ne lui donne pas l'accès aux dossiers situés dans le dossier '/var/se3/Classes/Classe_3C'.
Il ne les voit pas d'ailleurs.
Il peut seulement entrer dans le dossier '/var/se3/Classes/Classe_3C'.


Pour lui permettre d'avoir un accès en lecture/écriture sur les fichiers et dossiers qui seront créés à la racine de '/var/se3/Classes/Classe_3C':

se3pdc:~# setfacl -m d:u:redl:rwx /var/se3/Classes/Classe_3C
se3pdc:~#

Cela permet d'obtenir les droits 'rwx' sur les fichiers/dossiers qui seront créés à la racine de '/var/se3/Classes/Classe_3C', mais cela ne modifie pas les droits sur les dossiers créés avant.
Si l'utilisateur 'admin' crée depuis Window$ un dossier '/var/se3/Classes/Classe_3C/dossier_admin2', l'utilisateur 'redl' obtient les droits 'rwx' automatiquement.
Il en sera de même de tous les dossiers et fichiers créés par la suite dans '/var/se3/Classes/Classe_3C/dossier_admin2'.

L'ACL 'rwx' concernant l'utilisateur 'redl' est héritée par les fichiers et dossiers créés.


Pour propager les droits 'rwx' sur tous les sous-dossiers de '/var/se3/Classes/Classe_3C', il faut ajouter l'option -R:

se3pdc:~# setfacl -R -m u:redl:rwx /var/se3/Classes/Classe_3C/*
se3pdc:~#


Pour qu'en plus, l'héritage soit assuré (que les droits 'rwx' soient répercutés sur les fichiers/dossiers créés à l'avenir) sur toute l'arborescence:

se3pdc:~# setfacl -R -m d:u:redl:rwx /var/se3/Classes/Classe_3C/*
se3pdc:~#


Pour enlever cet héritage récursivement aussi:

se3pdc:~# setfacl -R -x d:u:redl /var/se3/Classes/Classe_3C/*
se3pdc:~#


Pour enlever toutes les ACL sur un dossier et sa sous-arborescence:

se3pdc:~# setfacl -R -b /var/se3/Classes/Classe_3C
se3pdc:~#


Sauvegarder/restaurer

Les commandes 'tar' et 'rsync' ne sauvegardent pas les ACL.
Il est nécessaire de procéder autrement pour sauvegarder/copier aussi les ACL.


Pour sauvegarder les ACL de toute une arborescence:

se3pdc:~# cd /var/se3/
se3pdc:/var/se3# getfacl -R ./ > /root/var_se3.acl
se3pdc:/var/se3# 

Les ACL comme fournies par la commande getfacl sont inscrites dans le fichier '/root/var_se3.acl'.


Pour restaurer les ACL, il faut se rendre à la racine du dossier dans lequel vous avez copié/restauré les fichiers, puis restaurer les ACL:

se3pdc:~# cd /var/se3/
se3pdc:/var/se3# setfacl --restore=/root/var_se3.acl
se3pdc:/var/se3# 


Pour plus de détails sur les sauvegardes, consultez Sauvegardes


Liens

Voir la page Ressources: ACL.