Access Control List

De Ensiwiki
(Redirigé depuis ACL)
Aller à : navigation, rechercher

Les ACLs, ou « Access Control List », sont un système de droits sur les fichiers qui s'ajoute à la gestion des droits « classiques » sous Unix (Utilisateur/Groupe/Autres, cf. les commandes chmod et ls -l). Elles peuvent vous permettre de donner les droits en lecture et/ou écriture à un répertoire bien particulier pour un utilisateur en particulier. Pour vous, une utilisation évidente est de donner les droits à vos binômes de TPs sur les répertoires concernés.

Spécifique EnsimagÀ l'Ensimag, le contenu de vos compte est protégé, vous ne pouvez pas utiliser les ACLs pour donner des permissions aux autres utilisateurs. Par contre, le serveur depots.imag.fr contient une partition /depots qui peut servir à créer un espace partagé entre plusieurs étudiants (cf. Gestion des comptes à l'Ensimag).


Méthode expresse, à l'Ensimag : autoriser-equipe

Vos enseignants vous ont préparé un script pour vous faciliter la vie : autoriser-equipe. Mettons qu'Alice veuille créer un répertoire dans lequel elle va travailler avec Bob et Charlie. La configuration de l'Ensimag ne permet pas d'autoriser d'autres utilisateurs à accéder au répertoire $HOME d'Alice, donc elle va créer ce répertoire dans la partition prévue à cet effet : /equipes/$annee/ (en remplaçant bien sûr $annee par l'année en cours, par exemple /equipes/2013) :

depots.ensimag.fr:~> mkdir /equipes/$annee/alice-et-bob/

Alice ne veut donner les droits qu'à ses coéquipiers, elle va donc s'assurer que le répertoire est bien protégé :

depots.ensimag.fr:~> chmod 700 /equipes/$annee/alice-et-bob/
depots.ensimag.fr:~> ls -ld /equipes/$annee/alice-et-bob/
drwx------ 2 alice etudiants 4096 Sep 10 15:38 /equipes/$annee/alice-et-bob/

Alice peut créer des sous-répertoires dans /equipes/$annee/alice-et-bob/, par exemple /equipes/$annee/alice-et-bob/TPs/Ada/TP1 utilisé dans la suite des explications (mkdir -p /equipes/$annee/alice-et-bob/TPs/Ada/TP1 pour le créer).

Elle va maintenant donner les droits sur le répertoire /equipes/$annee/alice-et-bob/TPs/Ada/TP1, il suffit pour elle de lancer la commande (bob et charlie sont les logins des coéquipiers) :

depots.ensimag.fr:~> autoriser-equipe /equipes/$annee/alice-et-bob/TPs/Ada/TP1/ bob charlie
setfacl -Rm u:bob:rwx '/equipes/$annee/alice-et-bob/TPs/Ada/TP1'
setfacl -Rm d:u:bob:rwx '/equipes/$annee/alice-et-bob/TPs/Ada/TP1'
setfacl -Rm u:charlie:rwx '/equipes/$annee/alice-et-bob/TPs/Ada/TP1'
setfacl -Rm d:u:charlie:rwx '/equipes/$annee/alice-et-bob/TPs/Ada/TP1'
setfacl -Rm d:u:alice:rwx '/equipes/$annee/alice-et-bob/TPs/Ada/TP1'
setfacl -m u:bob:x '/equipes/$annee/alice-et-bob/TPs/Ada'
setfacl -m u:charlie:x '/equipes/$annee/alice-et-bob/TPs/Ada'
setfacl -m u:bob:x '/equipes/$annee/alice-et-bob/TPs'
setfacl -m u:charlie:x '/equipes/$annee/alice-et-bob/TPs'
setfacl -m u:bob:x '/equipes/$annee/alice-et-bob'
setfacl -m u:charlie:x '/equipes/$annee/alice-et-bob'

Les utilisateurs 'bob charlie' peuvent maintenant travailler dans /equipes/$annee/alice-et-bob/TPs/Ada/TP1
Pour enlever les droits sur ce repertoire : setfacl -Rb '/equipes/$annee/alice-et-bob/TPs/Ada/TP1'
Pour voir les ACLs sur ce repertoire :      getfacl '/equipes/$annee/alice-et-bob/TPs/Ada/TP1'

Un exemple détaillé : donner les droits à votre binôme

Supposons que l'utilisatrice alice souhaite donner les droits en écriture à l'utilisateur bob sur le répertoire /equipes/$annee/alice-et-bob/tps/tp1-algo/ tout en protégeant les répertoires parents :

  • On va d'abord interdire complètement à bob d'accéder à /equipes/$annee/alice-et-bob/  :
alice> setfacl -Rm u:bob:--- /equipes/$annee/alice-et-bob/
  • Ensuite on permet à bob de (seulement) traverser le répertoire /equipes/$annee/alice-et-bob/ en lui donnant les droits d'exécution. De cette manière il ne peut ni voir ni lire le contenu de /equipes/$annee/alice-et-bob/ mais seulement accéder au dossier que l'on va lui autoriser (dans la mesure où il connait le chemin d'accès).
alice> setfacl -m u:bob:x /equipes/$annee/alice-et-bob/
  • Deux possibilités se présentent à nous : autoriser l'utilisateur à accéder en lecture seule à /equipes/$annee/alice-et-bob/tps/,
alice> setfacl -m u:bob:rx /equipes/$annee/alice-et-bob/tps/

Ou bien : on peut n'autoriser que la traversée du répertoire /equipes/$annee/alice-et-bob/tps mais pas sa lecture, au choix.

alice> setfacl -m u:bob:x /equipes/$annee/alice-et-bob/tps/
  • Quelque soit la solution choisie, la suite reste identique, on peut vérifier avec :
alice> ls -ld /equipes/$annee/alice-et-bob/
drwx--x---+ alice etudiants 4096 2008-06-26 19:25 /equipes/$annee/alice-et-bob

Un caractère + apparaît derrière les rwx------ habituels, pour signifier qu'une ACL a été positionnée sur ce répertoire. Pour en voir le contenu, on fait :

 alice> getfacl ~
 getfacl: Removing leading '/' from absolute path names
 # file: home/testacls
 # owner: testacls
 # group: testacls
 user::rwx
 user:bob:--x
 group::---
 mask::r-x
 other::---

Bob a maintenant les droits --x sur ce répertoire. De son côté, il peut faire un cd vers le répertoire /equipes/$annee/alice-et-bob/tps/, mais n'a pas encore accès au répertoire /equipes/$annee/alice-et-bob/tps/tp1-algo/.

  • On donne les droits en écriture :
alice> setfacl -Rm u:bob:rwx /equipes/$annee/alice-et-bob/tps/tp1-algo

Et le tour est joué : Bob peut maintenant éditer les fichiers du répertoire /equipes/$annee/alice-et-bob/tps/tp1-algo. Par contre, s'il en crée de nouveaux, ils lui appartiendront par défaut, et Alice n'aura pas les droits dessus. La dernière étape résout ce problème :

  • On fait en sorte que les droits du répertoire soient hérités automatiquement pour les nouveaux fichiers :
alice> setfacl -Rm d:u:bob:rwx /equipes/$annee/alice-et-bob/tps/tp1-algo
alice> setfacl -Rm d:u:alice:rwx /equipes/$annee/alice-et-bob/tps/tp1-algo

Et voilà !

Plus de doc