Access Control List
De Ensiwiki.
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.
/equipes 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/ :
telesun:~> mkdir /equipes/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é :
telesun:~> chmod 700 /equipes/alice-et-bob/ telesun:~> ls -ld /equipes/alice-et-bob/ drwx------ 2 alice etudiants 4096 Sep 10 15:38 /equipes/alice-et-bob/
Alice peut créer des sous-répertoires dans /equipes/alice-et-bob/, par exemple /equipes/alice-et-bob/TPs/Ada/TP1 utilisé dans la suite des explications (mkdir -p /equipes/alice-et-bob/TPs/Ada/TP1 pour le créer).
Elle va maintenant donner les droits sur le répertoire /equipes/alice-et-bob/TPs/Ada/TP1, il suffit pour elle de lancer la commande (bob et charlie sont les logins des coéquipiers) :
telesun:~> autoriser-equipe /equipes/alice-et-bob/TPs/Ada/TP1/ bob charlie setfacl -Rm u:bob:rwx '/equipes/alice-et-bob/TPs/Ada/TP1' setfacl -Rm d:u:bob:rwx '/equipes/alice-et-bob/TPs/Ada/TP1' setfacl -Rm u:charlie:rwx '/equipes/alice-et-bob/TPs/Ada/TP1' setfacl -Rm d:u:charlie:rwx '/equipes/alice-et-bob/TPs/Ada/TP1' setfacl -Rm d:u:alice:rwx '/equipes/alice-et-bob/TPs/Ada/TP1' setfacl -m u:bob:x '/equipes/alice-et-bob/TPs/Ada' setfacl -m u:charlie:x '/equipes/alice-et-bob/TPs/Ada' setfacl -m u:bob:x '/equipes/alice-et-bob/TPs' setfacl -m u:charlie:x '/equipes/alice-et-bob/TPs' setfacl -m u:bob:x '/equipes/alice-et-bob' setfacl -m u:charlie:x '/equipes/alice-et-bob' Les utilisateurs 'bob charlie' peuvent maintenant travailler dans /equipes/alice-et-bob/TPs/Ada/TP1 Pour enlever les droits sur ce repertoire : setfacl -Rb '/equipes/alice-et-bob/TPs/Ada/TP1' Pour voir les ACLs sur ce repertoire : getfacl '/equipes/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/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/alice-et-bob/:
alice> setfacl -Rm u:bob:--- /equipes/alice-et-bob/
- Ensuite on permet à
bobde (seulement) traverser le répertoire/equipes/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/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/alice-et-bob/
- Deux possibilités se présentent à nous : autoriser l'utilisateur à accéder en lecture seule à
/equipes/alice-et-bob/tps/,
alice> setfacl -m u:bob:rx /equipes/alice-et-bob/tps/
Ou bien : on peut n'autoriser que la traversée du répertoire /equipes/alice-et-bob/tps mais pas sa lecture, au choix.
alice> setfacl -m u:bob:x /equipes/alice-et-bob/tps/
- Quelque soit la solution choisie, la suite reste identique, on peut vérifier avec :
alice> ls -ld /equipes/alice-et-bob/ drwx--x---+ alice etudiants 4096 2008-06-26 19:25 /equipes/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/alice-et-bob/tps/, mais n'a pas encore accès au répertoire /equipes/alice-et-bob/tps/tp1-algo/.
- On donne les droits en écriture :
alice> setfacl -Rm u:bob:rwx /equipes/alice-et-bob/tps/tp1-algo
Et le tour est joué : Bob peut maintenant éditer les fichiers du répertoire /equipes/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/alice-et-bob/tps/tp1-algo alice> setfacl -Rm d:u:alice:rwx /equipes/alice-et-bob/tps/tp1-algo
Et voilà !
Plus de doc
- Gestion des ACLs sur lea-linux.org, en français et facile à lire.
- Oserions-nous vous suggérer man getfacl et man setfacl ?
