« Les permissions sur les fichiers » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
 
(25 versions intermédiaires par 10 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
[[Category:Environnement système]]
[[Catégorie:Administration système]]
 
= Les permissions sur les fichiers =
= Les permissions sur les fichiers =


<div class="leatitre">Les permissions sur les fichiers</div><div class="leapar">par Jean-Christophe</div><div class="leadesc">Dis Papa, c'est quoi <code>rwxr-xr-x</code> ? Tais-toi et nage !</div>
par [[Utilisateur:LeaJice|Jean-Christophe]]
----
 
Dis Papa, c'est quoi <tt>rwxr-xr-x</tt> ? Tais-toi et nage !


== Un peu de théorie ==
== Un peu de théorie ==
Ligne 13 : Ligne 15 :
Les fichiers appartiennent à un '''''utilisateur''''' à l'intérieur d'un '''''groupe d'utilisateurs'''''.
Les fichiers appartiennent à un '''''utilisateur''''' à l'intérieur d'un '''''groupe d'utilisateurs'''''.


* L'''utilisateur'', c'est vous ! C'est un identifiant avec un mot de passe, qui sont définis dans le fichier <code>/etc/passwd</code>. On peut ajouter des utilisateurs à l'aide de la commande <code>useradd</code> ou <code>adduser</code> (voir <code>man adduser</code>). Certaines distributions fournissent des outils graphiques pour ce faire, comme <code>drakuser</code> de Mandrake.
* L'''utilisateur'', c'est vous ! C'est un identifiant avec un mot de passe, qui sont définis dans le fichier <tt>/etc/passwd</tt>. On peut ajouter des utilisateurs à l'aide de la commande <tt>useradd</tt> ou <tt>adduser</tt> (voir <tt>man adduser</tt>). Certaines distributions fournissent des outils graphiques pour ce faire, comme <tt>drakuser</tt> de Mandrake.
* Le ''groupe d'utilisateurs'', défini dans le fichier <code>/etc/group</code>, permet de regrouper des utilisateurs dans des groupes (un même utilisateur peut faire partie de plusieurs groupes) afin par exemple de partager des permissions entre plusieurs utilisateurs. Par exemple, le groupe <code>quakeusers</code> peut être défini afin d'y placer les utilisateurs qui auront le droit d'utiliser le jeu Quake : on donnera par exemple la permission aux membres de ce groupe de lancer l'exécutable de ce jeu. De même, le groupe <code>cdrecording</code> aura les droits d'utiliser le graveur de CD.
* Le ''groupe d'utilisateurs'', défini dans le fichier <tt>/etc/group</tt>, permet de regrouper des utilisateurs dans des groupes (un même utilisateur peut faire partie de plusieurs groupes) afin par exemple de partager des permissions entre plusieurs utilisateurs. Par exemple, le groupe <tt>quakeusers</tt> peut être défini afin d'y placer les utilisateurs qui auront le droit d'utiliser le jeu Quake : on donnera par exemple la permission aux membres de ce groupe de lancer l'exécutable de ce jeu. De même, le groupe <tt>cdrecording</tt> aura les droits d'utiliser le graveur de CD.


=== Les droits possibles : R, W et X ===
=== Les droits possibles : R, W et X ===
Ligne 20 : Ligne 22 :
Les droits que l'on peut attribuer à un fichier concernent :
Les droits que l'on peut attribuer à un fichier concernent :


* la lecture ('''<code>r</code>''' comme read),
* la lecture ('''<tt>r</tt>''' comme read),
* l'écriture ('''<code>w</code>''' comme write),
* l'écriture ('''<tt>w</tt>''' comme write),
* l'exécution ('''<code>x</code>''' comme execute).
* l'exécution ('''<tt>x</tt>''' comme execute).


On peut attribuer ces droits pour :
On peut attribuer ces droits pour :
Ligne 32 : Ligne 34 :
----
----


== Visualiser/modifier les permissions ==
== Visualiser les attributs ==
 
=== Ligne de commande ===
 
En ligne de commande (voir la rubrique [shell.php3 Shell]), tapez :
En ligne de commande (voir la rubrique [shell.php3 Shell]), tapez :


<div class="code">[username@taz username]$ '''ls -la'''<br /><font size="-1">total 144 <br /> drwxr-xr-x   18 username     users        2048 jan  7 19:22 . <br /> drwxr-xr-x    7 root     root         1024 fév  6  1996 .. <br /> -rw-------    1 username     users         147 jan  7 19:22 .Xauthority <br /> -rw-r--r--    1 username     users        1899 jui 28 21:01 .Xdefaults <br /> -rw-------    1 username     users        5860 jan  7 19:22 .bash_history <br /> -rw-r--r--    1 username     users          24 jui 28 21:01 .bash_logout <br /> -rw-r--r--    1 username     users         262 jui 29 18:15 .bash_profile <br /> -rw-r--r--    1 username     users         434 jui 28 21:01 .bashrc <br /> -rw-r--r--    1 username     users        2626 jui 28 21:01 .emacs <br /> -rw-r--r--    1 username     users         532 jui 28 21:01 .inputrc <br /> drwxr-xr-x    3 username     users        1024 jui 28 21:01 .kde <br /> -rw-r--r--    1 username     users        1546 jan  7 19:04 .kderc <br /> -rwxr-xr-x    1 username     users        1166 jui 28 21:01 .kderc.rpmorig</font></div>
<div class="code">[username@taz username]$ '''ls -la'''<br /><font size="-1">total 144 <br /> drwxr-xr-x  18 username    users        2048 jan  7 19:22 . <br /> drwxr-xr-x    7 root    root        1024 fév  6  1996 .. <br /> -rw-------   1 username    users        147 jan  7 19:22 .Xauthority <br /> -rw-r--r--   1 username    users        1899 jui 28 21:01 .Xdefaults <br /> -rw-------   1 username    users        5860 jan  7 19:22 .bash_history <br /> -rw-r--r--   1 username    users          24 jui 28 21:01 .bash_logout <br /> -rw-r--r--   1 username    users        262 jui 29 18:15 .bash_profile <br /> -rw-r--r--   1 username    users        434 jui 28 21:01 .bashrc <br /> -rw-r--r--   1 username    users        2626 jui 28 21:01 .emacs <br /> -rw-r--r--   1 username    users        532 jui 28 21:01 .inputrc <br /> drwxr-xr-x    3 username    users        1024 jui 28 21:01 .kde <br /> -rw-r--r--   1 username    users        1546 jan  7 19:04 .kderc <br /> -rwxr-xr-x    1 username    users        1166 jui 28 21:01 .kderc.rpmorig</font></div>


Pour une explication détaillée des différentes colonnes, voir la rubrique [shell.php3#ls Shell]. Nous n'allons ici nous intéresser qu'aux éléments relatifs aux permissions.
Pour une explication détaillée des différentes colonnes, voir la rubrique [shell.php3#ls Shell]. Nous n'allons ici nous intéresser qu'aux éléments relatifs aux permissions.


1. La première colonne -rw-r--r-- représente les permissions associées au fichier. <br />''(le premier caractère est le type du fichier fichier : un d pour un répertoire, un l pour un lien, etc.)''<br /> Ensuite, on a trois groupes de trois caractères : '''<code><font size="+1">rwx</font></code>'''. La présence de la lettre r w ou x accorde la permission, un tiret '-' la dénie.
1. La première colonne -rw-r--r-- représente les permissions associées au fichier. <br />''(le premier caractère est le type du fichier fichier : un d pour un répertoire, un l pour un lien, etc.)''<br /> Ensuite, on a trois groupes de trois caractères : '''<tt>rwx</tt>'''. La présence de la lettre r w ou x accorde la permission, un tiret '-' la dénie.


'''<code>r</code>''' signifie : possibilité de lire ce fichier / dans ce répertoire, <br />'''<code>w</code>''' signifie : possibilité d'écrire dans ce fichier / répertoire, <br />'''<code>x</code>''' signifie : possibilité d'exécuter ce fichier / d'aller dans ce répertoire.
'''<tt>r</tt>''' signifie : possibilité de lire ce fichier / dans ce répertoire, <br />'''<tt>w</tt>''' signifie : possibilité d'écrire dans ce fichier / répertoire, <br />'''<tt>x</tt>''' signifie : possibilité d'exécuter ce fichier / d'aller dans ce répertoire.


Les trois groupes de caractère s'appliquent, dans l'ordre, à :
Les trois groupes de caractère s'appliquent, dans l'ordre, à :
Ligne 53 : Ligne 52 :


{|
{|
| <code>-</code>
| <tt>-</tt>
| <code>r w x</code>
| <tt>r w x</tt>
| <code>r - x</code>
| <tt>r - x</tt>
| <code>r - x</code>
| <tt>r - x</tt>
|-
|-
|  
|  
Ligne 64 : Ligne 63 :
|}
|}


2. La 3<sup>ème</sup> colonne est l'utilisateur à qui appartient le fichier. À cet utilisateur s'appliquent les permissions représentées par les trois premiers caractères de permissions de la première colonne (<code>-'''<font size="+1">rwx</font>'''r-xr-x</code>).
2. La 3<sup>ème</sup> colonne est l'utilisateur à qui appartient le fichier. À cet utilisateur s'appliquent les permissions représentées par les trois premiers caractères de permissions de la première colonne (<tt>-'rwx'r-xr-x</tt>).


3. La 4<sup>ème</sup> colonne est le groupe d'utilisateurs auquel appartient le fichier. A ce groupe s'appliquent les permissions représentées par le deuxième groupe de trois caractères de permissions de la première colonne (<code>-rwx'''<font size="+1">r-x</font>'''r-x</code>).
3. La 4<sup>ème</sup> colonne est le groupe d'utilisateurs auquel appartient le fichier. A ce groupe s'appliquent les permissions représentées par le deuxième groupe de trois caractères de permissions de la première colonne (<tt>-rwx'r-x'r-x</tt>).


'''<font size="+1">Exemples :</font>'''<br /> 1. La ligne suivante : <br /><code><font size="-1">drwxr-xr-x  18  username  users   2048 jan  7 19:22 .</font></code><br /> signifie pour le répertoire '.' (le répertoire HOME de l'utilisateur username) que tout le monde a le droit de lire le contenu du répertoire (le dernier 'r'), et que tout le monde peut y accéder (le dernier 'x'). Par contre, seul l'utilisateur username peut y écrire (caractère 'w'), c'est à dire y créer des fichiers, les modifier ou les supprimer.
'''<font size="+1">Exemples :</font>'''<br /> 1. La ligne suivante : <br /><tt>drwxr-xr-x  18  username  users  2048 jan  7 19:22 .</tt><br /> signifie pour le répertoire '.' (le répertoire HOME de l'utilisateur username) que tout le monde a le droit de lire le contenu du répertoire (le dernier 'r'), et que tout le monde peut y accéder (le dernier 'x'). Par contre, seul l'utilisateur username peut y écrire (caractère 'w'), c'est à dire y créer des fichiers, les modifier ou les supprimer.


2. La ligne : <br /><code><font size="-1">-rw-r-----   1  username  wwwadm  1728 jan  7 19:22 projet-www</font></code><br /> signifie que seul 'username' et les utilisateurs du groupe 'wwwadm' peuvent lire ce fichier, que seule username peut le modifier, et que les autres utilisateurs n'ont aucun droit dessus (le dernier groupe de caractères '---').
2. La ligne : <br /><tt>-rw-r-----   1  username  wwwadm  1728 jan  7 19:22 projet-www</tt><br /> signifie que seul 'username' et les utilisateurs du groupe 'wwwadm' peuvent lire ce fichier, que seule username peut le modifier, et que les autres utilisateurs n'ont aucun droit dessus (le dernier groupe de caractères '---').


== Modification ==
== Modifier les attributs ==


=== Les droits : <code>chmod</code> ===
=== Les droits : <tt>chmod</tt> et <tt>umask</tt> ===


Il existe deux façon de changer les droits d'un fichier ou répertoire.
Il existe deux façon de changer les droits d'un fichier ou répertoire.


* Soit en précisant les droits en octal (base 8). La correspondance est la suivante :
* '''Soit en précisant les droits en octal (base 8)'''. La correspondance est la suivante :
** 1 : droit d'exécution
** 1 : droit d'exécution ;
** 2 : droit d'écriture
** 2 : droit d'écriture ;
** 4 : droit de lecture
** 4 : droit de lecture.
Donc, pour préciser les droits en exécution et lecture, le chiffre octal est : 1 + 4 = 5. Pour préciser les droits en éxécution, écriture et lecture, le chiffre octal est : 1 + 2 + 4 = 7.
Donc, pour préciser les droits en exécution et lecture, le chiffre octal est : 1 + 4 = 5. Pour préciser les droits en éxécution, écriture et lecture, le chiffre octal est : 1 + 2 + 4 = 7.
Ensuite, il faut savoir que le chiffre des unités (en octal) correspond 'au reste du monde' que le chiffre des 'huitaines' (deuxième chiffre en octal) correspond 'au groupe' et que le chiffre des 'soixante-quatraines' (troisième chiffre en octal) correspond 'à l'utilisateur'. Ainsi, si on veut que l'utilisateur ait les 3 droits (rwx), que le groupe ai les 2 droits (r-x) et que le reste du monde n'ai aucun droit (---), le nombre octal est : 750 (7 = 1 + 2 + 4 ; 5 = 1 + 4 ; 0 = 0). Pour donner ces droits à un fichier on tape alors :
Ensuite, il faut savoir que le chiffre des unités (en octal) correspond 'au reste du monde' que le chiffre des 'huitaines' (deuxième chiffre en octal) correspond 'au groupe' et que le chiffre des 'soixante-quatraines' (troisième chiffre en octal) correspond 'à l'utilisateur'. Ainsi, si on veut que l'utilisateur ait les 3 droits (rwx), que le groupe ait les 2 droits (r-x) et que le reste du monde n'ai aucun droit (---), le nombre octal est : 750 (7 = 1 + 2 + 4 ; 5 = 1 + 4 ; 0 = 0). Pour donner ces droits à un fichier on tape alors :
<div class="code"> [username@localhost ~] $ chmod 0750 /chemin/vers/fichier </div>
<div class="code"> [username@localhost ~] $ chmod 0750 /chemin/vers/fichier </div>
Le premier 0 dans 0750 signifie qu'on donne le nombre en octal (sinon la correspondance en base 10 ou autre est complexe à déterminer).
Le premier 0 dans 0750 signifie qu'on donne le nombre en octal (son absence ne modifie pas le comportement de chmod).
* Soit en précisant les droits qu'on ajoute (+) ou soustrait (-) au fichier (ou répertoire). Pour ajouter des droits à l'utilisateur, on ajoute un droit (r,w, x ou toute combinaison des 3) à 'u'. Par exemple : <code>u+rw</code> signifie qu'on ajoute les droit de lecteur et d'écriture à l'utilisateur. Pour le groupe, on ajoute ou soustrait à 'g' et pour le reste du monde on ajoute ou soustrait à 'o' (other). Par exemple pour ajouter les droits de lecture et d'écriture à l'utilisateur on tapera :
 
* '''Soit en précisant les droits qu'on ajoute (+) ou soustrait (-) au fichier (ou répertoire).''' Pour ajouter des droits à l'utilisateur, on ajoute un droit (r,w, x ou toute combinaison des 3) à 'u'. Par exemple : <tt>u+rw</tt> signifie qu'on ajoute les droit de lecteur et d'écriture à l'utilisateur. Pour le groupe, on ajoute ou soustrait à 'g' et pour le reste du monde on ajoute ou soustrait à 'o' (other). Par exemple pour ajouter les droits de lecture et d'écriture à l'utilisateur on tapera :
<div class="code"> [username@localhost ~] $ chmod u+rw /chemin/vers/fichier </div>
<div class="code"> [username@localhost ~] $ chmod u+rw /chemin/vers/fichier </div>
Et :
Et :
Ligne 96 : Ligne 96 :
rendra tous les fichiers contenus dans ce répertoire (ainsi que dans tous les sous-répertoires de celui-ci) lisibles et écrivables et que tous les sous-répertoires (et leurs sous-répertoires) seront 'navigables' (le droit d'exécution pour un répertoire autorise à se rendre dans le dit répertoire).
rendra tous les fichiers contenus dans ce répertoire (ainsi que dans tous les sous-répertoires de celui-ci) lisibles et écrivables et que tous les sous-répertoires (et leurs sous-répertoires) seront 'navigables' (le droit d'exécution pour un répertoire autorise à se rendre dans le dit répertoire).


=== La propriété : <code>chown</code> ===
Enfin, si vous voulez automatiser l'attribution de droits par défaut lors de la création d'un nouveau fichier ou d'un nouveau répertoire, il faut utiliser la commande shell <tt>umask</tt>. Par exemple, vous désirez que tout nouveau fichier que vous créez soit ouvert en lecture, écriture (et éventuellement en exécution) seulement pour vous, pas pour votre groupe, et encore moins pour tous. Il vous suffit d'ajouter dans votre fichier <tt>~/.bash_profile</tt> la commande <tt>umask 077</tt>.
 
=== La propriété : <tt>chown</tt> ===


Les droits de propriétés sont très simples à modifier. Il suffit de donner le nom du nouveau possesseur (et éventuellement le nom du nouveau groupe) et le nom du fichier. Ainsi :
Les droits de propriétés sont très simples à modifier. Il suffit de donner le nom du nouveau possesseur (et éventuellement le nom du nouveau groupe) et le nom du fichier. Ainsi :
Ligne 102 : Ligne 104 :
<div class="code"> [username@localhost ~] $ chown username /chemin/vers/fichier </div>
<div class="code"> [username@localhost ~] $ chown username /chemin/vers/fichier </div>


donne le fichier <code>/chemin/vers/fichier</code> à l'utilisateur 'username'. Et :
donne le fichier <tt>/chemin/vers/fichier</tt> à l'utilisateur 'username'. Et :


<div class="code"> [username@localhost ~] $ chown username.groupe /chemin/vers/fichier </div>
<div class="code"> [username@localhost ~] $ chown username:groupe /chemin/vers/fichier </div>


donne le fichier <code>/chemin/vers/fichier</code> à l'utilisateur 'username' et au groupe 'groupe'. Comme pour <code>chmod</code> le paramétre '-R' permet de rendre récursive l'application de la nouvelle propriété (i.e. répertoires et sous-répertoires).
donne le fichier <tt>/chemin/vers/fichier</tt> à l'utilisateur 'username' et au groupe 'groupe'. Comme pour <tt>chmod</tt> '''le paramétre '-R' permet de rendre récursive''' l'application de la nouvelle propriété '''(i.e. répertoires et sous-répertoires)'''.


=== Le groupe : <code>chgrp</code> ===
=== Le groupe : <tt>chgrp</tt> ===


Le changement de groupe uniquement peut être obtenu par :
Le changement de groupe uniquement peut être obtenu par :
Ligne 114 : Ligne 116 :
<div class="code"> [username@localhost ~] $ chgrp groupe /chemin/vers/fichier </div>
<div class="code"> [username@localhost ~] $ chgrp groupe /chemin/vers/fichier </div>


qui donne <code>/chemin/vers/fichier</code> au groupe 'groupe'. L'argument '-R' rend cette application récursive.
qui donne <tt>/chemin/vers/fichier</tt> au groupe 'groupe'. L'argument '-R' rend cette application récursive.


=== Interface graphique ===
=== Interface graphique ===


Dans votre gestionnaire de fichiers préféré, sous KDE ou Gnome par exemple, vous pouvez consulter et modifier les permissions sur un fichier en affichant la boîte de dialogue "Propriétés" du fichier/répertoire (en général par un clic droit).
Dans votre gestionnaire de fichiers préféré, sous [[KDE]] ou [[GNOME]] par exemple, vous pouvez consulter et modifier les permissions sur un fichier en affichant la boîte de dialogue "Propriétés" du fichier/répertoire (en général par un clic droit).


== Pour aller plus loin... ==
== Pour aller plus loin... ==
===SUID et GUID===
===SUID et GUID===
Il existe encore deux types de droits (en fait 3 mais le troisième est devenu obsolète) : 's' (SUID bit) et 'g' (SGID bit). Si l'on active le SUID bit d'un programme, il s'exécute sur le compte du possesseur du fichier (si c'est root, sur le compte de root, d'où un danger potentiel de sécurité). Si l'on active le SGID bit, c'est sur le compte de l'utilisateur normal, mais en tant que membre du groupe du fichier. Cela rend un fichier exécutable. <br />À ce propos consultez l'article [../dev/suid_scripts.php3 SUID Scripts] par Xavier GARREAU sur Léa.
Il existe encore deux types de droits (en fait 3 mais le troisième est devenu obsolète) : 's' (SUID bit) et 'g' (SGID bit). Si l'on active le SUID bit d'un programme, il s'exécute sur le compte du possesseur du fichier (si c'est root, sur le compte de root, d'où un danger potentiel de sécurité). Si l'on active le SGID bit, c'est sur le compte de l'utilisateur normal, mais en tant que membre du groupe du fichier. Cela rend un fichier exécutable. <br />À ce propos consultez l'article [[Dev-suid_scripts|SUID Scripts]] par Xavier GARREAU sur Léa.


Ces droits s'octroient de la même manière que les autres. Par exemple :
Ces droits s'octroient de la même manière que les autres. Par exemple :


<div class="code"><nowiki># chmod +s /usr/bin/xmms</nowiki></div>
<div class="code"><nowiki># chown root executable</nowiki></div>
<div class="code"><nowiki># chmod +s executable</nowiki></div>


fera en sorte que xmms puisse obtenir les privilèges de root (le fichier <code>/usr/bin/xmms</code> appartenant à root. Un <code>ls -l</code> sur le fichier donnera ensuite :
fera en sorte que executable puisse obtenir les privilèges de root (le fichier appartenant à root). Un <tt>ls -l</tt> sur le fichier donnera ensuite :


<div class="code">-rw'''s'''r-xr--    1 root    root      172812 dec  12 12:12 xmms</div>
<div class="code">-rw'''s'''r-xr--    1 root    root      172812 dec  12 12:12 executable</div>


Dans ce cas particulier, cela permet à xmms d'obtenir une priorité temps réel qui peut être nécessaire pour un son parfait.
<strong>Attrntion</strong>, il est potentiellement très dangereux d'activer le bit SUID root, parce qu'il permet à n'importe quel utilisateur d'exécuter le fichier avec les droits root. Si cet exécutable permet de modifier des fichiers l'utilisateur pourra modifier les fichiers protégés du système. Pour exécuter des commandes avec les droits root il est conseillé d'utiliser [[Admin-admin_env-sudo|sudo]], ce qui permet de limiter à un seul utilisateur le droit d'exécuter le fichier en tant que root.
 
Utilisé judicieusement, le bit SUID root ne présente pas de risque, c'est par exemple le cas:
<ul><li>
Des commandes su et sudo, parce que ce n'est qu'avec le bit SUID root qu'un utilisateur normal peut obtenir les droits root. <tt>su</tt> est SUID root, il peut donc lire <tt>/etc/shadow</tt>, il demande à l'utilisateur son mot de passe puis si il est correct il lance un shell avec les privilèges de l'utilisateur demandé.
</li><li>
De la commande <tt>mount</tt>, parce que normalement seul root a le droit de monter un système de fichiers (voir <tt>man 2 mount</tt>). La commande mount permet à un utilisateur normal de monter un système de fichier si le fichier <tt>/etc/fstab</tt> le lui permet. (voir <tt>man 8 mount</tt>)
</li></ul>


===ACL===
===ACL===
Les permissions peuvent se montrer limitées et ne permettent pas une gestion fine de certaines situations dans lequelles un même fichier doit présenter des permissions différentes pour plusieurs utilisateurs. En effet, on ne peut définir normalement qu'un seul propriétaire et un seul groupe.
Les permissions peuvent se montrer limitées et ne permettent pas une gestion fine de certaines situations dans lesquelles un même fichier doit présenter des permissions différentes pour plusieurs utilisateurs. En effet, on ne peut définir normalement qu'un seul propriétaire et un seul groupe, opposés à un unique « tout le monde ».


Les [[ACL]] permettent de dépasser cette limitation en attribuant à un fichier des permissions différentes selon l'utilisateur (rw pour ''utilisateur1'', rwx pour ''utilisateur2'', ''r'' pour ''utilisateur3'', etc.).
Les [[ACL]] permettent de dépasser cette limitation en attribuant à un fichier des permissions différentes selon l'utilisateur (rw pour ''utilisateur1'', rwx pour ''utilisateur2'', ''r'' pour ''utilisateur3'', etc.).


<div class="merci">Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Jean-Christophe Cardot le 10/01/2000.</div>
Consulter l'article requis pour plus de détails.
 
===Attributs étendus===
Les systèmes de fichiers ''ext2'' et ''ext3'' permettent l'ajout d'[[attributs étendus]] s'apparentant aux permissions.
 
Consulter l'article requis pour plus de détails.
 
<br/>
<br/>
'''<b>[[Admin-index|@ Retour à la rubrique Administration système]]</b>'''
<br/>


= Copyright =
{{Copy|10/01/2000|[[Utilisateur:LeaJice|Jean-Christophe Cardot]]|CC-BY-SA}}
Copyright &copy; 10/01/2000, Jean-Christophe Cardot
{{CC-BY-NC-SA}}

Dernière version du 10 mars 2024 à 17:41


Les permissions sur les fichiers

par Jean-Christophe

Dis Papa, c'est quoi rwxr-xr-x ? Tais-toi et nage !

Un peu de théorie

Dans ce chapitre, nous allons étudier les permissions sur les fichiers. Nous allons voir rapidement sur quoi la gestion des permissions se base.

Les utilisateurs et les groupes

Les fichiers appartiennent à un utilisateur à l'intérieur d'un groupe d'utilisateurs.

  • L'utilisateur, c'est vous ! C'est un identifiant avec un mot de passe, qui sont définis dans le fichier /etc/passwd. On peut ajouter des utilisateurs à l'aide de la commande useradd ou adduser (voir man adduser). Certaines distributions fournissent des outils graphiques pour ce faire, comme drakuser de Mandrake.
  • Le groupe d'utilisateurs, défini dans le fichier /etc/group, permet de regrouper des utilisateurs dans des groupes (un même utilisateur peut faire partie de plusieurs groupes) afin par exemple de partager des permissions entre plusieurs utilisateurs. Par exemple, le groupe quakeusers peut être défini afin d'y placer les utilisateurs qui auront le droit d'utiliser le jeu Quake : on donnera par exemple la permission aux membres de ce groupe de lancer l'exécutable de ce jeu. De même, le groupe cdrecording aura les droits d'utiliser le graveur de CD.

Les droits possibles : R, W et X

Les droits que l'on peut attribuer à un fichier concernent :

  • la lecture (r comme read),
  • l'écriture (w comme write),
  • l'exécution (x comme execute).

On peut attribuer ces droits pour :

  • un utilisateur,
  • les membres d'un groupe,
  • le monde entier (i.e. les autres utilisateurs).

Visualiser les attributs

En ligne de commande (voir la rubrique [shell.php3 Shell]), tapez :

[username@taz username]$ ls -la
total 144
drwxr-xr-x 18 username users 2048 jan 7 19:22 .
drwxr-xr-x 7 root root 1024 fév 6 1996 ..
-rw------- 1 username users 147 jan 7 19:22 .Xauthority
-rw-r--r-- 1 username users 1899 jui 28 21:01 .Xdefaults
-rw------- 1 username users 5860 jan 7 19:22 .bash_history
-rw-r--r-- 1 username users 24 jui 28 21:01 .bash_logout
-rw-r--r-- 1 username users 262 jui 29 18:15 .bash_profile
-rw-r--r-- 1 username users 434 jui 28 21:01 .bashrc
-rw-r--r-- 1 username users 2626 jui 28 21:01 .emacs
-rw-r--r-- 1 username users 532 jui 28 21:01 .inputrc
drwxr-xr-x 3 username users 1024 jui 28 21:01 .kde
-rw-r--r-- 1 username users 1546 jan 7 19:04 .kderc
-rwxr-xr-x 1 username users 1166 jui 28 21:01 .kderc.rpmorig

Pour une explication détaillée des différentes colonnes, voir la rubrique [shell.php3#ls Shell]. Nous n'allons ici nous intéresser qu'aux éléments relatifs aux permissions.

1. La première colonne -rw-r--r-- représente les permissions associées au fichier.
(le premier caractère est le type du fichier fichier : un d pour un répertoire, un l pour un lien, etc.)
Ensuite, on a trois groupes de trois caractères : rwx. La présence de la lettre r w ou x accorde la permission, un tiret '-' la dénie.

r signifie : possibilité de lire ce fichier / dans ce répertoire,
w signifie : possibilité d'écrire dans ce fichier / répertoire,
x signifie : possibilité d'exécuter ce fichier / d'aller dans ce répertoire.

Les trois groupes de caractère s'appliquent, dans l'ordre, à :

  1. l'utilisateur auquel appartient le fichier,
  2. le groupe d'utilisateurs auquel est rattaché le fichier,
  3. les autres utilisateurs.
- r w x r - x r - x
utili-
sateur
groupe autres

2. La 3ème colonne est l'utilisateur à qui appartient le fichier. À cet utilisateur s'appliquent les permissions représentées par les trois premiers caractères de permissions de la première colonne (-'rwx'r-xr-x).

3. La 4ème colonne est le groupe d'utilisateurs auquel appartient le fichier. A ce groupe s'appliquent les permissions représentées par le deuxième groupe de trois caractères de permissions de la première colonne (-rwx'r-x'r-x).

Exemples :
1. La ligne suivante :
drwxr-xr-x 18 username users 2048 jan 7 19:22 .
signifie pour le répertoire '.' (le répertoire HOME de l'utilisateur username) que tout le monde a le droit de lire le contenu du répertoire (le dernier 'r'), et que tout le monde peut y accéder (le dernier 'x'). Par contre, seul l'utilisateur username peut y écrire (caractère 'w'), c'est à dire y créer des fichiers, les modifier ou les supprimer.

2. La ligne :
-rw-r----- 1 username wwwadm 1728 jan 7 19:22 projet-www
signifie que seul 'username' et les utilisateurs du groupe 'wwwadm' peuvent lire ce fichier, que seule username peut le modifier, et que les autres utilisateurs n'ont aucun droit dessus (le dernier groupe de caractères '---').

Modifier les attributs

Les droits : chmod et umask

Il existe deux façon de changer les droits d'un fichier ou répertoire.

  • Soit en précisant les droits en octal (base 8). La correspondance est la suivante :
    • 1 : droit d'exécution ;
    • 2 : droit d'écriture ;
    • 4 : droit de lecture.

Donc, pour préciser les droits en exécution et lecture, le chiffre octal est : 1 + 4 = 5. Pour préciser les droits en éxécution, écriture et lecture, le chiffre octal est : 1 + 2 + 4 = 7. Ensuite, il faut savoir que le chiffre des unités (en octal) correspond 'au reste du monde' que le chiffre des 'huitaines' (deuxième chiffre en octal) correspond 'au groupe' et que le chiffre des 'soixante-quatraines' (troisième chiffre en octal) correspond 'à l'utilisateur'. Ainsi, si on veut que l'utilisateur ait les 3 droits (rwx), que le groupe ait les 2 droits (r-x) et que le reste du monde n'ai aucun droit (---), le nombre octal est : 750 (7 = 1 + 2 + 4 ; 5 = 1 + 4 ; 0 = 0). Pour donner ces droits à un fichier on tape alors :

[username@localhost ~] $ chmod 0750 /chemin/vers/fichier

Le premier 0 dans 0750 signifie qu'on donne le nombre en octal (son absence ne modifie pas le comportement de chmod).

  • Soit en précisant les droits qu'on ajoute (+) ou soustrait (-) au fichier (ou répertoire). Pour ajouter des droits à l'utilisateur, on ajoute un droit (r,w, x ou toute combinaison des 3) à 'u'. Par exemple : u+rw signifie qu'on ajoute les droit de lecteur et d'écriture à l'utilisateur. Pour le groupe, on ajoute ou soustrait à 'g' et pour le reste du monde on ajoute ou soustrait à 'o' (other). Par exemple pour ajouter les droits de lecture et d'écriture à l'utilisateur on tapera :
[username@localhost ~] $ chmod u+rw /chemin/vers/fichier

Et :

[username@localhost ~] $ chmod go-rwx /chemin/vers/fichier

Pour retirer tous les droits (rwx) au groupe (g) et aux autres (a).

Remarque : à la place de u, g et o on peut utiliser 'a' (all) qui veut dire qu'on change les droits de tout le monde (utilisateur, groupe et reste du monde).

Il faut savoir que la commande peut s'appliquer de manière récursive (c'est bien pratique pour les répertoires), en lui passant l'argument '-R' et qu'à la place du droit 'x', on peut présiser 'X' (majuscule) ce qui signifie que parmi les fichiers et répertoires dont on modifiera les droits d'exécution, seuls les répertoires sont concernés. Ainsi :

[username@localhost ~] $ chmod -R u+rwX /chemin/vers/repertoire

rendra tous les fichiers contenus dans ce répertoire (ainsi que dans tous les sous-répertoires de celui-ci) lisibles et écrivables et que tous les sous-répertoires (et leurs sous-répertoires) seront 'navigables' (le droit d'exécution pour un répertoire autorise à se rendre dans le dit répertoire).

Enfin, si vous voulez automatiser l'attribution de droits par défaut lors de la création d'un nouveau fichier ou d'un nouveau répertoire, il faut utiliser la commande shell umask. Par exemple, vous désirez que tout nouveau fichier que vous créez soit ouvert en lecture, écriture (et éventuellement en exécution) seulement pour vous, pas pour votre groupe, et encore moins pour tous. Il vous suffit d'ajouter dans votre fichier ~/.bash_profile la commande umask 077.

La propriété : chown

Les droits de propriétés sont très simples à modifier. Il suffit de donner le nom du nouveau possesseur (et éventuellement le nom du nouveau groupe) et le nom du fichier. Ainsi :

[username@localhost ~] $ chown username /chemin/vers/fichier

donne le fichier /chemin/vers/fichier à l'utilisateur 'username'. Et :

[username@localhost ~] $ chown username:groupe /chemin/vers/fichier

donne le fichier /chemin/vers/fichier à l'utilisateur 'username' et au groupe 'groupe'. Comme pour chmod le paramétre '-R' permet de rendre récursive l'application de la nouvelle propriété (i.e. répertoires et sous-répertoires).

Le groupe : chgrp

Le changement de groupe uniquement peut être obtenu par :

[username@localhost ~] $ chgrp groupe /chemin/vers/fichier

qui donne /chemin/vers/fichier au groupe 'groupe'. L'argument '-R' rend cette application récursive.

Interface graphique

Dans votre gestionnaire de fichiers préféré, sous KDE ou GNOME par exemple, vous pouvez consulter et modifier les permissions sur un fichier en affichant la boîte de dialogue "Propriétés" du fichier/répertoire (en général par un clic droit).

Pour aller plus loin...

SUID et GUID

Il existe encore deux types de droits (en fait 3 mais le troisième est devenu obsolète) : 's' (SUID bit) et 'g' (SGID bit). Si l'on active le SUID bit d'un programme, il s'exécute sur le compte du possesseur du fichier (si c'est root, sur le compte de root, d'où un danger potentiel de sécurité). Si l'on active le SGID bit, c'est sur le compte de l'utilisateur normal, mais en tant que membre du groupe du fichier. Cela rend un fichier exécutable.
À ce propos consultez l'article SUID Scripts par Xavier GARREAU sur Léa.

Ces droits s'octroient de la même manière que les autres. Par exemple :

# chown root executable
# chmod +s executable

fera en sorte que executable puisse obtenir les privilèges de root (le fichier appartenant à root). Un ls -l sur le fichier donnera ensuite :

-rwsr-xr-- 1 root root 172812 dec 12 12:12 executable

Attrntion, il est potentiellement très dangereux d'activer le bit SUID root, parce qu'il permet à n'importe quel utilisateur d'exécuter le fichier avec les droits root. Si cet exécutable permet de modifier des fichiers l'utilisateur pourra modifier les fichiers protégés du système. Pour exécuter des commandes avec les droits root il est conseillé d'utiliser sudo, ce qui permet de limiter à un seul utilisateur le droit d'exécuter le fichier en tant que root.

Utilisé judicieusement, le bit SUID root ne présente pas de risque, c'est par exemple le cas:

  • Des commandes su et sudo, parce que ce n'est qu'avec le bit SUID root qu'un utilisateur normal peut obtenir les droits root. su est SUID root, il peut donc lire /etc/shadow, il demande à l'utilisateur son mot de passe puis si il est correct il lance un shell avec les privilèges de l'utilisateur demandé.
  • De la commande mount, parce que normalement seul root a le droit de monter un système de fichiers (voir man 2 mount). La commande mount permet à un utilisateur normal de monter un système de fichier si le fichier /etc/fstab le lui permet. (voir man 8 mount)

ACL

Les permissions peuvent se montrer limitées et ne permettent pas une gestion fine de certaines situations dans lesquelles un même fichier doit présenter des permissions différentes pour plusieurs utilisateurs. En effet, on ne peut définir normalement qu'un seul propriétaire et un seul groupe, opposés à un unique « tout le monde ».

Les ACL permettent de dépasser cette limitation en attribuant à un fichier des permissions différentes selon l'utilisateur (rw pour utilisateur1, rwx pour utilisateur2, r pour utilisateur3, etc.).

Consulter l'article requis pour plus de détails.

Attributs étendus

Les systèmes de fichiers ext2 et ext3 permettent l'ajout d'attributs étendus s'apparentant aux permissions.

Consulter l'article requis pour plus de détails.



@ Retour à la rubrique Administration système

Copyright

© 10/01/2000 Jean-Christophe Cardot

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike icon
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique 4.0 :
https://creativecommons.org/licenses/by-sa/4.0/