Permissions

De TeteveWiki.

Sommaire

Les permissions

Les différentes permissions

Le droit de lecture ( r pour read) : pour un fichier, cela signifie qu'il est consultable via l'application idoine ; pour un répertoire, cela signifie que l'on peut consulter la liste de son contenu.
Le droit d'écriture (w pour write) : pour un fichier, cela signifie qu'il est modifiable ; pour un répertoire, cela signifie que l'on peut y créer un nouveau fichier ou un sous-répertoire.
le droit d'exécution (x pour execute) : pour un fichier, cela signifie qu'il est exécutable (si son type le permet) ; pour un répertoire, cela signifie que l'utilisateur est autorisé à se positionner dedans (avec la commande cd)

Les bits spéciaux

Le bit setUID, aussi symbolisé par la lettre s, mais qui occupe cette fois la position du bit d'exécution du propriétaire du fichier. Lorsque vous lancez un programme qui possède le bit setUID, vous vous trouvez doté temporairement des privilèges du propriétaire du programme pendant son exécution.
Le bit setGID, symbolisé par la lettre s. Il occupe la position du bit d'exécution du groupe. S'il est présent, cela implique que tout fichier créé dans le répertoire aura automatiquement le même groupe propriétaire que le répertoire lui-même et héritera de ses droits.
Le bit sticky, symbolisé par la lettre t. Il protège un répertoire contre la suppression de son contenu (dans le cas où le droit en écriture est accordé). Il occupe la position du bit d'exécution des "autres utilisateurs". Lorsque ce bit est présent, il assure qu'un fichier qui se trouve dans le répertoire ne pourra être supprimé que par le propriétaire du répertoire ou par le propriétaire du fichier.

Valeurs numériques

r = 4
w = 2
x = 1

setUID = 4
setGID = 2
stickybit = 1

Les commandes

chown <user>:<group> /lieu/du/fichier (option -r et -R à vérifier)
chgrp <nom_du_groupe> /lieu/du/fichier
umask : commande interne du shell qui permet de définir les droits retirés par défaut pour un fichier. Elle est valable uniquement pour la session shell en cours. Pour la rendre permanente, modifier le fichier du profil du shell de votre utilisateur.

Les attributs

Les différents attributs

L'attribut i (immuable) : implique que le fichier ne peut pas être modifié, supprimé, renommé, et qu'il est impossible de créer des liens vers ce fichier, même par l'utilisateur root. Seul ce dernier peut positionner cet attribut. Si cet attribut est appliqué à un répertoire, il sera impossible d'en modifier le contenu (impossible de renommer ou de supprimer un fichier).
L'attribut a (append only) : implique que le fichier ne peut, en écriture, qu'être ouvert en ajout. En d'autres termes, du nouveau contenu peut être ajouté au fichier, mais il est impossible de modifier un contenu précédent. Utile particulièrement pour les fichiers de logs. Attribué à ce répertoire, il ne permet que la création de fichiers.
L'attribut A (noatime update) : permet de fixer l'heure et la date de dernier accès au fichier (aucune mise à jour ne sera effectué lors des accès suivants). C'est l'equivalent de l'option noatime des systèmes de fichiers. Un attribut utile sur les disques où l'écriture est très lente et très limitée.
L'attribut S (synchronous updates) : implique que toute écriture dans le fichier concerné est immédiatement effectuée sur le disque. On dit que le fichier est "synchrone".

Les commandes

lsattr <option(s)> <nom_fichier> (list attributes) : voir les attributs d'un fichier.

  • -R permet de voir les attributs de tous les fichiers d'une arborescence (récursivité)
  • -a permet de voir aussi les attributs des fichiers cachés
  • -d permet de voir les attributs des répertoires, mais pas leur contenu
  • -v affiche la version du fichier

chattr <option(s)> + -<attribut> <nom_fichier> (change attributes) : modifie les attributs d'un fichier

  • -R récursif
  • -V mode bavard
  • -v permet de modifier la version d'un fichier, initialement fixée à 1

Les ACL

Principes

Les ACL permettent une gestion des droits fondée sur des listes d'autorisations. Chaque entrée ACL représente les droits d'un utilisateur ou d'un groupe sur un fichier.

[d:]type_entrée:utilisateur/groupe:droits

Le type d'entrée indique la catégorie d'utilisateur concernée : l'utilisateur (user), le groupe (group), les autres (other) ; il peut également s'agir d'un masque d'ACL (mask).
Le paramètre utilisateur/groupe permet d'identifier l'utilisateur ou le groupe concerné. Pour les définitions de masques et les propriétaires de type other, ce champ n'est pas requis (il n'est pas utilisé).
Si le champ utilisateur/groupe est vide, alors l'entrée ACL s'applique automatiquement au propriétaire ou au groupe du fichier.

Si d: est mentionné, cela signifie que tous les nouveaux fichiers du répertoire hériteront de cette entrée ACL.

On précisera que les droits peuvent être spécifiés en notation symbolique ou en notation octale (comme avec chmod). Ces droits sont classiquement la lecture (r), l'écriture (w) et l'exécution (x).

Prérequis

Le paquet acl doit être installé. Pour le vérifier :
grep ACL /boot/config-version-du-noyau

11:10 root@debian ~# grep ACL /boot/config-2.6.20-1-686
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT4DEV_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_GENERIC_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_JFFS2_FS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m

monter les partitions voulues dans un système de fichier adéquat, avec l'option acl.
mount -t ext3 -o defaults,acl /dev/hda3 /media/hda3

Si la partition est déjà montée, il est possible de modifier ses options à la volée :
mount -o remount, acl /dev/hda3

L'idéal étant de configurer l'option pour les partitions voulues directement dans /etc/fstab

Visualiser les ACL

getfacl [options] <fichier>

  • -R : permet de lancer la commande de façon récursive.
  • -L : permet de suivre les liens symboliques

Fixer les entrées ACL

setfacl [options] <entrée(s)_ACL> <fichier>

  • -L : comme ci-dessus.
  • -R : comme ci-dessus.
  • -s : définit la liste entière ; les entrées par défaut pour le propriétaire, le groupe et les autres doivent obligatoirement être renseignés.
  • -m : ajoute une entrée dans la liste d'ACL.
  • -x : supprime une entrée dans la liste d'ACL.
  • -S, -M, -X : idem que ci-dessus, à la différence que la commande lira les entrées ACL dans un fichier spécifié en argument.
  • -b : permet de retirer toutes les entrées ACL.

Si plusieurs ACL sont spécifiées, elles doivent être séparées par une virgule.




REMARQUE

Les outils de sauvegarde classiques ne prennent pas en compte les attributs étendus lors de l'archivage. Les ACL ne seront donc pas restorés.
Une façon de contourner le problème est de sauvegarder les ACL dans un fichier sépar avant d'effectuer la sauvegarde proprement dite :
getfacl -R --skip-base . > sauve.acl

Pour les restaurer :
setfacl --restore=sauve.acl