104.5 Leçon 1
Certification : |
LPIC-1 |
---|---|
Version : |
5.0 |
Thème : |
104 Disques, systèmes de fichiers Linux, arborescence de fichiers standard (FHS) |
Objectif : |
104.5 Gérer les droits d’accès et les propriétaires des fichiers |
Leçon : |
1 sur 1 |
Introduction
En tant que système multi-utilisateurs, Linux doit disposer d’un mécanisme permettant de savoir à qui appartient chaque fichier et si tel ou tel utilisateur est autorisé à effectuer des actions sur un fichier. Cela permet de garantir la confidentialité des utilisateurs qui voudraient protéger le contenu de leurs fichiers, et aussi d’assurer la collaboration en rendant certains fichiers accessibles à plusieurs utilisateurs.
Pour ce faire, un système de permissions à trois niveaux est mis en place. Chaque fichier sur le disque appartient à un utilisateur et à un groupe d’utilisateurs et possède trois jeux de permissions : un pour son propriétaire, un pour le groupe qui détient le fichier et un pour tous les autres. Dans cette leçon, vous apprendrez à consulter les permissions d’un fichier, à en connaître la signification et à les manipuler.
Consulter les informations sur les fichiers et les répertoires
La commande ls
est utilisée pour afficher une liste du contenu de n’importe quel répertoire. Dans sa forme basique, tout ce que vous obtenez, ce sont les noms des fichiers :
$ ls Another_Directory picture.jpg text.txt
Mais il y a beaucoup plus d’informations disponibles pour chaque fichier, y compris son type, sa taille, son propriétaire et plus encore. Pour voir ces informations, vous devez demander à ls
un affichage détaillé en utilisant l’option -l
:
$ ls -l total 536 drwxrwxr-x 2 carol carol 4096 Dec 10 15:57 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
Chaque colonne du résultat ci-dessus a une signification. Examinons les colonnes pertinentes pour cette leçon.
-
La première colonne de la liste indique le type de fichier et les permissions. Par exemple, pour
drwxrwxr-x
:-
Le premier caractère,
d
, indique le type de fichier. -
Les trois caractères suivants,
rwx
, indiquent les permissions du propriétaire du fichier, également appelé user ouu
. -
Les trois caractères suivants,
rwx
, indiquent les permissions du groupe propriétaire du fichier, également appelég
. -
Les trois derniers caractères,
r-x
, indiquent les permissions pour toute autre personne, autrement dit others ouo
.
-
Tip
|
Dans la langue anglaise, le jeu de permissions others est également appelé world dans le sens de “Everyone else in the world has these permissions” (Tout le monde a ces droits). |
-
La troisième et la quatrième colonne indiquent respectivement l’utilisateur et le groupe qui détiennent le fichier.
-
La septième et dernière colonne indique le nom du fichier.
La deuxième colonne indique le nombre de liens physiques qui pointent vers le fichier. La cinquième colonne indique la taille du fichier. La sixième colonne indique la date et l’heure de la dernière modification du fichier. Ces colonnes ne sont pas pertinentes pour le sujet qui nous intéresse.
Et les répertoires ?
Si vous essayez d’obtenir des informations détaillées sur un répertoire en utilisant ls -l
, vous obtiendrez une liste du contenu du répertoire, ce qui n’est pas ce que nous recherchons :
$ ls -l Another_Directory/ total 0 -rw-r--r-- 1 carol carol 0 Dec 10 17:59 another_file.txt
Pour éviter cela et obtenir des informations sur le répertoire lui-même, ajoutez l’option -d
à ls
:
$ ls -l -d Another_Directory/ drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory/
Afficher les fichiers cachés
Le listing du répertoire que nous avons effectué auparavant en utilisant ls -l
est incomplet :
$ ls -l total 544 drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
Il y a trois autres fichiers dans ce répertoire, mais ils sont cachés. Sous Linux, les fichiers dont le nom commence par un point (.
) sont automatiquement masqués. Pour les afficher, il faut ajouter l’option -a
à ls
:
$ ls -l -a total 544 drwxrwxr-x 3 carol carol 4096 Dec 10 16:01 . drwxrwxr-x 4 carol carol 4096 Dec 10 15:56 .. drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt -rw-r--r-- 1 carol carol 0 Dec 10 16:01 .thisIsHidden
Le fichier .thisIsHidden
est caché tout simplement parce que son nom commence par .
.
En revanche, les répertoires .
et ..
sont particuliers. .
est un pointeur vers le répertoire courant. Quant à ..
, c’est un pointeur vers le répertoire parent, celui qui contient le répertoire courant. Sous Linux, chaque répertoire contient au moins ces deux répertoires.
Tip
|
Vous pouvez combiner plusieurs options pour |
Comprendre les types de fichiers
Nous avons dit que la première lettre de chaque ligne de résultat de ls -l
décrivait le type de fichier. Les trois types de fichiers les plus courants sont :
-
(fichier normal)-
Un fichier peut contenir toutes sortes de données et permet de les gérer. Les fichiers peuvent être modifiés, déplacés, copiés et supprimés.
d
(répertoire)-
Un répertoire (directory) contient d’autres fichiers ou répertoires et permet d’organiser le système de fichiers. Techniquement, les répertoires sont un type de fichier particulier.
l
(lien symbolique)-
Ce "fichier" est un pointeur (ou raccourci) vers un autre fichier ou répertoire situé ailleurs dans le système de fichiers.
En plus de ces types de fichiers, il en existe trois autres dont vous devriez au moins connaître l’existence, mais qui n’entrent pas dans le cadre de cette leçon :
b
(périphérique de type bloc)-
Ce fichier représente un périphérique virtuel ou physique, généralement des disques ou d’autres types de périphériques de stockage, comme le premier disque dur qui pourrait être représenté par
/dev/sda
. c
(périphérique de type caractère)-
Ce fichier représente un périphérique virtuel ou physique. Les terminaux (comme le terminal principal sur
/dev/ttyS0
) et les ports série sont des exemples courants de périphériques de type caractère. s
(socket)-
Les sockets servent de "vases communicants" pour transmettre des informations entre deux programmes.
Warning
|
Ne modifiez en aucun cas les permissions sur les périphériques de type bloc, caractère ou socket, à moins que vous ne sachiez ce que vous faites. Vous risqueriez d’empêcher votre système de fonctionner ! |
Comprendre les droits d’accès
Dans l’affichage de ls -l
, les droits d’accès aux fichiers sont indiqués juste après le type de fichier, sous la forme de trois groupes de trois caractères chacun, dans l’ordre r
, w
et x
. Voici ce qu’ils signifient. Gardez à l’esprit qu’un tiret -
représente l’absence d’une permission.
Droits d’accès aux fichiers
r
-
Signifie read (lecture) avec une valeur octale de
4
(ne vous inquiétez pas, nous en parlerons prochainement). Cela correspond à la permission d’ouvrir un fichier et d’en lire le contenu. w
-
Signifie write (écriture) avec une valeur octale de
2
. Cela équivaut au droit de modifier le contenu d’un fichier. x
-
Signifie execute (exécution) avec une valeur octale de
1
. Cela signifie que le fichier peut être lancé comme un exécutable ou un script.
Par exemple, un fichier avec les permissions rw-
peut être lu et écrit, mais il ne pourra pas être exécuté.
Droits d’accès aux répertoires
r
-
Signifie read (lecture) avec une valeur octale de
4
. Cela représente le droit de lire le contenu du répertoire, comme les noms des fichiers. En revanche, cela n’implique pas forcément la permission de lire le contenu des fichiers eux-mêmes. w
-
Signifie write (écriture) avec une valeur octale de
2
. Cela signifie que l’on peut créer ou supprimer des fichiers dans le répertoire en question.Notez bien que vous ne pouvez pas effectuer ces changements avec les seules permissions write, mais qu’il vous faut également la permission execute (
x
) pour modifier le répertoire. x
-
Signifie execute (exécution) avec une valeur octale de
1
. Cela signifie que l’on a la permission d’entrer dans un répertoire, mais pas d’en afficher les fichiers (pour cela, il fautr
).
Cette dernière partie sur les répertoires peut prêter à confusion. Imaginons, par exemple, que vous ayez un répertoire nommé Another_Directory
avec les permissions suivantes :
$ ls -ld Another_Directory/ d--x--x--x 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Supposons que dans ce répertoire vous ayez un script shell nommé hello.sh
:
-rwxr-xr-x 1 carol carol 33 Dec 20 18:46 hello.sh
Si vous êtes l’utilisatrice carol
et que vous essayez d’afficher le contenu de Another_Directory
, vous obtiendrez un message d’erreur, étant donné que votre utilisatrice n’a pas les droits de lecture pour ce répertoire :
$ ls -l Another_Directory/ ls: cannot open directory 'Another_Directory/': Permission denied
En revanche, l’utilisatrice carol
dispose bien des permissions d’exécution, ce qui signifie qu’elle peut entrer dans le répertoire. Par conséquent, l’utilisatrice carol
peut accéder aux fichiers à l’intérieur du répertoire, tant qu’elle a les permissions correctes pour le fichier en question. Supposons que l’utilisatrice ait les permissions complètes (rwx
) pour le script hello.sh
. Alors elle peut exécuter le script, même si elle ne peut pas lire le contenu du répertoire qui le contient si elle connaît le nom complet du fichier :
$ sh Another_Directory/hello.sh Hello LPI World!
Comme nous l’avons dit plus haut, les autorisations sont spécifiées dans l’ordre : d’abord pour le propriétaire du fichier, puis pour le groupe propriétaire, et enfin pour les autres utilisateurs. Lorsque quelqu’un tente d’effectuer une action sur le fichier, les autorisations sont vérifiées de la même manière.
Le système vérifie d’abord si l’utilisateur en cours est propriétaire du fichier et, si c’est le cas, il n’applique que la première série d’autorisations. Dans le cas contraire, il vérifie si l’utilisateur appartient au groupe propriétaire du fichier. Dans ce cas, il n’applique que la deuxième série d’autorisations. Autrement, le système appliquera le troisième jeu d’autorisations.
Cela signifie que si l’utilisateur en cours est le propriétaire du fichier, seules les autorisations du propriétaire sont effectives, même si les autorisations du groupe ou d’autres autorisations sont plus permissives que celles du propriétaire.
Modifier les droits d’accès des fichiers
La commande chmod
est utilisée pour modifier les droits d’accès d’un fichier. Elle prend au moins deux paramètres : le premier décrit les droits à modifier, le second désigne le fichier ou le répertoire dans lequel la modification sera effectuée. Gardez à l’esprit que seul le propriétaire du fichier ou l’administrateur du système (root
) peut modifier les droits d’un fichier.
Les droits à modifier peuvent être décrits de deux manières ou "modes" différents.
Le premier, appelé mode symbolique, offre un contrôle très précis et vous permet d’ajouter ou de révoquer une seule autorisation sans pour autant modifier les autres autorisations de la série. L’autre mode, appelé mode octal, est plus facile à mémoriser et plus rapide à utiliser si vous souhaitez définir d’un coup l’ensemble des droits d’accès.
Les deux modes aboutissent au même résultat. Par exemple, les commandes :
$ chmod ug+rw-x,o-rwx text.txt
et
$ chmod 660 text.txt
vont produire exactement le même résultat, un fichier avec les droits :
-rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Voyons maintenant le fonctionnement de chaque mode.
Le mode symbolique
Lorsque vous décrivez les droits à modifier en mode symbolique, le(s) premier(s) caractère(s) indique(nt) les droits que vous allez modifier : ceux de l’utilisateur (u
), du groupe (g
), des autres (o
) et/ou de tout le monde (a
).
Ensuite, il vous faut indiquer à la commande ce qu’elle doit faire : vous pouvez accorder un droit (+
), révoquer un droit (-
) ou lui donner une valeur spécifique (=
).
Enfin, vous indiquez le droit sur lequel vous souhaitez agir : lecture (r
), écriture (w
) ou exécution (x
).
Par exemple, prenons un fichier nommé text.txt
avec les droits d’accès suivants :
$ ls -l text.txt -rw-r--r-- 1 carol carol 765 Dec 20 21:25 text.txt
Si vous souhaitez accorder les droits en écriture aux membres du groupe propriétaire du fichier, vous devez utiliser le paramètre g+w
. C’est plus facile si vous y pensez de cette façon : “Pour le groupe (g
), accorder (+
) les droits d’écriture (w
)”. Ainsi, la commande serait :
$ chmod g+w text.txt
Vérifions le résultat avec ls
:
$ ls -l text.txt -rw-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Vous souhaitez supprimer les droits en lecture du propriétaire de ce même fichier ? Pensez-y de cette manière : “Pour l’utilisateur (u
), révoquer (-
) les droits en lecture (r
)”. Le paramètre est donc u-r
, comme ceci :
$ chmod u-r text.txt $ ls -l text.txt --w-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Et si nous voulions définir les droits exactement comme rw-
pour tout le monde ? Dans ce cas, il faut voir les choses comme suit : “Pour tous (a
), définir exactement (=
) lecture (r
), écriture (w
), et pas d’exécution (-
)”. Donc :
$ chmod a=rw- text.txt $ ls -l text.txt -rw-rw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
Bien entendu, il est possible de modifier plusieurs droits en même temps. Dans ce cas, il faut les séparer par une virgule (,
) :
$ chmod u+rwx,g-x text.txt $ ls -lh text.txt -rwxrw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
L’exemple ci-dessus peut être lu comme suit : “Pour l’utilisateur (u
), accorder (+
) les droits en lecture, écriture et exécution (rwx
), et pour le groupe (g
), révoquer (-
) les droits d’exécution (x
)”.
Lorsqu’on l’applique à un répertoire, chmod
ne modifie que les droits de ce dernier. La commande chmod
a également un mode récursif, qui est utile lorsque vous voulez changer les droits pour tous les fichiers d’un répertoire et de ses sous-répertoires. Pour l’utiliser, ajoutez l’option -R
juste après la commande et avant les droits à modifier :
$ chmod -R u+rwx Another_Directory/
Cette commande peut être lue comme suit : "Récursivement (-R
), pour l’utilisateur (u
), accorder (+
) les droits en lecture, écriture et exécution (rwx
)".
Warning
|
Soyez prudent et réfléchissez à deux fois avant d’utiliser l’option |
Le mode octal
En mode octal, les permissions sont spécifiées différemment : sous forme d’une valeur à trois chiffres en notation octale, un système numérique en base 8.
Chaque permission a une valeur correspondante, et elles sont spécifiées dans l’ordre suivant : d’abord la lecture (r
) qui vaut 4
, puis l’écriture (w
) qui vaut 2
, et enfin l’exécution (x
) représentée par 1
. En l’absence de permission, on utilise la valeur zéro (0
). Ainsi, une permission de rwx
correspondrait à 7
(4+2+1
) et r-x
à 5
(4+0+1
).
Le premier des trois chiffres du jeu de permissions représente les droits de l’utilisateur (u
), le deuxième ceux du groupe (g
) et le troisième ceux de tous les autres (o
). Si nous voulons fixer les permissions d’un fichier à rw-rw----
, la valeur octale correspondante sera 660
:
$ chmod 660 text.txt $ ls -l text.txt -rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
En dehors de cela, la syntaxe en mode octal est la même qu’en mode symbolique. Le premier paramètre représente les permissions que vous souhaitez modifier, et le second paramètre pointe vers le fichier ou le répertoire pour lequel la modification sera effectuée.
Tip
|
Lorsqu’une valeur de permission est impaire, le fichier est forcément exécutable ! |
Quelle syntaxe utiliser ? Le mode octal est recommandé si vous voulez fixer les permissions à une valeur spécifique, par exemple 640
(rw- r-- ---
).
Le mode symbolique est plus adapté si vous voulez basculer une valeur spécifique sans tenir compte des permissions en vigueur pour le fichier. Par exemple, vous pouvez ajouter des permissions d’exécution pour l’utilisateur en utilisant simplement chmod u+x script.sh
sans tenir compte, ou même toucher, aux permissions actuelles pour le groupe et les autres.
Modifier le propriétaire et le groupe d’un fichier
La commande chown
est utilisée pour modifier le propriétaire et le groupe d’un fichier ou d’un répertoire. La syntaxe est très simple :
chown USERNAME:GROUPNAME FILENAME
Par exemple, prenons un fichier text.txt
:
$ ls -l text.txt -rw-rw---- 1 carol carol 1881 Dec 10 15:57 text.txt
L’utilisatrice qui possède le fichier est carol
, et le groupe est également carol
. Maintenant, nous allons changer le groupe propriétaire du fichier en un autre groupe, comme students
:
$ chown carol:students text.txt $ ls -l text.txt -rw-rw---- 1 carol students 1881 Dec 10 15:57 text.txt
Gardez à l’esprit que l’utilisateur qui possède un fichier n’a pas forcément besoin d’appartenir au groupe qui possède un fichier. Dans l’exemple ci-dessus, l’utilisatrice carol
n’a pas besoin d’être membre du groupe students
.
Les autorisations de l’utilisateur ou du groupe peuvent être omises si vous ne souhaitez pas les modifier. Ainsi, pour changer uniquement le groupe propriétaire d’un fichier, vous utiliserez chown :students text.txt
. Pour changer uniquement l’utilisateur, la commande serait chown carol: text.txt
ou simplement chown carol text.txt
. Alternativement, vous pouvez utiliser la commande chgrp students text.txt
.
À moins d’être l’administrateur du système (root), vous ne pouvez pas changer le propriétaire ou le groupe d’un fichier au profit d’un autre utilisateur ou d’un groupe auquel vous n’appartenez pas. Si vous essayez de le faire, vous obtiendrez le message d’erreur Operation not permitted
.
Effectuer des requêtes sur les groupes
Avant de modifier le propriétaire et le groupe d’un fichier, il peut être utile de savoir quels groupes existent sur le système, quels utilisateurs sont membres d’un groupe et à quels groupes un utilisateur appartient.
Pour voir quels groupes existent sur votre système, tapez getent group
. Le résultat ressemblera à ceci (l’affichage a été abrégé) :
$ getent group root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4:syslog,rigues tty:x:5:rigues disk:x:6: lp:x:7: mail:x:8: news:x:9: uucp:x:10:rigues
Si vous voulez savoir à quels groupes un utilisateur appartient, ajoutez le nom d’utilisateur comme paramètre à groups
:
$ groups carol carol : carol students cdrom sudo dip plugdev lpadmin sambashare
Pour faire l’inverse (voir quels utilisateurs appartiennent à un groupe), utilisez groupmems
. L’option -g
spécifie le groupe, et -l
affichera la liste de tous ses membres :
# groupmems -g cdrom -l carol
Tip
|
|
Les droits par défaut
Faisons une petite expérience. Ouvrez un terminal et créez un fichier vide à l’aide de la commande suivante :
$ touch testfile
Jetons un coup d’œil sur les permissions de ce fichier. Elles peuvent être différentes sur votre système, mais admettons qu’elles ressemblent à ceci :
$ ls -lh testfile -rw-r--r-- 1 carol carol 0 jul 13 21:55 testfile
Les permissions sont rw-r—r--
: lecture et écriture pour l’utilisateur, et lecture pour le groupe et les autres, ou 644
en mode octal. Maintenant, essayez de créer un répertoire :
$ mkdir testdir $ ls -lhd testdir drwxr-xr-x 2 carol carol 4,0K jul 13 22:01 testdir
Les permissions sont maintenant rwxr-xr-x
: lecture, écriture et exécution pour l’utilisateur, lecture et exécution pour le groupe et les autres, ou 755
en mode octal.
Quel que soit l’endroit où vous vous trouvez dans le système de fichiers, chaque fichier ou répertoire que vous créez recevra les mêmes permissions. Est-ce que vous vous êtes déjà demandé d’où viennent ces droits ?
Ils proviennent du user mask ou umask
, qui définit les permissions par défaut pour chaque fichier créé. Vous pouvez vérifier les valeurs en vigueur avec la commande umask
:
$ umask 0022
Cela ne ressemble pas vraiment à rw-r—r--
, ni même à 644
. Peut-être devrions-nous essayer avec le paramètre -S
, pour obtenir un affichage en mode symbolique :
$ umask -S u=rwx,g=rx,o=rx
Ce sont là les mêmes droits que ceux accordés à notre répertoire de test dans l’un des exemples ci-dessus. Or, comment se fait-il que lorsque nous créons un fichier, les droits d’accès ne sont pas les mêmes ?
Eh bien, cela n’a pas de sens de définir par défaut des droits d’exécution globaux pour tout le monde sur n’importe quel fichier, n’est-ce pas ? Les répertoires en revanche ont besoin de droits d’exécution (sinon vous ne pouvez pas y entrer), mais les fichiers n’en ont pas, donc ils ne les obtiennent pas. D’où le rw-r—r--
.
En plus d’afficher les droits par défaut, umask
peut également être utilisé pour les modifier dans la session en cours de l’interpréteur de commandes. Par exemple, si nous utilisons la commande :
$ umask u=rwx,g=rwx,o=
Chaque nouveau répertoire va hériter des droits rwxrwx---
, et chaque fichier rw-rw----
(car ils n’ont pas les droits d’exécution). Si vous reprenez les exemples ci-dessus pour créer un fichier testfile
et un répertoire testdir
et que vous vérifiez les permissions, vous devriez obtenir :
$ ls -lhd test* drwxrwx--- 2 carol carol 4,0K jul 13 22:25 testdir -rw-rw---- 1 carol carol 0 jul 13 22:25 testfile
Et si vous vérifiez le umask
sans l’option -S
(mode symbolique), vous obtenez :
$ umask 0007
Le résultat n’est pas évident étant donné que les valeurs utilisées sont différentes. Voici un tableau avec chaque valeur et sa signification respective :
Valeurs | Droits pour les fichiers | Droits pour les répertoires |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Comme vous pouvez le voir, 007
correspond à rwxrwx---
, exactement comme nous l’avons souhaité. Vous pouvez ignorer le zéro initial.
Droits d’accès étendus
En dehors des droits de lecture, d’écriture et d’exécution pour l’utilisateur, le groupe et les autres, chaque fichier peut comporter trois autres droits d’accès étendus qui peuvent modifier le fonctionnement d’un répertoire ou l’exécution d’un programme. Ces droits peuvent être définis en mode symbolique ou octal, à savoir :
Sticky Bit
Le sticky bit, également appelé fanion de suppression restreinte, a la valeur octale 1
. En mode symbolique, il est représenté par un t
dans les permissions des autres. Il s’applique aux seuls répertoires et n’a aucun effet sur les fichiers normaux. Sous Linux, il empêche les utilisateurs de supprimer ou de renommer un fichier dans un répertoire à moins qu’ils ne soient propriétaires de ce fichier ou de ce répertoire.
Les répertoires avec le sticky bit activé présentent un t
à la place du x
au niveau des droits pour les autres (others) dans l’affichage de la commande ls -l
:
$ ls -ld Sample_Directory/ drwxr-xr-t 2 carol carol 4096 Dec 20 18:46 Sample_Directory/
En mode octal, les droits d’accès étendus sont spécifiés à l’aide d’une notation à quatre chiffres, le premier chiffre représentant le droit spécial sur lequel on souhaite agir. Par exemple, pour activer le sticky bit (valeur 1
) pour le répertoire Another_Directory
en mode octal avec les permissions 755
, la commande serait la suivante :
$ chmod 1755 Another_Directory $ ls -ld Another_Directory drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory
SGID
SGID, également connu sous le nom de Set GID ou Set Group ID bit, a la valeur octale 2
. En mode symbolique, il est représenté par un s
sur les permissions du groupe (group). Ce bit s’applique aux fichiers exécutables ou aux répertoires. Dans le cas des fichiers, le processus s’exécutera avec les privilèges du groupe propriétaire du fichier. Lorsqu’il est appliqué à un répertoire, il fait en sorte que chaque fichier ou répertoire créé à l’intérieur hérite du groupe du répertoire parent.
Les fichiers et répertoires avec un bit SGID présentent un s
à la place du x
au niveau des droits pour le groupe (group) dans l’affichage de ls -l
:
$ ls -l test.sh -rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
Pour ajouter des droits SGID à un fichier en mode symbolique, la commande est la suivante :
$ chmod g+s test.sh $ ls -l test.sh -rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
L’exemple suivant vous aidera à mieux comprendre les effets du SGID sur un répertoire. Admettons que nous ayons un répertoire appelé Sample_Directory
appartenant à l’utilisatrice carol
et au groupe users
, avec la structure de droits suivante :
$ ls -ldh Sample_Directory/ drwxr-xr-x 2 carol users 4,0K Jan 18 17:06 Sample_Directory/
Maintenant, changeons de répertoire et créons un fichier vide à l’intérieur de celui-ci en utilisant la commande touch
. Le résultat de cette opération serait le suivant :
$ cd Sample_Directory/ $ touch newfile $ ls -lh newfile -rw-r--r-- 1 carol carol 0 Jan 18 17:11 newfile
Comme nous pouvons le voir, le fichier appartient à l’utilisatrice carol
et au groupe carol
. Cependant, si le répertoire avait le droit SGID, le résultat serait différent. Pour commencer, ajoutons le bit SGID au répertoire Sample_Directory
et vérifions le résultat :
$ sudo chmod g+s Sample_Directory/ $ ls -ldh Sample_Directory/ drwxr-sr-x 2 carol users 4,0K Jan 18 17:17 Sample_Directory/
Le s
sur les droits du groupe indique que le bit SGID est activé. Maintenant, changeons de répertoire et créons un autre fichier vide avec la commande touch
:
$ cd Sample_Directory/ $ touch emptyfile $ ls -lh emptyfile -rw-r--r-- 1 carol users 0 Jan 18 17:20 emptyfile
Le groupe propriétaire du fichier est users
. C’est parce que le bit SGID a fait en sorte que le fichier hérite du groupe propriétaire du répertoire parent, qui est users
.
SUID
SUID, également connu sous le nom de Set User ID, a la valeur octale 4
. Il est représenté par un s
sur les droits de l’utilisateur (user) en mode symbolique. Il s’applique aux seuls fichiers et n’a aucun effet sur les répertoires. Son comportement ressemble à celui du bit SGID, mais le processus s’exécutera avec les privilèges de l'utilisateur propriétaire du fichier. Les fichiers avec le bit SUID présentent un s
à la place du x
au niveau des droits de l’utilisateur dans l’affichage de ls -l
:
$ ls -ld test.sh -rwsr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Vous pouvez combiner plusieurs droits d’accès étendus en un seul paramètre. Ainsi, pour fixer le SGID (valeur 2
) et le SUID (valeur 4
) en mode octal pour le script test.sh
avec les permissions 755
, vous devez taper :
$ chmod 6755 test.sh
Et le résultat serait :
$ ls -lh test.sh -rwsr-sr-x 1 carol carol 66 Jan 18 17:29 test.sh
Tip
|
Si votre terminal supporte les couleurs, ce qui est le cas de la plupart des terminaux de nos jours, vous pouvez voir rapidement si les droits d’accès étendus ont été définis en regardant l’affichage de |
Exercices guidés
-
Créez un répertoire nommé
emptydir
en utilisant la commandemkdir emptydir
. Maintenant, en utilisantls
, affichez les droits d’accès au répertoireemptydir
. -
Créez un fichier vide nommé
emptyfile
avec la commandetouch emptyfile
. Maintenant, en utilisantchmod
en mode symbolique, ajoutez les droits d’exécution pour le propriétaire du fichieremptyfile
, et enlevez les droits d’écriture et d’exécution pour tous les autres. Faites tout cela en n’utilisant qu’une seule commandechmod
. -
Quels seront les droits d’accès par défaut pour un fichier si la valeur
umask
est fixée à027
? -
Prenons un script shell nommé
test.sh
avec les droits d’accès et les propriétaires suivants :-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Quels sont les droits du propriétaire du fichier ?
-
En utilisant la notation octale, quelle devrait être la syntaxe de
chmod
pour "défaire" les droits d’accès étendus accordés à ce fichier ?
-
-
Prenons ce fichier :
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Quel type de fichier est
sdb1
? Qui peut y écrire ? -
Prenons les quatre fichiers suivants :
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Écrivez les droits correspondants pour chaque fichier et répertoire en utilisant le mode octal avec la notation à 4 chiffres.
Another_Directory
foo.bar
HugeFile.zip
Sample_Directory
Exercices d’approfondissement
-
Essayez ceci dans un terminal : créez un fichier vide appelé
emptyfile
avec la commandetouch emptyfile
. Maintenant, "mettez à zéro" les droits du fichier avecchmod 000 emptyfile
. Que va-t-il se passer si vous modifiez les droits deemptyfile
en passant seulement une valeur pourchmod
en mode octal, commechmod 4 emptyfile
? Et si vous en passez deux, comme danschmod 44 emptyfile
? Que pouvons-nous apprendre sur la façon dontchmod
lit les valeurs numériques ? -
Prenons les droits d’accès du répertoire temporaire d’un système Linux,
/tmp
:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
L’utilisateur, le groupe et les autres ont tous les droits. Est-ce qu’un utilisateur normal pourra supprimer n’importe quel fichier à l’intérieur de ce répertoire ? Pourquoi en est-il ainsi ?
-
Un fichier nommé
test.sh
a les droits suivants :-rwsr-xr-x
, ce qui signifie que le bit SUID est activé. Maintenant, exécutez les commandes suivantes :$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Qu’avons-nous fait ? Que signifie le
S
majuscule ? -
Comment peut-on créer un répertoire nommé
Box
où tous les fichiers appartiennent automatiquement au groupeusers
, et qui ne peuvent être supprimés que par l’utilisateur qui les a créés ?
Résumé
Dans cette leçon, vous avez appris à utiliser ls
pour obtenir (et comprendre) des informations sur les droits d’accès aux fichiers, à contrôler ou modifier qui peut créer, supprimer ou modifier un fichier avec chmod
, à la fois en mode octal et symbolique, à changer le propriétaire et le groupe des fichiers avec chown
et chgrp
et à interroger et modifier le masque de droits d’accès par défaut pour les fichiers et les répertoires avec umask
.
Les commandes suivantes ont été abordées dans cette leçon :
ls
-
Afficher la liste des fichiers en indiquant éventuellement les droits d’accès.
chmod
-
Modifier les droits d’accès d’un fichier ou d’un répertoire.
chown
-
Modifier le propriétaire et/ou le groupe d’un fichier ou d’un répertoire.
chgrp
-
Modifier le groupe propriétaire d’un fichier ou d’un répertoire.
umask
-
Afficher ou définir le masque de permissions par défaut pour les fichiers et les répertoires.
Réponses aux exercices guidés
-
Créez un répertoire nommé
emptydir
en utilisant la commandemkdir emptydir
. Maintenant, en utilisantls
, affichez les droits d’accès au répertoireemptydir
.Ajoutez l’option
-d
àls
pour voir les attributs d’un répertoire au lieu d’en afficher le contenu. La réponse est donc :ls -l -d emptydir
Un bon point si vous avez songé à fusionner les deux options en une seule, comme dans
ls -ld emptydir
. -
Créez un fichier vide nommé
emptyfile
avec la commandetouch emptyfile
. Maintenant, en utilisantchmod
en mode symbolique, ajoutez les droits d’exécution pour le propriétaire du fichieremptyfile
, et enlevez les droits d’écriture et d’exécution pour tous les autres. Faites tout cela en n’utilisant qu’une seule commandechmod
.Pensez-y de cette manière :
-
"Pour l’utilisateur qui possède le fichier (
u
) ajouter (+
) les droits d’exécution (x
)", doncu+x
. -
"Pour le groupe (
g
) et les autres utilisateurs (o
), supprimer (-
) les droits d’écriture (w
) et d’exécution (x
)", doncgo-wx
.Pour combiner ces deux jeux de droits, nous ajoutons une virgule entre eux. Le résultat final est donc :
chmod u+x,go-wx emptyfile
-
-
Quels seront les droits d’accès par défaut pour un fichier si la valeur
umask
est fixée à027
?Les droits d’accès seraient
rw-r-----
-
Prenons un script shell nommé
test.sh
avec les droits d’accès et les propriétaires suivants :-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Quels sont les droits du propriétaire du fichier ?
Les droits du propriétaire (2ème au 4ème caractère dans l’affichage de
ls -l
) sontrwx
, donc la réponse est : "lire, écrire et exécuter le fichier". -
En utilisant la notation octale, quelle devrait être la syntaxe de
chmod
pour "défaire" les droits d’accès étendus accordés à ce fichier ?Nous pouvons "désactiver" les droits d’accès étendus en passant un quatrième chiffre,
0
, àchmod
. Les droits actuels sont755
, donc la commande devrait êtrechmod 0755
.
-
-
Prenons ce fichier :
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Quel type de fichier est
sdb1
? Qui peut y écrire ?Le premier caractère de l’affichage de
ls -l
indique le type de fichier.b
est un périphérique bloc, généralement un disque (interne ou externe) connecté à la machine. Le propriétaire (root
) et tous les membres du groupedisk
peuvent écrire dessus. -
Prenons les quatre fichiers suivants :
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Écrivez les droits correspondants pour chaque fichier et répertoire en utilisant le mode octal avec la notation à 4 chiffres.
Voici les droits correspondants, en mode octal :
Another_Directory
1755
.1
pour le sticky bit,755
pour les droits normaux (rwx
pour l’utilisateur,r-x
pour le groupe et les autres).foo.bar
0044
. Pas de droits d’accès étendus (le premier chiffre est donc0
), pas de droits pour l’utilisateur (---
) et juste la lecture (r—r--
) pour le groupe et les autres.HugeFile.zip
0664
. Pas de droits d’accès étendus, donc le premier chiffre est0
.6
(rw-
) pour l’utilisateur et le groupe,4
(r--
) pour les autres.Sample_Directory
2755
.2
pour le bit SGID,7
(rwx
) pour l’utilisateur,5
(r-x
) pour le groupe et les autres.
Réponses aux exercices d’approfondissement
-
Essayez ceci dans un terminal : créez un fichier vide appelé
emptyfile
avec la commandetouch emptyfile
. Maintenant, "mettez à zéro" les droits du fichier avecchmod 000 emptyfile
. Que va-t-il se passer si vous modifiez les droits deemptyfile
en passant seulement une valeur pourchmod
en mode octal, commechmod 4 emptyfile
? Et si vous en passez deux, comme danschmod 44 emptyfile
? Que pouvons-nous apprendre sur la façon dontchmod
lit les valeurs numériques ?Rappelez-vous que nous avons "mis à zéro" les permissions de
emptyfile
. Son état initial serait donc :---------- 1 carol carol 0 Dec 11 10:55 emptyfile
Maintenant, essayons la première commande,
chmod 4 emptyfile
:$ chmod 4 emptyfile $ ls -l emptyfile -------r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Vous voyez ? Les droits des autres (others) ont été modifiés. Et si nous essayons deux chiffres, comme dans
chmod 44 emptyfile
?$ chmod 44 emptyfile $ ls -l emptyfile ----r--r-- 1 carol carol 0 Dec 11 10:55 emptyfile
À présent, les droits du groupe (group) et des autres (others) sont affectés. Nous pouvons en conclure qu’en mode octal,
chmod
lit la valeur "à l’envers", du chiffre le moins significatif (others) au plus significatif (user). Si vous passez un chiffre, vous modifiez les droits pour les autres (others). Avec deux chiffres, vous modifiez le groupe (group) et les autres (others). Avec trois, vous modifiez l’utilisateurs (user), le groupe (group) et les autres (others). Et avec quatre chiffres, vous modifiez l’utilisateur (user), le groupe (group), les autres (others) et les droits d’accès étendus. -
Prenons les droits d’accès du répertoire temporaire d’un système Linux,
/tmp
:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
L’utilisateur, le groupe et les autres ont tous les droits. Est-ce qu’un utilisateur normal pourra supprimer n’importe quel fichier à l’intérieur de ce répertoire ? Pourquoi en est-il ainsi ?
/tmp
est ce que nous appelons un répertoire aux droits d’écriture universels (world writeable), ce qui signifie que n’importe quel utilisateur peut y écrire. Or, nous ne voulons pas qu’un utilisateur s’amuse avec des fichiers créés par d’autres, c’est pourquoi le sticky bit est activé (comme indiqué par let
sur les permissions pour others). Cela signifie qu’un utilisateur peut supprimer des fichiers sur/tmp
, mais seulement ceux qu’il a créés lui-même. -
Un fichier nommé
test.sh
a les droits suivants :-rwsr-xr-x
, ce qui signifie que le bit SUID est activé. Maintenant, exécutez les commandes suivantes :$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Qu’avons-nous fait ? Que signifie le
S
majuscule ?Nous avons supprimé les droits d’exécution pour l’utilisateur propriétaire du fichier. Le
s
(out
) prend la place dux
dans le résultat dels -l
, donc le système a besoin d’un moyen pour montrer si l’utilisateur a les permissions d’exécution ou non. Il le fait en changeant la casse du caractère spécial.Un
s
minuscule sur le premier lot de permissions signifie que l’utilisateur qui possède le fichier a les droits d’exécution et que le bit SUID est activé. UnS
majuscule signifie que l’utilisateur qui possède le fichier n’a pas les droits d’exécution (-
) et que le bit SUID est activé.Il en va de même pour le SGID. Un
s
minuscule sur le deuxième lot de permissions signifie que le groupe propriétaire du fichier a des droits d’exécution et que le bit SGID est activé. UnS
majuscule signifie que le groupe propriétaire du fichier n’a pas les droits d’exécution (-
) et que le bit SGID est activé.Ce principe s’applique également au sticky bit, symbolisé par le
t
dans le troisième lot de permissions. Let
minuscule signifie que le sticky bit est activé et que les autres ont les droits d’exécution. LeT
majuscule signifie que le sticky bit est activé et que les autres n’ont pas les droits d’exécution. -
Comment peut-on créer un répertoire nommé
Box
où tous les fichiers appartiennent automatiquement au groupeusers
, et qui ne peuvent être supprimés que par l’utilisateur qui les a créés ?C’est un processus en plusieurs étapes. La première étape consiste à créer le répertoire :
$ mkdir Box
Nous voulons que chaque fichier créé dans ce répertoire soit automatiquement assigné au groupe
users
. Nous pouvons le faire en définissant ce groupe comme propriétaire du répertoire, puis en fixant le bit SGID sur ce répertoire. Nous devons également nous assurer que tous les membres du groupe peuvent écrire dans ce répertoire.Puisque nous ne nous préoccupons pas des autres droits, et que nous voulons "basculer" uniquement les droits d’accès spéciaux, il est logique d’utiliser le mode symbolique :
$ chown :users Box/ $ chmod g+wxs Box/
Notez que si votre utilisateur actuel n’appartient pas au groupe
users
, vous devrez utiliser la commandesudo
avant les commandes ci-dessus pour effectuer le changement en tant que root.Passons maintenant à la dernière partie, qui consiste à s’assurer que seul l’utilisateur qui a créé un fichier est autorisé à l’effacer. Cela se fait en paramétrant le sticky bit (représenté par un
t
) sur le répertoire. Rappelez-vous qu’il est défini dans les permissions pour les autres (o
).$ chmod o+t Box/
Les droits d’accès au répertoire
Box
doivent être les suivants :drwxrwsr-t 2 carol users 4,0K Jan 18 19:09 Box
Bien sûr, vous pouvez spécifier le SGID et le sticky bit en utilisant une seule commande
chmod
:$ chmod g+wxs,o+t Box/
Un bon point pour vous si vous y avez pensé.