5.3 Leçon 1
Certification : |
Linux Essentials |
---|---|
Version : |
1.6 |
Thème : |
5 Sécurité et Permissions des Fichiers |
Objectif : |
5.3 Gestion des Permissions et de la Propriété des Fichiers |
Lesson: |
1 sur 1 |
Introduction
Étant un système multi-utilisateurs, Linux a besoin d’un moyen de savoir à qui appartient chaque fichier et si un utilisateur est autorisé ou non à effectuer des actions sur ce fichier. Ceci afin de garantir la confidentialité des utilisateurs qui pourraient vouloir garder le contenu de leurs fichiers confidentiel, ainsi que pour assurer la collaboration en rendant certains fichiers accessibles à plusieurs utilisateurs.
Cela se fait grâce à un système de permissions à trois niveaux : chaque fichier sur le disque appartient à un utilisateur et à un groupe d’utilisateurs et possède trois ensembles de permissions : une pour son propriétaire, une pour le groupe qui possède le fichier et une pour tous les autres. Dans cette leçon, vous apprendrez comment interroger les permissions d’un fichier et comment les manipuler.
Recherche d’Informations sur les Fichiers et les Répertoires
La commande ls
est utilisée pour obtenir une liste du contenu de n’importe quel répertoire. Dans cette forme de base, vous obtenez uniquement les noms de fichiers :
$ ls Another_Directory picture.jpg text.txt
Mais il y a beaucoup plus d’informations disponibles pour chaque fichier, y compris le type, la taille, la propriété et plus encore. Pour voir ces informations, vous devez demander à ls
un listage en “forme longue”, en utilisant le paramètre -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 de la sortie ci-dessus a une signification :
-
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 pour le 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 utilisateur, également appelée others ouo
.
-
-
La deuxième colonne indique le nombre de liens physiques pointant vers ce fichier. Pour un répertoire, cela signifie le nombre de sous-répertoires, plus un lien vers lui-même (
.
) et le répertoire parent (..
). -
Les troisième et quatrième colonnes indiquent les informations relatives à la propriété : respectivement l’utilisateur et le groupe propriétaire du fichier.
-
La cinquième colonne indique la taille des fichiers, en octets.
-
La sixième colonne indique la date et l’heure précises, ou l'horodatage, de la dernière modification du fichier.
-
La septième et dernière colonne indique le nom du fichier.
Si vous souhaitez voir les tailles de fichiers au format "lisible par l’homme", ajoutez le paramètre -h
à ls. Les fichiers de moins d’un kilooctet auront la taille indiquée en octets. Les fichiers de plus d’un kilooctet et de moins d’un mégaoctet auront un K
ajouté après la taille, indiquant que la taille est en kilooctets. Il en va de même pour les fichiers dont la taille se situe dans les plages des mégaoctets (M
) et des gigaoctets (G
) :
$ ls -lh total 1,2G drwxrwxr-x 2 carol carol 4,0K Dec 10 17:59 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 -rw------- 1 carol carol 528K Dec 10 10:43 picture.jpg ---xr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh -rwxr--r-- 1 carol carol 1,9K Dec 20 18:13 text.txt -rw-rw-r-- 1 carol carol 2,6M Dec 11 22:14 Zipped.zip
Pour n’afficher que les informations sur un ensemble spécifique de fichiers, ajoutez les noms de ces fichiers à ls
:
$ ls -lh HugeFile.zip test.sh total 1,2G -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip ---xr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Et les Répertoires ?
Si vous essayez d’obtenir des informations sur un répertoire en utilisant ls -l
, vous obtiendrez à la place la liste du contenu du répertoire :
$ ls -l Another_Directory/ total 0 -rw-r--r-- 1 carol carol 0 Dec 10 17:59 another_file.txt
Pour éviter cela et avoir les informations sur le répertoire lui-même, ajoutez le paramètre -d
à ls :
$ ls -l -d Another_Directory/ drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory/
Voir les Fichiers Cachés
La liste des répertoires que nous avons récupérée à l’aide de ls -l
auparavant est incomplète :
$ 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 cachés. Pour les voir, nous devons ajouter le paramètre -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 simplement caché parce que son nom commence par .
.
Les répertoires .
et ..
sont cependant spéciaux. .
est un pointeur vers le répertoire courant, tandis que ..
est un pointeur vers le répertoire parent (le répertoire qui contient le répertoire courant). Sous Linux, chaque répertoire contient au moins ces deux répertoires spéciaux.
Vous pouvez combiner plusieurs paramètres pour ls
(et de nombreuses autres commandes Linux). ls -l -a
peut, par exemple, être écrit comme ls -la
.
Comprendre les Types de Fichiers
Nous avons déjà mentionné que la première lettre de chaque sortie de ls -l
décrit le type de fichier. Les trois types de fichiers les plus courants sont les suivants :
-
(fichier normal)-
Un fichier peut contenir des données de toute nature. Les fichiers peuvent être modifiés, déplacés, copiés et supprimés.
d
(répertoire)-
Un répertoire contient d’autres fichiers ou répertoires et aide à organiser le système de fichiers. Techniquement, les répertoires sont un type de fichier particulier.
l
(lien souple)-
Ce “fichier” est un pointeur vers un autre fichier ou répertoire ailleurs dans le système de fichiers.
En plus de ceux-ci, il existe trois autres types de fichiers que vous devriez au moins connaître, mais qui ne sont pas couverts par cette leçon :
b
(périphérique à blocs)-
Ce fichier représente un périphérique virtuel ou physique, généralement des disques ou d’autres types de périphérique de stockage. Par exemple, le premier disque dur du système peut être représenté par
/dev/sda
. c
(périphérique à caractères)-
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 à caractères. s
(socket)-
Les sockets servent de "conduits" transmettant les informations entre deux programmes.
Ne modifiez aucune des permissions sur les périphériques à blocs, les périphériques à caractères ou les sockets, à moins que vous ne sachiez ce que vous faites. Cela pourrait empêcher votre système de fonctionner !
Comprendre les Permissions
Dans la sortie de ls -l
, les permissions de fichier sont affichées 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’elles signifient. Gardez à l’esprit qu’un tiret -
représente l’absence d’une permission particulière.
Permissions sur les Fichiers
r
-
Signifie read (lecture) et a une valeur octale de
4
(ne vous inquiétez pas, nous discuterons bientôt des octales). Cela signifie qu’il est permis d’ouvrir un fichier et d’en lire le contenu. w
-
Signifie write (écriture) et a une valeur octale de
2
. Cela induit la permission de modifier ou de supprimer un fichier. x
-
Signifie execute et a une valeur octale de
1
, ce qui signifie que le fichier peut être exécuté en tant qu’exécutable ou script.
Ainsi, par exemple, un fichier avec les permissions rw-
peut être lu et écrit, mais ne peut pas être exécuté.
Permissions sur les Répertoires
r
-
Signifie read et a une valeur octale de
4
, ce qui signifie qu’il est permis de lire le contenu du répertoire, comme les noms de fichiers. Mais cela n’implique pas la permission de lire les fichiers eux-mêmes. w
-
Signifie write et a une valeur octale de
2
. Il s’agit de la permission de créer ou de supprimer des fichiers dans un répertoire, ou de modifier leurs noms, permissions et propriétaires. Si un utilisateur a la permission d’écrire sur un répertoire, il peut changer les permissions de n’importe quel fichier dans le répertoire, même s’il n’a pas de permissions sur le fichier ou si le fichier appartient à un autre utilisateur. x
-
Signifie execute et a une valeur octale de
1
, Il s’agit d’une permission d’entrer dans un répertoire, mais pas de lister ses fichiers (pour cela, la permissionr
est nécessaire).
La dernière partie sur les répertoires peut sembler un peu confuse. Imaginons, par exemple, que vous ayez un répertoire nommé Another_Directory
, avec les permissions suivantes :
$ ls -ld Another_Directory/ d--xr-xr-x 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Imaginez aussi que dans ce répertoire vous avez un script shell appelé hello.sh
avec les permissions suivantes :
-rwxr-xr-x 1 carol carol 33 Dec 20 18:46 hello.sh
Si vous êtes l’utilisateur carol
et que vous essayez de lister le contenu de Another_Directory
, vous obtiendrez un message d’erreur, car votre utilisateur n’a pas les droits de lecture pour ce répertoire :
$ ls -l Another_Directory/ ls: cannot open directory 'Another_Directory/': Permission denied
Cependant, l’utilisateur carol
a les droits d’exécution, ce qui signifie qu’il peut entrer dans le répertoire. Par conséquent, l’utilisateur carol
peut accéder aux fichiers à l’intérieur du répertoire, à condition qu’il ait les permissions correctes pour le fichier en question. Dans cet exemple, l’utilisateur a les permissions complètes pour le script hello.sh
, ce qui lui permet d'exécuter le script, même s’il ne peut pas lire le contenu du répertoire qui le contient. On a uniquement besoin du nom complet du fichier.
$ sh Another_Directory/hello.sh Hello LPI World!
Comme nous l’avons dit précédemment, les permissions 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. Chaque fois que quelqu’un tente d’effectuer une action sur le fichier, les permissions sont vérifiées de la même manière. Le système vérifie d’abord si l’utilisateur actuel est le propriétaire du fichier, et si c’est le cas, il applique uniquement le premier ensemble de permissions. Sinon, il vérifie si l’utilisateur actuel appartient au groupe propriétaire du fichier. Dans ce cas, il applique uniquement le deuxième ensemble de permissions. Dans tous les autres cas, le système appliquera le troisième ensemble des permissions. Cela signifie que si l’utilisateur actuel est le propriétaire du fichier, seules les permissions du propriétaire sont effectives, même si les permissions du groupe ou des autres sont plus permissives que celles du propriétaire.
Modification des Permissions des Fichiers
La commande chmod
est utilisée pour modifier les permissions d’un fichier, et prend au moins deux paramètres : le premier décrit les permissions à modifier, et le second indique le fichier ou le répertoire où la modification sera effectuée. Cependant, les permissions de modification peuvent être décrites de deux manières différentes, ou “modes”.
Le premier, appelé mode symbolique, offre un contrôle fin, permettant d’ajouter ou de retirer une permission unique sans en modifier d’autres sur l’ensemble. L’autre mode, appelé mode numérique, est plus facile à mémoriser et plus rapide à utiliser si vous souhaitez définir toutes les valeurs de permission en même temps.
Les deux modes aboutiront au même résultat final. Ainsi, par exemple, les commandes :
$ chmod ug+rw-x,o-rwx text.txt
et
$ chmod 660 text.txt
produiront exactement le même résultat, un fichier avec les permissions fixées :
-rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Maintenant, comprenons comment chaque mode fonctionne.
Mode Symbolique
Lorsque vous décrivez les permissions à modifier en mode symbolique, le(s) premier(s) caractère(s) indique(nt) les permissions que vous allez modifier : celles de l’utilisateur (u
), du groupe (g
), des autres (o
) et/ou des trois ensemble (a
).
Ensuite, vous devez dire à la commande ce qu’elle doit faire : vous pouvez accorder une permission (+
), révoquer une permission (-
) ou lui donner une valeur spécifique (=
).
Enfin, vous précisez quelle permission vous souhaitez affecter : lecture (r
), écriture (w
) ou exécution (x
).
Par exemple, imaginez que nous ayons un fichier appelé text.txt
avec les permissions suivantes :
$ ls -l text.txt -rw-r--r-- 1 carol carol 765 Dec 20 21:25 text.txt
Si vous souhaitez accorder des permissions d’écriture aux membres du groupe propriétaire du fichier, vous devez utiliser le paramètre g+w
. C’est plus facile si vous y réfléchissez de cette manière : “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
Si vous voulez supprimer les permissions de lecture pour le propriétaire du même fichier, pensez ainsi : “Pour l’utilisateur (u
) révoquer (-
), les permissions de lecture (r
)”. Le paramètre est donc u-r
, comme ça :
$ 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 voulons fixer les permissions exactement rw-
à tout le monde ? Alors pensez ainsi : “Pour tous (a
), fixer exactement (=
), lecture (r
), écriture (w
), et non-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 permissions en même temps. Dans ce cas, séparez-les 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 (+
) des permissions de lecture, d’écriture et d’exécution (rwx
), pour le groupe (g
), révoquer (-
), la permission d’exécution (x
)”.
Lorsqu’elle est exécutée sur un répertoire, chmod
ne modifie que les permissions du répertoire. chmod
a un mode récursif, utile lorsque vous souhaitez modifier les permissions pour "tous les fichiers à l’intérieur d’un répertoire et de ses sous-répertoires". Pour l’utiliser, ajoutez le paramètre -R
après le nom de la commande et avant les permissions à modifier, comme ceci :
$ chmod -R u+rwx Another_Directory/
Cette commande peut être lue comme : "Récursivement (-R
), pour l’utilisateur (u
), accorder (+
) les permissions de lecture, d’écriture et d’exécution (rwx
)".
Soyez prudent et réfléchissez à deux fois avant d’utiliser l’option -R
, car il est facile de changer les permissions sur des fichiers et des répertoires que vous ne voulez pas modifier, en particulier sur les répertoires contenant un grand nombre de fichiers et de sous-répertoires.
Mode Numérique
En mode numérique, les permissions sont spécifiées d’une manière différente : sous la forme d’une valeur numérique à 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 vient lecture (r
), qui est 4
, puis écriture (w
), qui est 2
et enfin exécution (x
), représentée par 1
. S’il n’y a pas de permission, utilisez la valeur zéro (0
). Ainsi, une permission rwx
serait 7
(4+2+1
) et r-x
serait 5
(4+0+1
).
Le premier des trois chiffres de l’ensemble des permissions représente les permissions pour l’utilisateur (u
), le deuxième pour le groupe (g
) et le troisième pour les autres (o
). Si nous voulions fixer les permissions pour un fichier à rw-rw----
, la valeur octale serait de 660
:
$ chmod 660 text.txt $ ls -l text.txt -rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
En outre, la syntaxe en mode numérique est la même qu’en mode symbolique, le premier paramètre représente les permissions que vous souhaitez modifier, et le second pointe vers le fichier ou le répertoire où la modification sera effectuée.
Si la valeur d’une permission est étrange, le fichier est sûrement exécutable !
Quelle syntaxe utiliser ? Le mode numérique est recommandé si vous souhaitez modifier les permissions pour une valeur spécifique, par exemple 640
(rw- r-- ---
).
Le mode symbolique est plus utile si vous voulez permuter une valeur spécifique, indépendamment des permissions actuelles du fichier. Par exemple, je peux ajouter des permissions d’exécution pour l’utilisateur en utilisant simplement chmod u+x script.sh
sans tenir compte, ni même toucher, aux permissions actuelles pour le groupe et les autres.
Modification de la Propriété des Fichiers
La commande chown
est utilisée pour modifier la propriété d’un fichier ou d’un répertoire. La syntaxe est assez simple :
chown utilisateur:groupe fichiercible
Par exemple, vérifions un fichier appelé text.txt
:
$ ls -l text.txt -rw-rw---- 1 carol carol 1881 Dec 10 15:57 text.txt
L’utilisateur qui possède le fichier est carol
, et le groupe est également carol
. Maintenant, modifions le groupe propriétaire du fichier pour 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 besoin d’appartenir au groupe qui possède le fichier. Dans l’exemple ci-dessus, il n’est pas nécessaire que l’utilisateur soit membre du groupe students
. Toutefois, il doit être membre du groupe pour pouvoir transférer la propriété du fichier à ce groupe.
L’utilisateur ou le groupe peut être omis si vous ne souhaitez pas les modifier. Ainsi, pour changer uniquement le groupe possédant un fichier, vous utiliserez chown :students text.txt
. Pour changer uniquement l’utilisateur, la commande sera chown carol text.txt
. Vous pouvez aussi utiliser la commande chgrp students text.txt
pour ne changer que le groupe.
Sauf si vous êtes l’administrateur du système (root), vous ne pouvez pas changer la propriété d’un fichier appartenant à un autre utilisateur ou à un groupe auquel vous n’appartenez pas. Si vous essayez de le faire, vous obtiendrez le message d’erreur Opération non autorisée
.
Interroger les Groupes
Avant de changer la propriété 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 appartient un utilisateur. Ces tâches peuvent être accomplies à l’aide de deux commandes, groups
et groupmems
.
Pour voir quels groupes existent sur votre système, il suffit de taper groups
:
$ groups carol students cdrom sudo dip plugdev lpadmin sambashare
Et si vous voulez savoir à quels groupes appartient un utilisateur, ajoutez le nom d’utilisateur comme paramètre :
$ groups carol carol : carol students cdrom sudo dip plugdev lpadmin sambashare
Pour faire l’inverse, en affichant quels utilisateurs appartiennent à un groupe, utilisez groupmems
. Le paramètre -g
spécifie le groupe, et -l
liste tous ses membres :
$ sudo groupmems -g cdrom -l carol
groupmems
ne peut être exécuté qu’en tant que root, l’administrateur du système. Si vous n’êtes pas actuellement connecté en tant que root, ajoutez sudo
avant la commande.
Permissions Spéciales
Outre les permissions de lecture, d’écriture et d’exécution pour les utilisateurs, les groupes et les autres, chaque fichier peut avoir trois autres permissions spéciales qui peuvent modifier le fonctionnement d’un répertoire ou l’exécution d’un programme. Elles peuvent être spécifiées en mode symbolique ou numérique, et sont les suivantes :
Le Sticky Bit
Le sticky bit (bit collant), également appelé étiquette de suppression restreinte, a la valeur octale 1
et, en mode symbolique, est représenté par un t
dans les permissions des autres. Cela ne s’applique qu’aux répertoires et, sous Linux, cela 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é montrent un t
remplaçant le x
sur les permissions des autres sur la sortie de ls -l
:
$ ls -ld Sample_Directory/ drwxr-xr-t 2 carol carol 4096 Dec 20 18:46 Sample_Directory/
En mode numérique, les permissions spéciales sont spécifiées à l’aide d’une “notation à 4 chiffres”, le premier chiffre représentant la permission spéciale sur laquelle agir. Par exemple, pour définir le sticky bit (valeur 1
) pour le répertoire Another_Directory
en mode numérique, avec les permissions 755
, la commande serait :
$ chmod 1755 Another_Directory $ ls -ld Another_Directory drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Le Set GID
Le Set GID, également connu sous le nom SGID ou bit Set Group ID, a la valeur octale 2
et en mode symbolique est représenté par un s
sur les permissions du groupe. Cela peut s’appliquer aux fichiers ou répertoires exécutables. Sur les fichiers exécutables, il accordera au processus résultant de l’exécution du fichier l’accès aux privilèges du groupe qui possède le fichier. Lorsqu’il est appliqué aux répertoires, il fera en sorte que chaque fichier ou répertoire créé sous lui hérite du groupe du répertoire parent.
Les fichiers et répertoires avec un bit SGID montrent un s
remplaçant le x
sur les permissions du groupe sur la sortie de ls -l
:
$ ls -l test.sh -rwxr-sr-x 1 carol carol 33 Dec 11 10:36 test.sh
Pour ajouter des permissions SGID à un fichier en mode symbolique, la commande serait
$ 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 permettra de mieux comprendre les effets du SGID sur un répertoire. Supposons que nous ayons un répertoire appelé Sample_Directory
, appartenant à l’utilisateur carol
et au groupe users
, avec la structure de permission suivante :
$ ls -ldh Sample_Directory/ drwxr-xr-x 2 carol users 4,0K Jan 18 17:06 Sample_Directory/
Maintenant, entrons dans ce répertoire, et à l’aide de la commande touch
créons un fichier vide à l’intérieur. Le résultat serait :
$ cd Sample_Directory/ $ touch newfile $ ls -lh newfile -rw-r--r-- 1 carol carol 0 Jan 18 17:11 newfile
Comme on peut le voir, le fichier est la propriété de l’utilisateur carol
et du groupe carol
. Mais, si le répertoire avait les permissions SGID définies, le résultat serait différent. Tout d’abord, ajoutons le bit SGID au répertoire Sample_Directory
et vérifions les résultats :
$ 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 permissions de groupe indique que le bit SGID est activé. Maintenant, rentrons dans ce répertoire et, à nouveau, créons un 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
Comme on peut le voir, le groupe qui possède le fichier est users
. Cela est dû au fait que le bit SGID a fait que le fichier hérite du groupe propriétaire de son répertoire parent, qui est users
.
Le Set UID
Le SUID, également connu sous le nom de Set User ID, a la valeur octale 4
et est représenté par un s
sur les permissions de l'utilisateur en mode symbolique. Il s’applique uniquement aux fichiers et son comportement est similaire au bit SGID, mais le processus s’exécutera avec les privilèges de l'utilisateur qui possède le fichier. Les fichiers avec le bit SUID montrent un s
remplaçant le x
sur les permissions de l’utilisateur sur la sortie de ls -l
:
$ ls -ld test.sh -rwsr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Vous pouvez combiner plusieurs permissions spéciales dans un même paramètre en les additionnant. Ainsi, pour mettre SGID (valeur 2
) et SUID (valeur 4
) en mode numérique 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
Si votre terminal prend en charge la couleur, ce qui est le cas de la plupart des terminaux actuels, vous pouvez rapidement voir si ces permissions spéciales sont définies en jetant un coup d’œil à la sortie de ls -l
. Pour le stick bit, le nom du répertoire peut être affiché dans une police noire sur fond bleu. Il en va de même pour les fichiers avec les bits SGID (fond jaune) et SUID (fond rouge). Les couleurs peuvent être différentes selon la distribution Linux et les paramètres du terminal que vous utilisez.
Exercices Guidés
-
Créez un répertoire nommé
emptydir
en utilisant la commandemkdir emptydir
. Maintenant, à l’aide dels
, listez les permissions du répertoireemptydir
. -
Créez un fichier vide nommé
emptyfile
avec la commandetouch emptyfile
. Maintenant, en utilisantchmod
avec la notation symbolique, ajoutez les permissions d’exécution pour le propriétaire du fichieremptyfile
, et supprimez les permissions d’écriture et d’exécution pour tous les autres. Faites cela en utilisant une seule commandechmod
. -
Quelles seront les permissions pour un fichier appelé
text.txt
après que vous aurez utilisé la commandechmod 754 text.txt
? -
Supposons qu’un fichier nommé
test.sh
soit un script shell avec les permissions et la propriété suivantes :-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Quelles sont les permissions pour le propriétaire du fichier ?
-
Si l’utilisateur
john
exécute ce script, sous quels privilèges d’utilisateur sera-t-il exécuté ? -
En utilisant la notation numérique, que devrait être la syntaxe de chmod pour "annuler" la permission spéciale accordée à ce fichier ?
-
-
Examinez 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
? Et qui peut y écrire ? -
Examinez les 4 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
Notez les permissions correspondantes pour chaque fichier et répertoire en utilisant la notation numérique à 4 chiffres.
Another_Directory
-
foo.bar
-
HugeFile.zip
-
Sample_Directory
-
Exercices d’Exploration
-
Essayez ceci sur un terminal : créez un fichier vide appelé
emptyfile
avec la commandetouch emptyfile
. Maintenant, mettez à zéro les permissions pour le fichier avecchmod 000 emptyfile
. Que se passe-t-il si vous modifiez les permissions pouremptyfile
en passant une seule valeur pourchmod
en mode numérique, par exemplechmod 4 emptyfile
? Et si nous en utilisons deux, commechmod 44 emptyfile
? Que pouvons-nous apprendre sur la façon dontchmod
lit la valeur numérique ? -
Pouvez-vous exécuter un fichier pour lequel vous avez des permissions d’exécution, mais pas de lecture (
--x
) ? Pourquoi ou pourquoi pas ? -
Considérez les permissions pour le répertoire temporaire sur 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 toutes les permissions. Mais un utilisateur régulier peut-il supprimer des fichiers dans ce répertoire ? Pourquoi ?
-
Un fichier nommé
test.sh
dispose des permissions suivantes :-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 créer un répertoire nommé
Box
dans lequel tous les fichiers sont automatiquement détenus par le groupeusers
et ne peuvent être supprimés que par l’utilisateur qui les a créés ?
Résumé
En tant que système multi-utilisateurs, Linux a besoin d’un moyen de savoir qui possède chaque fichier et qui peut y accéder. Cela se fait par un système de permissions à trois niveaux, et dans cette leçon nous avons appris tout sur le fonctionnement de ce système.
Dans cette leçon, vous avez appris comment utiliser ls
pour obtenir des informations sur les permissions de fichiers, comment contrôler ou changer qui peut créer, supprimer ou modifier un fichier avec chmod
, à la fois en notation numérique et symbolique et comment changer la propriété des fichiers avec chown
et chgrp
.
Les commandes suivantes ont été abordées dans cette leçon :
ls
-
Liste les fichiers, en incluant éventuellement des détails tels que les permissions.
chmod
-
Modifie les permissions d’un fichier ou d’un répertoire.
chown
-
Change l’utilisateur et/ou le groupe propriétaire d’un fichier ou d’un répertoire.
chgrp
-
Change le groupe propriétaire d’un fichier ou d’un répertoire.
Réponses aux Exercices Guidés
-
Créez un répertoire nommé
emptydir
en utilisant la commandemkdir emptydir
. Maintenant, à l’aide dels
, listez les permissions du répertoireemptydir
.Ajoutez le paramètre
-d
àls
pour voir les attributs du répertoire, au lieu de lister son contenu. La réponse est donc :ls -l -d emptydir
Points bonus si vous avez fusionné les deux paramètres en un seul, comme dans
ls -ld emptydir
. -
Créez un fichier vide nommé
emptyfile
avec la commandetouch emptyfile
. Maintenant, en utilisantchmod
en notation symbolique, ajoutez les permissions d’exécution pour le propriétaire du fichieremptyfile
, et supprimez les permissions d’écriture et d’exécution pour tous les autres. Faites cela en utilisant une seule commandechmod
.Pensez-y de cette façon :
-
“Pour l’utilisateur qui possède le fichier (
u
) ajouter (+
) la permission d’exécution (x
)”, doncu+x
. -
“Pour le groupe (
g
) et les autres utilisateurs (o
), supprimer (-
) les permissions d’écriture (w
) et d’exécution (x
)”, doncgo-wx
.Pour combiner ces deux séries de permissions, nous ajoutons une virgule entre elles. Le résultat final est donc le suivant :
chmod u+x,go-wx emptyfile
-
-
Quelles seront les permissions d’un fichier appelé
text.txt
après que j’aurai utilisé la commandechmod 754 text.txt
?Rappelez-vous qu’en notation numérique, chaque chiffre représente un ensemble de trois permissions, chacune avec une valeur respective : lecture est
4
, écriture est2
, exécution est1
et aucune permission est0
. Nous obtenons la valeur d’un chiffre en additionnant les valeurs correspondantes pour chaque permission.7
est4+2+1
, ourwx
,5
est4+0+1
, doncr-x
et4
est juste lecture, our--
. Les permissions pourtext.txt
seraient :rwxr-xr--
-
Supposons qu’un fichier nommé
test.sh
soit un script shell avec les permissions et la propriété suivantes :-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Quelles sont les permissions pour le propriétaire du fichier ?
Les permissions pour le propriétaire (du 2nd au 4ième caractères dans la sortie de
ls -l
) sontrwx
, donc la réponse est : “de lire, d’écrire et d’exécuter le fichier”. -
Si l’utilisateur
john
exécute ce script, sous quels privilèges d’utilisateur sera-t-il exécuté ?Faites attention aux permissions pour le groupe. Elles sont
r-s
, ce qui signifie que le bit SGID est activé. Le groupe qui possède ce fichier estroot
, donc le script, même s’il est lancé par un utilisateur normal, sera exécuté avec les privilèges de l’utilisateur. -
En utilisant la notation numérique, que devrait être la syntaxe de chmod pour "annuler" la permission spéciale accordée à ce fichier ?
Nous pouvons "annuler" les permissions spéciales en passant un quatrième chiffre,
0
, àchmod
. Les permissions actuelles sont755
, donc la commande devrait êtrechmod 0755
.
-
-
Examinez 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
? Et qui peut y écrire ?Le premier caractère de la sortie 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 utilisateurs du groupedisk
peuvent y écrire. -
Examinez les 4 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
Notez les permissions correspondantes pour chaque fichier et répertoire en utilisant la notation numérique à 4 chiffres.
Les permissions correspondantes, en notation numérique, sont les suivantes :
Another_Directory
-
Réponse :
1755
1
pour le sticky bit,755
pour les permissions régulières (rwx
pour l’utilisateur,r-x
pour le groupe et les autres). foo.bar
-
Réponse :
0044
Pas de permissions spéciales (donc le premier chiffre est
0
), pas de permissions pour l’utilisateur (---
) et juste lire (r—r--
) pour le groupe et les autres. HugeFile.zip
-
Réponse :
0664
Aucune permission spéciale, donc le premier chiffre est
0
.6
(rw-
) pour l’utilisateur et le groupe,4
(r--
) pour les autres. Sample_Directory
-
Réponse :
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’Exploration
-
Essayez ceci sur un terminal : créez un fichier vide appelé
emptyfile
avec la commandetouch emptyfile
. Maintenant, mettez à zéro les permissions pour le fichier avecchmod 000 emptyfile
. Que se passe-t-il si vous modifiez les permissions pouremptyfile
en passant une seule valeur pourchmod
en mode numérique, par exemplechmod 4 emptyfile
? Et si nous en utilisons deux, commechmod 44 emptyfile
? Que pouvons-nous apprendre sur la façon dontchmod
lit la valeur numérique ?N’oubliez pas que nous avons “mis à zéro” les permissions de
emptyfile
. Ainsi, son état initial serait :---------- 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
Les permissions pour les autres ont été modifiées. Et si nous essayons deux chiffres, comme
chmod 44 emptyfile
?$ chmod 44 emptyfile $ ls -l emptyfile ----r--r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Maintenant, les permissions pour le groupe et les autres ont été affectées. On peut en conclure qu’en notation numérique,
chmod
lit la valeur "à l’envers", du chiffre le moins significatif (autres) au plus significatif (utilisateur). Si vous passez un chiffre, vous modifiez les permissions pour les autres. Avec deux chiffres, vous modifiez le groupe et les autres, et avec trois chiffres, vous modifiez l'utilisateur, le groupe et les autres et avec quatre chiffres, vous modifiez l'utilisateur, le groupe, les autres et les permissions spéciales. -
Pouvez-vous exécuter un fichier pour lequel vous avez des permissions d’exécution, mais pas de lecture (
--x
) ? Pourquoi ou pourquoi pas ?Au premier abord, la réponse semble évidente : si vous avez la permission d’exécuter, le fichier devrait s’exécuter. Cependant, sans permission de lecture, le système ne peut pas ouvrir le fichier et lire son contenu pour l’exécuter. Par conséquent, sans permission de lecture, vous ne pouvez pas exécuter un fichier, même si vous avez une permission d’exécution pour celui-ci.
-
Considérez les permissions pour le répertoire temporaire sur 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 toutes les permissions. Mais un utilisateur régulier peut-il supprimer des fichiers dans ce répertoire ? Pourquoi ?
/tmp
est ce que nous appelons un répertoire accessible en écriture pour tous, ce qui signifie que tout utilisateur peut y écrire. Mais nous ne voulons pas qu’un utilisateur modifie des fichiers créés par d’autres, donc le sticky bit est activé (comme indiqué par let
sur les permissions pour les autres). Cela signifie qu’un utilisateur peut supprimer des fichiers dans/tmp
, mais seulement s’il a créé ces fichiers. -
Un fichier appelé
test.sh
dispose des permissions suivantes :-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 permissions d’exécution pour l’utilisateur qui possède le fichier. Le
s
(out
) prend la place dux
sur la sortie dels -l
, le système a donc besoin d’un moyen de montrer si l’utilisateur a des permissions d’exécution ou non. Il le fait en modifiant la casse du caractère spécial.Un
s
minuscule sur le premier groupe de permissions signifie que l’utilisateur qui possède le fichier a des permissions 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 permissions d’exécution et que le bit SUID est activé.On peut en dire autant du SGID. Un
s
minuscule sur le deuxième groupe de permissions signifie que le groupe qui possède le fichier a des permissions d’exécution et que le bit SGID est activé. UnS
majuscule signifie que le groupe qui possède le fichier n’a pas les permissions d’exécution (-
) et que le bit SGID est activé.C’est également vrai pour le sticky bit, représenté par le
t
dans le troisième groupe des permissions. Unt
minuscule signifie que le sticky bit est activé et que les autres ont des permissions d’exécution.T
majuscule signifie que le sticky bit est activé et que les autres n’ont pas de droits d’exécution. -
Comment créer un répertoire nommé
Box
dans lequel tous les fichiers sont automatiquement détenus par le groupeusers
et ne peuvent être supprimés que par l’utilisateur qui les a créés ?Il s’agit d’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 attribué au groupe
users
. Nous pouvons le faire en définissant ce groupe comme propriétaire du répertoire, puis en y plaçant le bit SGID. Nous devons également nous assurer que tout membre du groupe peut écrire dans ce répertoire.Comme nous ne nous soucions pas des autres permissions et que nous ne voulons "permuter" que les bits 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.Maintenant, pour la dernière partie, il faut s’assurer que seul l’utilisateur qui a créé un fichier est autorisé à le supprimer. Cela se fait en plaçant le sticky bit (représenté par un
t
) sur le répertoire. N’oubliez pas qu’il est défini sur les permissions des autres (o
).$ chmod o+t Box/
Les permissions sur le répertoire
Box
doivent apparaître comme suit :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/
Des points en bonus si vous y avez pensé.