Linux : Gestion des droits
1) Contenu
2) Notion de permission d’accès ......................................................................................................... 2
3) Droits d’accès .................................................................................................................................. 3
La notation octale................................................................................................................................ 4
Le masque de protection..................................................................................................................... 4
Type de fichier ..................................................................................................................................... 5
Les droits d’accès « classiques » ......................................................................................................... 5
La commande CHMOD ........................................................................................................................ 6
Les droits spéciaux .............................................................................................................................. 6
Droits spéciaux sur les fichiers ........................................................................................................ 6
Droits spéciaux sur les dossiers ....................................................................................................... 7
4) Les commandes de la gestion de droits .......................................................................................... 7
CHOWN................................................................................................................................................ 7
CHGRP.................................................................................................................................................. 7
CHMOD ................................................................................................................................................ 9
5) Dépendances ................................................................................................................................... 9
1
2) Notion de permission d’accès
Du fait que Linux puisse supporter de nombreux utilisateurs, le système contient un mécanisme
destiné à protéger les fichiers de la curiosité de certains. Vous n'aimeriez sans doute pas que
n'importe qui puisse lire votre courrier, n'est-ce pas ?
Ce mécanisme, appelé permission d'accès, permet aux utilisateurs d'être « propriétaires » de certains
fichiers ou répertoires. Par exemple, Laurent est propriétaire de tous les fichiers qu'il a créé dans son
répertoire personnel, et peut en faire ce qu'il veut.
Linux permet également de partager des fichiers entre utilisateurs et groupes d'utilisateurs. Si
Laurent le désirerait, il pourrait interdire tout accès à ses fichiers, de telle manière qu’aucune
personne ne puisse y accéder. Néanmoins, sur la plupart des systèmes, les autres utilisateurs
peuvent par défaut lire vos fichiers, mais ne peuvent pas les modifier ou les effacer. C'est à vous de
les protéger davantage si vous en ressentez le besoin.
Comme nous l'avons dit, chaque fichier appartient à un utilisateur particulier. Mais les fichiers
appartiennent également à un groupe, qui est un groupe d'utilisateurs défini dans la configuration du
système. Chaque utilisateur fait partie d'au moins un groupe lorsque son compte est créé.
L'administrateur système peut également placer cet utilisateur dans plusieurs groupes à la fois.
Les groupes sont généralement définis par le type d'utilisateurs qui ont accès à la machine. Par
exemple, sur un système Linux d'une université, les utilisateurs pourraient être placés dans des
groupes comme étudiant, professeur, faculté ou invite. Il existe aussi quelques groupes définis par le
système pour contrôler l'accès aux ressources (comme bin et admin), mais les utilisateurs
appartiennent très rarement à ces groupes.
Les droits d'accès se divisent en trois catégories principales : lecture, écriture et exécution. Ces
permissions peuvent être accordées à trois classes d'utilisateurs : le propriétaire du fichier, le groupe
d'utilisateurs auquel ce fichier appartient, et tous les autres utilisateurs, quel que soit le groupe.
L'autorisation de lecture permet de lire le contenu du fichier, ou bien dans le cas de répertoires, de
lire le contenu de ce répertoire. Pour les répertoires, le droit d'écriture permet à l'utilisateur de créer
de nouveaux fichiers ou d'en supprimer à l'intérieur de ce répertoire. Finalement, la permission
d'exécution autorise l'utilisateur à exécuter le fichier en tant que programme. Dans le cas des
répertoires, posséder le droit d'exécution autorise par convention l'utilisateur à traverser le
répertoire en question.
Tout ceci implique une gestion avancée de la sécurité, qui est assurée par le noyau et par le système
de fichiers.
Au niveau du noyau :
o Chaque utilisateur est identifié de manière unique par un numéro (uid) dans le
système. Ce numéro est utilisé pour vérifier les droits de l'utilisateur, autrement dit,
ce qu'il peut faire. Les droits des utilisateurs comprennent la possibilité de lire ou
écrire un fichier, d'accéder ou non à une ressource ou d'exécuter un programme.
2
o Il est également possible de créer un ou plusieurs "groupes" d'utilisateurs, et de
donner des droits particuliers à ces groupes. Tous les utilisateurs qui font partie de ce
groupe recevront les droits du groupe.
Au niveau système de fichier :
o Chaque fichier linux est associé à un descripteur (i-node) qui contient un certain
nombre de renseignement : identification du propriétaire, adresse des blocs utilisé
par le fichier, sa taille en octets, son type, sa date de création ...
o La commande linux : ls -l permet d'en avoir un aperçu des droits
ls -l /mnt/multimedia/test.mp3 donne :
-rwxrwxrwx 1 kernel users 3.8M jun 2 2001 /mnt/multimedia/test.mp3
3) Droits d’accès
La commande ls -l permet d'avoir une liste détaillée indiquant, entre autres, les droits d'accès.
Normalement l'UID d'un processus est l'UID du créateur.
o Si Set UID=1 alors l'UID du processus engendré à partir d'un fichier est l'UID du fichier.
o Si Set UID=0 alors c'est l'UID du root (administrateur système).
Pour modifier des droits on utilise la commande chmod :
o Options :
o -r descente récursive d'une sous-arborescence.
o -f fonctionnement silencieux.
o Mode :
numérique : codage en octal de bits de permission (SetUID +3 fois les droits
r=4, w=2, r=1).
3
symbolique : | u | g | o | a | + | - | = | r | w | x | S | l | t |
La notation octale
La commande «stat» nous montre une autre manière de marquer les droits (voir ci-dessus) en
utilisant la notation octale. Par convention la présence d'un droit est notée «1», l'absence «0». On a
la correspondance suivante :
Il est habituel de représenter les droits en octal comme indiqués dans le tableau suivant :
Pour obtenir les permissions exprimées en octal, il suffit d'ajouter les nombres de la table de
correspondance ci-dessus, pour lesquels les droits sont positionnés.
Le masque de protection
Chaque nouveau répertoire ou fichier possède des droits définis par la commande umask
(généralement 022 pour root et 002 pour les autres). Ces droits par défaut sont fixés par soustraction
des droits maximaux (777 pour un répertoire et 666 pour un fichier standard).
Pour un répertoire : 777 - 002 = 775 soit rwxrwxr-x
Pour un fichier standard : 666 - 002 = 664 soit rw-rw-r--
Exemple:
[laurent@linux laurent]$ umask 002
[laurent@linux laurent]$ mkdir essai1
[laurent@linux laurent]$ echo "fichier">essai2
[laurent@linux laurent]$ ls -l
total 38
...
4
drwxrwxr-x 2 laurent laurent 1024 oct 22 10:13 essai1/
-rw-rw-r-- 1 laurent laurent 8 oct 22 10:13 essai2
...
umask affiche le masque de l'utilisateur actif
umask -S affiche les droits correspondants au masque, sous forme symbolique.
Exemple :
[laurent@linux laurent]$ umask -S
u=rwx, g=rwx, o=rx
umask masque fixe les droits ultérieurs, en notation octale, de création des fichiers de l'utilisateur
actif.
Ce masque est défini dans le fichier /etc/profile.
Type de fichier
C'est le "-" qui indique qu'il s'agit d'un fichier ordinaire. Linux distingue 4 types de fichiers :
• Les fichiers ordinaires (-) : Ce sont tous les fichiers courants, .txt, .doc, .mp3 .jpeg ou
même sans extensions.
• Les fichiers spéciaux (c ou b) : Ce sont les fichiers associés aux périphériques, ils sont
localisés dans /dev/
• Les répertoires (d) : Un répertoire est un fichier qui permet de référencer d'autres
fichiers. Il est constitué d'une liste de couples (nom, index d'un i-node) qui permet
d'accéder à un fichier à partir de son nom. Il possède en particuliers 2 couples : "."
lui-même et ".." son répertoire parent. Petite exception pour / pour qui "." et ".."
font référence à lui-même.
• Les liens (l) : Un lien permet d'accéder à un même fichier ou répertoire en utilisant
un nom différent.
Les droits d’accès « classiques »
Les droits "classiques" sont représentés par "rwxrwxrwx" de l'exemple plus haut. Vous remarquerez
qu'il y'a 3 fois la même série de lettres : rwx.
Les droits d'accès à un fichier vont être donnés :
• Au propriétaire du fichier, à qui correspondent les 3 premières lettres. Dans mon
exemple plus haut l'utilisateur était "kernel".
• A un des groupes auquel appartient le propriétaire (les 3 lettres du milieu), Dans
mon exemple plus haut le groupe était "users"
• A tous les autres utilisateurs (les 3 dernières lettre)
Ces droits se décomposent en 3 niveaux :
5
• Accès en lecture (r) : les utilisateurs autorisés peuvent visualiser le fichier ou le
répertoire, ils peuvent copier le fichier vers un autre répertoire (la copie devient
alors leur propriété).
• Accès en écriture (w) : les utilisateurs autorisés peuvent modifier le fichier ou le
détruire. Dans le cas d'un répertoire ils peuvent manipuler (créer, copier, déplacer ou
détruire) son contenu.
• Accès en exécution (x) : les utilisateurs autorisés peuvent exécuter le fichier. Si vous
êtes un nouvel arrivant, cette notion est très importante. Il n'y a pas de .exe sous
linux/unix, pour s'exécuter un programme a besoin d'avoir le bit exécutable à 1.
Tous ces droits sont évidemment gérés par des bits codés dans l'i-node du fichier. Si le bit d'un des 9
champs est à 1 alors la lettre correspondante est affichée sinon c'est "-".
Quelques exemples :
• -rwxr-xr-x : accès plein droit pour l'utilisateur, lecture/exécution pour les membres
du groupe de l'utilisateur idem pour les autres.
• -r-------- : accès en lecture seule pour l'utilisateur et accès interdit au reste du monde
La commande CHMOD
La commande chmod permet de modifier les droits d'accès à un fichier. Un utilisateur ne peut
modifier les droits que des fichiers qui lui appartiennent, sauf root bien-sûr.
Les droits sous linux sont repérés par une série de 3 valeurs octales. La première correspond au
propriétaire, la seconde au groupe associé et la dernière au reste de la planète. Pour chaque
catégorie d'utilisateur l'accès en lecture vaut 4, l'accès en écriture vaut 2 et l'accès en exécution 1.
Quelques exemples :
• Pour avoir -rwxrwxrwx sur test.mp3 je dois taper :
chmod 777 test.mp3
• Pour avoir -rwxr-xr-x sur test.mp3 je dois taper :
chmod 755 test.mp3
• Pour avoir -r-------- sur test.mp3 je dois taper :
chmod 400 test.mp3
Les droits spéciaux
Trois fois trois font neuf, le compte est bon me direz-vous ? Vous auriez tort, car en réalité c'est trois
fois quatre qui font douze. Il existe sous linux des droits spéciaux.
C'est ce qui permet par exemple que dans le répertoire /tmp auquel tout le monde a un accès plein
droit, vous ne pouviez néanmoins supprimer les fichiers des autres utilisateurs.
Droits spéciaux sur les fichiers
o setuid : Un fichier exécutable par son propriétaire, peut être setuid. C'est à dire qu'il
s'exécute avec les droits de son propriétaire et non ceux de celui qui le lance. C'est d'ailleurs
parce que "passwd" est setuid que vous pouvez modifier votre mot de passe avec "passwd"
(écrire dans /etc/passwd ou /etc/shadow).
6
o setgid : De la même façon, un exécutable peut être setgid, et s'exécuter avec les droits du
groupe auquel il appartient.
o sticky bit : Enfin, un exécutable peut être "sticky" : cela signifie qu'il reste en mémoire même
après la fin de son exécution, pour pouvoir être relancé plus rapidement. Attention seul root
peut positionner le sticky bit.
Droits spéciaux sur les dossiers
Il n'y a pas de setuid pour les répertoires, en revanche,
o setgid : Quand un répertoire est setgid, tous les fichiers créés dans ce répertoire
appartiennent au même groupe que le répertoire. C'est utilisé par exemple quand plusieurs
personnes travaillent sur un projet commun.
o sticky bit : Quand on positionne le sticky bit pour un répertoire, un utilisateur ne peut effacer
que les fichiers qui lui appartiennent dans ce répertoire. C'est ce qui est utilisé pour le
répertoire /tmp
4) Les commandes de la gestion de droits
Trois commandes servent à modifier les droits : chown (change owner), chgrp (change group) et
chmod (change mode). Elles sont utilisables par root ou le propriétaire.
CHOWN
Cette commande permet changer le propriétaire d'un fichier, d'un répertoire ou d'un ensemble de
ces éléments.
Syntaxe : chown [options] nouvel_utilisateur [fichier(s)] [répertoire(s)]
CHGRP
Cela permet de changer le groupe propriétaire.
Cette commande est utilisable par root ou le propriétaire, à condition que celui-ci soit membre du
nouveau groupe.
Syntaxe : chgrp [options] nouveau_groupe [fichier(s)] [répertoire(s)]
La commande chgrp est redondante car chown permet de changer le groupe seul, ainsi que le
propriétaire et le groupe en même temps.
Pour les deux commandes l'option «-R» permet de changer propriétaire et/ou groupe récursivement.
Dans l'exemple ci-dessous laurent n'est pas autorisé à modifier le propriétaire.
[laurent@linux laurent]$ ls –l
drwxrwxr-x 2 laurent laurent 1024 Oct 15 12:22 essai1/
-rw-rw-r-- 1 laurent laurent 8 Oct 15 12:12 essai2
[laurent@linux laurent]$ chown root essai1 essai2
7
chown: essai1: Opération non permise
chown: essai2: Opération non permise
En tant que root c’est possible.
[root@linux /root]# cd /home/laurent
[root@linux laurent]# chown root essai1 essai2
[root@linux laurent]# ls –l
drwxrwxr-x 2 root laurent 1024 Oct 15 12:30 essai1/
-rw-rw-r-- 1 root laurent 8 Oct 15 12:30 essai2
Changements de groupes avec les 2 commandes.
[root@linux laurent]# chgrp root essai1
[root@linux laurent]# chown .root essai2
[root@linux laurent]# ls –l
drwxrwxr-x 2 root root 1024 Oct 15 12:31 essai1/
-rw-rw-r-- 1 root root 8 Oct 15 12:31 essai2
Changements de groupe et de propriétaire simultanément :
[root@linux laurent]# chown [Link] essai2
[root@linux laurent]# ls –l
drwxrwxr-x 2 root root 1024 Oct 15 12:31 essai1/
-rw-rw-r—1 laurent laurent 8 Oct 15 12:31 essai2
Changements récursifs :
[root@linux laurent]# ls -l essai1
-rw-r--r-- 1 root root 42 Oct 15 12:32 [Link]
-rw-r--r-- 1 root root 275 Oct 15 12:32 [Link]
[root@linux phil]# chown -R [Link] essai1
[root@linux laurent]# ls –l
drwxrwxr-x 2 laurent laurent 1024 Oct 15 12:33 essai1/
-rw-rw-r-- 1 laurent laurent 8 Oct 15 12:34 essai2
8
[root@linux laurent]# ls -l essai1
-rw-r--r-- 1 laurent laurent 42 Oct 15 12:34 [Link]
-rw-r--r-- 1 laurent laurent 275 Oct 15 12:34 [Link]
CHMOD
La logique est la même que précédemment, il suffit de rajouter une 4ème valeur octale, telle que
setuid vaille 4, setgid vaille 2 et sticky bit vaille 1.
Si vous ne souhaitez pas jouer avec les droits spéciaux, faites un chmod avec 3 chiffres (par défaut les
droits spéciaux conserveront leurs valeurs). Mais si vous souhaitiez par exemple que le contenu du
répertoire /mnt/projet appartienne au groupe propriétaire du répertoire mais qu'en sus chacun ne
puisse que ses fichiers, vous pouvez taper :
chmod 3777 /mnt/projet
Notez que c'est la colonne la plus à gauche qui code les droits spéciaux.
5) Dépendances
Il est important de noter que les permissions d'accès à un fichier dépendent aussi de celles du
répertoire dans lequel il se trouve. Par exemple, même si un fichier a les permissions -rwxrwxrwx, les
autres utilisateurs ne peuvent accéder à ce fichier que si ils ont les droits de lecture et d'exécution
sur le répertoire dans lequel le fichier se trouve. Par exemple, si René voulait restreindre l'accès à
tous ses fichiers, il pourrait simplement positionner les permissions de son répertoire personnel
/home/rene sur -rwx------. De cette manière, aucun autre utilisateur ne pourrait accéder à son
répertoire, et par conséquent aux fichiers qu'il contient. René n'aurait alors plus besoin de se soucier
des permissions particulières de chaque fichier.
En d'autres termes, pour avoir accès à un fichier, vous devez avoir la permission d'exécution sur tous
les répertoires rencontrés sur son chemin d'accès, et au moins le droit de lecture de ce fichier.
D'habitude, les utilisateurs d'un système Linux ne font pas mystère de leurs fichiers. Les permissions
par défaut des fichiers sont souvent -rw-r--r--, ce qui autorise tout le monde à prendre connaissance
du fichier, sans pouvoir le modifier par inadvertance. Les répertoires possèdent en général les droits -
rwxr-xr-x, ce qui autorise tout le monde à les traverser, sans pouvoir toutefois créer ou effacer de
fichiers dedans.
Cependant, certains utilisateurs désirent garder secrètes certaines données personnelles, ce qui est
bien normal. Mettre les droits -rw------- sur un fichier le rendra inaccessible au reste du monde. De la
même façon, un répertoire ayant les permissions -rwx------ empêchera tous les utilisateurs autres
que le propriétaire d'aller y faire un tour.