Gestion des droits de fichiers : générique et ACLDate de publication : 15/11/2005 , Date de mise à jour : 20/12/2005
Par
L'équipe Linux
Ce tutoriel vous présente la gestion des droits de manière générique et en utilisant les Access Control Lists (ACL).
1. Avant-propos 2. Principe des droits sous Unix : version générique 2.1. Principe de base 2.2. Mise en oeuvre par un cas pratique 2.3. Cas spécial : setuid et setgid 2.4. Limite du système 3. Les ACL sous Linux (norme POSIX) 3.1. Apport 3.1. Pré-requis 3.2. Affectation des droits ACL 4. Conclusion 1. Avant-propos
Bien gérer ses fichiers et ses dossiers ne passe pas forcément par un bon archivage ou une bonne hériarchie. Il s'agit aussi de définir judicieusement leurs droits.
Qui peut le lire ? Qui peux écrire dedans ? Qui peut exécuter ce programme ? Qui peut accéder à tel répertoire ?
Nous allons donc voir dans cet article la gestion des droits de fichiers sous Linux (et Unix en général).
2. Principe des droits sous Unix : version générique2.1. Principe de base
La gestion des droits de fichiers Unix s'effectue suivant 3 orientations : le droit de lecture (Read), le droit d'écriture (Write) et le droit d'exécution (eXecute). - Le droit de lecture permet de lire le contenu d'un fichier. - Le droit d'écriture permet la modification et la suppression d'un fichier. - Le droit d'exécution sur des fichiers binaires ou shells permet de lancer le programme. En version numérique : Read = 4 Write = 2 eXecute = 1 Appliquées à un répertoire, ces définitions sont sensiblement différentes.
Chacun de ces droits sont attribués à 3 types de personnes : le propriétaire (owner ou UID), le groupe (group ou GID) et le reste du monde (other).
2.2. Mise en oeuvre par un cas pratique
Je dispose donc d'un fichier : MaCuisine.xml, contenant mes recettes de cuisine.
Le premier - ne nous intéresse pas : il correspond au type de fichier. (par exemple d = répertoire)
Ensuite viennent 3 séries de trois lettres commençant par r: rwx : Les droits du owner : sl => L'utilisateur sl a les droits de lecture, d'écriture et exécution du fichier. r-x : Les droits du group : amis => Toute personne du groupe amis a les droits de lecture et exécution. r-- : Les droits du reste du monde => Les autres ont juste le droit de lecture. Si vous voulez changer les droits du fichier, la commande "chmod" est présente. Elle s'utilise ainsi
où X, Y et Z sont respectivement les droits (en numérique) du propriétaire, du groupe et du reste.
Comment calculer X ? En sommant les droits que vous voulez accorder. rwx = 4 + 2 + 1 = 7 rw- = 4 + 2 = 6 r-x = 4 + 1 = 5 --- = 0 ...etc (Y et Z se calculent de la même manière) Pour obtenir rwxr----- par exemple :
Si le calcul mathématique ne vous semble pas très parlant, il existe un moyen littéraire de donner les droits :
En première lettre, vous insérez le type de personne à modifier. Puis avec le + ou -, vous décrivez respectivement, soit une opération d'ajout de droit, soit une opération de retrait.
Il ne reste plus qu'à donner les droits impactés par leurs lettres : r, w, x.
2.3. Cas spécial : setuid et setgid
Le setuid et le setgid sont deux attributs qui permettent de modifier les droits du processus créés par l'exécution du fichier.
Si le setuid est activé, quand le fichier est exécuté par un utilisateur, le processus a les mêmes droits que le propriétaire du fichier en cours d'éxécution. Pour le setgid, vous avez donc deviné qu'il s'agissait d'un héritage des droits du groupe et non du propriétaire du fichier. Pour les activer, il vous suffit d'ajouter ou supprimer le flag "s" sur le propriétaire ou le groupe.
Nous observons alors :
Nous observons alors :
2.4. Limite du système
Cette solution simple et efficace renferme une grosse limite, celle de gérer les droits par utilisateur ou par groupe.
3. Les ACL sous Linux (norme POSIX)3.1. ApportPrenons un cas difficilement soluble avec le système de droits génériques pour illustrer :
Imaginons que je possède un fichier IdeeCadeauPourGeraldine.txt, qui regroupe les idées de cadeau pour un anniversaire:
Malheureusement, Geraldine appartient au groupe "amis". Je ne peux pas me permettre de l'enlever du groupe juste pour un fichier, surtout qu'il va exister des impacts sur d'autres fichiers... Créer un autre groupe sans elle ? Que de complications !
La solution tient dans le rajout d'utilisateurs et/ou de groupes avec des droits élémentaires (rwx). Ainsi, je vais pouvoir spécifier une ACL qui va enlever à Geraldine son droit de lecture, même si elle appartient au groupe amis. Cette amélioration s'implémente au fur et à mesure en standard dans les distributions Linux. 3.1. Pré-requisIl y a deux pré-requis :
- Le noyau supporte les ACL. - Le système de fichier est monté avec l'option acl :
3.2. Affectation des droits ACLIl existe deux commandes essentielles pour gérer les ACL : setfacl et getfacl
Pour l'ensemble des exemples, nous partirons d'un fichier suivant :
setfacl vous permet de modifier la liste des droits ACL.
Vous pouvez en retirer comme en ajouter.
En premier lieu et avant tout, vous devez initialiser un "mask". Si ce masque n'existe pas, vous ne pouvez pas rajouter de règles ACL. Seules les opérations autorisées dans ce masque seront actives. Ainsi, si vous mettez un masque de rw-, aucune personne ne pourra effectuer l'opération d'exécution, même si vous l'autorisez. À l'inverse, si le masque est "rwx" et que vous désirez empêcher l'ensemble des personnes concernées par le droit Write d'effectuer une opération d'écriture, il vous suffit de modifier ce masque en r-x.
Partons de cette commande pour examiner la syntaxe de setfacl. L'argument -m permet de rajouter un ACL, à l'inverse -x l'enlève.
De plus, le deuxième argument possède cette structure
Il existe 2 types de personnes (en dehors du masque "m") : "u" pour un utilisateur et "g" pour un groupe. Ainsi pour rajouter à l'utilisateur pm, les droits de lecture et écriture d'un fichier :
Quand je refais un ls -l de mon fichier, je me rends compte d'un petit changement :
Le petit + indique que le fichier possède des droits ACL. Pour visionner les droits ACL, on utilise la commande getfacl.
Les lignes user::rwx, other::--- et group::r-x correspondent aux habituels droits Unix.
Vous retrouvez aussi votre masque : mask::rwx et l'autre user:pm:rw- Voyons maintenant l'intérêt du masque. Mon désir : Supprimer pour tous les utilisateurs (en dehors de moi, le owner), le droit en écriture. Je supprime le droit en écriture dans le masque.
On remarque la ligne #effective, qui nous signale qu'après application du masque, les droits réels de pm sont juste : lecture.
Sans le masque, je devrais enlever pour chaque utilisateur (dans mon cas, il n'y en a qu'un , mais imagninez avec 25) le droit en écriture.
Si je désire enlever à pm tout droit ACL sur ce fichier :
Et il redevient un utilisateur normal assujettit aux règles classiques.
Vous pouvez aussi supprimer l'ensemble des droits ACL d'un fichier.
4. ConclusionLa gestion des droits sous Unix sous sa forme générique doit être bien connue de tous, d'une part pour des questions de sécurité mais aussi de confidentialité, d'autre part parce qu'elle est fondamentale dans la manipulation/utilisation des fichiers.
Aujourd'hui, peu utilisé sous Linux et même sur les autres UNIX, les ACL sont pourtant d'une mise en oeuvre simple et tout à fait à porter de main pour n'importe quel administrateur ou utilisateur. Je vous conseille donc vivement de les mettre en place au moins dans un premier temps au niveau du /home, ce genre de droits est souvent prisé par les utilisateurs. |
Copyright © 2006 L'équipe Linux. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée.
Copyright © 2000-2013 - www.developpez.com