Les permissions d'accès Unix à vos fichiers et répertoires



Permissions d'accès : qu'est ce que c'est ?

Sous Unix, tout fichier ou répertoire à des permissions d'accès qui définissent si vous même et les autres peuvent les lire et/ou les écrire. C'est également le cas sous Windows NT mais les possibilités de permissions sont différentes. De plus votre compte sur kheops est sur un système unix, donc même morsque vous y accédez depuis windows les permissions d'accès sont en fait celles d'unix.

Les permissions unix sont relativement simples, elles sont découpées en 3 groupes :

Pour chacun d'eux, 3 types d'accès sont présents, leur signification n'est pas exactement la même pour un répertoire que pour un fichier.

Types d'accès pour un fichier :

Types d'accès pour un répertoire : Lorsque l'on visualise les permissions d'un fichier ou répertoire (avec 'ls -ld nom_du_fichier' par exemple), on peut voir quelque chose de ce type :
drwxr-xr-x   23 root     root         4096 mai 28  2000 /usr
drwx-----x   92 gm       users        8192 nov  8 04:03 /home/perma/perma/gm
- Le 1er nom (ici root et gm) est le login du possesseur du répertoire.
- Le 2ème nom (ici root et users) est le groupe d'appartenance du répertoire.
- la 1ère lettre à gauche (ici d) indique le type du fichier, ici des répertoires
- les 9 caractères suivants indiquent les permissions d'accès, les 3 premiers pour l'utilisateur, les 3 suivants pour les groupe, et les 3 derniers pour les autres.

Il existe également 3 types d'accès supplémentaires très spécifiques à unix, pour plus d'informations faire sous unix 'man chmod' et peut être 'man 2 chmod', les explications s'y sont considérablement améliorées.



Les ACL Posix : listes de permissions d'accès (Access Control List)

Le temps a amené un autre type de permissions d'accès qui ne peut plus être oublié : les ACL. Dans le cas d'unix il s'agira à priori d'ACL Posix, assez proches des ACL de NTFS que les utilisateurs de Windows connaissent plus ou moins bien, tout en ayant des petites différences pas toujours faciles à cerner.

L'idée principale est d'étendre la capacité de permissions au delà des permissions basiques, afin de pouvoir donner des permissions différentes pour un même fichier ou répertoire à différents groupes et/ou utilisateurs. La plupart des systèmes de fichiers récents supportent les ACL, il faut simplement le spécifier au montage de la partition. Par contre les limites en nombre d'ACL par partition ou répertoire peut varier d'un système de fichiers à l'autre, et le nombres d'entrées utilisateurs et/ou groupes dans chaque ACL de fichier ou répertoire peut varier aussi. Il est à noter que sur les systèmes récents NFSv3 supporte totalement les ACL Posix, au niveau de leurs permissions effectives mais maintenant aussi pour leur visualisation et modification.

Sous linux les commandes utilisées pour gérer les ACL sont 'getfacl' et 'setfacl'. La syntaxe n'est pas très compliquée, mais devoir spécifier toute une liste de noms d'utilisateurs et groupes avec la bonne syntaxe est assez fastidieux.
Il faut surtout retenir que la permission classique du groupe agit comme un masque pour toutes les ACLs du fichier ou répertoire. Les ACL 'default:' (qui n'existent que pour les répertoires) sont ceux qui seront appliqués aux fichiers et sous-répertoires qui y seront créés.

Sous Windows pour des partitions réseaux partagées par un linux, samba fournira un vision des ACL Posix et non NTFS, ce qui est logique. La principale différence entre les 2 c'est que les ACL Posix hérites du répertoire parent à la création, alors que NTFS gère un héritage permanent. La différence est parfois difficile à percevoir et dans l'usage courant elle a peu d'importance, d'autant que normalement vous n'avez pas besoin d'y toucher.



Permissions d'accès : comment les modifier ?

Cela ne peut se faire que sous unix évidemment, donc dans un terminal (xterm etc.) si vous êtes déjà sous unix, sinon dans un terminal telnet ou ssh depuis windows (telnet, puTTY, etc.).
Il n'y a qu'une commande qui fasse cela :  chmod.  Pour des informations complètes sur chmod, faire  'man chmod'.
Nous allons cependant voir ici les formes les plus courantes :

On peut bien sur utiliser les caractères jockers (* et ?) dans le nom de fichier/répertoire afin d'en modifier plusieurs d'un coup, ou simplement mettre plusieurs noms de fichiers et/ou répertoires les uns à la suite des autres, séparés par des espaces.

On peut également utiliser l'option -R pour l'appliquer de manière récursive dans les sous-répertoires. Cependant ceci est rarement bon car on veut rarement les meme droit pour les répertoires que pour les fichiers.
Deux solutions pour cela. D'abord l'usage de X à la place de x permet de n'appliquer le x que lorsqu'il est déjà présent dans une des permissions u, g et o. En pratique cela veut dire qu'il ne s'appliquera qu'au répertoires et fichiers exécutables, ce qui est exactement le but recherché. L'autre solution est de faire un find où on spécifie si on veut les fichiers ou répertoires, et d'executer un commande sur les fichiers concernés.

# utilisation de 'X' plutot que de 'x' :
chmod -R g+rX www

# pour modifier les permissions des fichiers dans www/ et dans ses sous-répertoires :
find  www -type f -exec chmod 640 {}  \;

# pour modifier les permissions de www/ et de ses sous-répertoires eux-même :
find  www -type d -exec chmod 750 {}  \;