Les droits d'accès aux fichiers
et leurs liens

© 1996-2001 Michel Luc
date de création : 08 Janvier 1997

Permission vous est accordée de faire des copies et de distribuer ces copies sous les termes de la licence GNU FDL.


Glossaire des commandes et termes Linuxiens Menu: le Shell et les commandes Index Linux Les liens symboliques

Les droits d'accès aux fichiers



1.1-Les permissions

Petite précision :
Le mot "root" désigne plusieurs éléments différents :
 root  désigne la racine du disque, mais en ce qui nous concerne nous considèrerons,
 root comme le nom du compte de l'administrateur système ayant tous les droits.
 /root étant le répertoire $HOME de l'administrateur (compte root).

Rappel:
Le contenu de votre script ma.conf, que vous avez réalisé au chapitre Shell script est le suivant :

#!/bin/sh 
# /droopy/ma.conf affichage de mes fichiers de configuration 
#
echo 'Recuperation des infos de fstab,  inittab et ld.so.conf .' 
# copie des fichiers dans config.perso 
cat /etc/fstab /etc/inittab /etc/ld.so.conf >/droopy/config.perso 
# affichage du nombre de lignes écrites dans config.perso
wc -l /droopy/config.perso 
# affichage du contenu de config.perso 
less /droopy/config.perso 
#Et pourquoi pas l'imprimer ? 
lpr config.perso 
# Fin du script ma.conf 
Que vous avez rendu exécutable avec la commande :
# chmod 755 /droopy/ma.conf

Nous avons vu que la commande ls -l nous affiche le détail des informations sur les fichiers :
-rwxr--r--- 1root root 200 jan 5 21:37 ma.conf*
C'est la première partie de ses informations que nous allons considérer.

Logez sous un compte utilisateur et passez sous le compte root (su) uniquement si nécessaire.
ce placer sous /droopy/ (votre répertoire d'essais).
# cd /droopy
# ls -l ma.conf
dans la première partie nous avons -rwxr--r--

le premier signe  -  indique un fichier ordinaire:  -rwxr--r--
                  d  indique un repertoire:  drwxr--r--
                  b  indique un pilote de périphérique:  brw-rw----
                  l  indique un lien symbolique:  lrwxrwxrwx
Suivi de 3 lettres qui correspondent aux droits du propriétaire "owner"(utilisateur du compte)
Les 3 lettres suivantes correspondent aux droits du groupe "group" auquel appartient l'utilisateur.
Les 3 dernières lettres correspondent aux droits accordés aux autres groupes "other".(utilisateurs ne faisant pas partie du même groupe).

Ces 3 lettres représentent les permissions :
r de lecture
w d'écriture
x d'exécution
- aucune permission

La seconde partie -rwxr--r--- 1 root root   200  jan  5 21:37   ma.conf*
Indique le propriétaire root et le groupe root.



Mais les permissions rwxrwxrwx d'un fichier ne sont pas suffisantes pour autoriser, aux utilisateurs, l'accès (lecture/écriture) à ce fichier !
Il faut également que le répertoire qui contient ces fichiers ait les mêmes permissions, et ce jusqu'au niveau de la racine :
Par exemple (mauvais) si ce fichier est dans /usr/local/production/vente/fichier, il faudra que tous les répertoires menant à.. /vente/fichier aient les mêmes droits d'accès que les fichiers qu'ils contiennent pour autoriser les utilisateurs du groupe et/ou pas les autres utilisateurs (reste du monde).
Je m'explique, si le répertoire /usr/local/production a les droitsdrwxrwx---  3 root  product    1024 Janv 3 16:35 /usr/local/production
même si : drwxrwxrwx  3 root  product    1024 Janv 3 16:35 /usr/local/production/vente :
Personne d'autre que root et les utilisateurs du groupe produc ne pourront atteindre le répertoire production/vente/.
Donc par sécurité et pour une question de facilité, l'administrateur doit placer les fichiers(rwxrwxr-x) accessibles aux autres utilisateurs, en dehors d' un chemin contenant les fichiers système : il est plus facile de changer les permissions d'un répertoire que les permissions de tous les fichiers qu'il contient.

Par exemple pour refuser l'accès du répertoire /droopy à tous les utilisateurs exepté à l'utilisateur droopy :
# chown droopy.droopy /droopy   nous verrons cette commande plus loin.
Pour autoriser également les utilisateurs faisant partie du groupe produc :
# chown droopy.produc /droopy
L'apartenance des utilisateurs à un groupe est défini dans le fichier /etc/group, sous cette forme :
produc::521:droopy,lulu,nono,riri

Seul l'administrateur (compte root, $HOME = /root), peut modifier les permissions de /root/, car il est par définition le propriétaire du compte root.
Et pour éviter qu'un utilisateur ne puisse modifier les droits d'un répertoire qu'il est autorisé à utiliser, il faut laisser root comme propriétaire :
# chown root.produc /droopy



1.2-Changer les permissions

_La commande chmod permet d'effectuer la modification des droits d'accès aux fichiers et répertoires.

Seul le propriétaire peut changer les permissions.

La syntaxe de chmod est :
 chmod [ a,  u,  g, o ] [ +,  - ] [ r,  w,  x ] [ non.de.fichier ]

          argument       valeur    permissions

l'argument donne les droits : a = à tous les utilisateurs "all"
                              u = au propriétaire "owner"
                              g = aux utilisateurs du groupe  "group"
                              o = aux autres groupes "other"
la valeur  +  ajoute 
           -  enlève 

les permissions autorisent   r = la lecture 
                             w = l'écriture 
                             x = l'exécution

Par exemple, pour modifier le fichier /droopy/ma.conf , qui avait été rendu exécutable avec la commande chmod u+rx ma.conf , de sorte que tous les utilisateurs puissent l'exécuter, il faut utiliser la commande :
# chmod og +x ma.conf
et la même chose pour son répertoire droopy :
# chmod og +x /droopy
maintenant si je veux enlever le droit d'exécution aux utilisateurs des autres groupes :
# chmod o-x ma.conf

Il est possible, et plus pratique, d'utiliser '=' à la place de ' +, - ' :
# chmod u=rwx,g=rx,o=r /droopy /doopy/ma.conf
Vérifiez avec # ls -l /droopy

Un autre mode plus rapide permet de chiffrer la commande chmod : chmod 755 /droopy/ma.conf.
ce qui correspond à rwxr-xr-x, 7 donnant tous les droits et 5 les droits de lecture et d'exécution.
Voici un tableau pour son utilisation :
option droits
 7  rwx
 6  rw-
 5  r-x
 4  r--
 3  -wx
 2  -w-
 1  --x
 0  ---
   Par exemple :  
chmod owner group other
777 rwx rwx rwx
755 rwx r-x r-x
644 rw- r-- r--
640 rw- r-- ---
700 rwx --- ---

C'est à vous de donner les droits d'accès à vos fichiers, mais regardez le chapitre suivant qui offre une possiblité supplémentaire, en créant un lien sur un fichier pointant dans un répertoire n'ayant pas les mêmes droits... ?
Si malgré les permissions que vous avez accordé à un utilisateur, celui-ci n'a d'autre droit que la lecture :
Vérifiez que :
_Cet utilisateur fait bien partie du groupe.
_Les fichiers sont placés dans un répertoire ayant les mêmes droits.
_les utilisateurs du groupe ont les droits d'accès :
Dans notre exemple nous avons : -rwxrwxr-- 1 root root.... etc...
Cela signifie qu'il s'agit d'un fichier ordinaire, que le propriétaire et les utilisateurs du groupe peuvent lire écrire et exécuter ce fichier, je passe le chiffre 1 (voir plus bas) et que l'utilisateur (propriétaire) et le groupe (Utilisateurs) sont root.

La commande chown va permettre de modifier cela en faisant par exemple :
# ls -l /droopy/ma.conf
# -rw-rw-r--  1  root root  200  jan 5 21:37  /droopy/ma.conf
# chown droopy.users /droopy/ma.conf
# ls -l /droopy/ma.conf
# -rw-rw-r--  1  dropy users  200  jan 5 21:37  /droopy/ma.conf
La commande chown aura attribué la propriété de ma.conf à droopy et les droits définis par chmod aux utilisateurs du groupe users.
Les autres utilisateurs (reste du monde) et les utilisateurs d'un autre groupe que users, n'auront pas les droits d'écriture sur ma.conf.

Je vous conseille vivement de consulter les pages de manuel, et vous pouvez lire le Printing-HOWTO (en Francais) qui décrit comment réaliser les différents répertoire et définir les permissions en fonction des utilisateurs.



Ce que la commande ls -l affiche :
 -rwxr--r---  1  root root  200  jan 5 21:37  /droopy/ma.conf*
Correspond à :
type de fichier et permissions, nombre de liens physiques, utilisateur, groupe, taille en octets, date et heure, le nom du fichier et l'astérisque '*' indique qu'il s'agit d'un fichier exécutable.

Si vous lancer # ls -l /dev, vous obtiendrez deux chiffres séparés par un virgule à la place de la taille.
Ce sont les numéro majeur et numéro mineur:
Le numéro majeur indique le type du périphérique. Le numéro mineur précise le périphérique de ce type.
si vous avez 3, 0.. date...heure /dev/hda, 3 (numéro majeur) designe un disque dur et 0 (numéro mineur ) le disque hda (C:).
Les fichiers spéciaux du GUIDE-DU-ROOTARD donne la liste des pilotes de périphérique. Retour


Glossaire des commandes et termes Linuxiens Haut de page Les liens symboliques
Copyleft  Michel Luc cern91@tuxfamily.org Document sous licence FDL