Linux Professional Institute Learning Logo.
Passer au contenu principal
  • Accueil
    • Toutes les ressources
    • Supports de Cours LPI
    • Devenez contributeur
    • Publishing Partners
    • Devenez Partenaire de Publication
    • À propos
    • FAQ
    • Contributeurs
    • Feuille de route
    • Contactez-nous
  • LPI.org
5.3 Leçon 1
Sujet 1 : Communauté Linux et carrière dans le logiciel libre
1.1 Évolution de Linux et systèmes d'exploitation populaires
  • 1.1 Leçon 1
1.2 Applications libres majeures
  • 1.2 Leçon 1
1.3 Logiciel à code source ouvert et licences
  • 1.3 Leçon 1
1.4 Compétences informatiques et travail sous Linux
  • 1.4 Leçon 1
Sujet 2 : Trouver son chemin sur un système Linux
2.1 Bases sur la ligne de commande
  • 2.1 Leçon 1
  • 2.1 Leçon 2
2.2 Utilisation de la ligne de commande pour obtenir de l'aide
  • 2.2 Leçon 1
2.3 Utilisation des répertoires et liste des fichiers
  • 2.3 Leçon 1
  • 2.3 Leçon 2
2.4 Création, déplacement et suppression de fichiers
  • 2.4 Leçon 1
Sujet 3 : Le pouvoir de la ligne de commande
3.1 Archivage de fichiers en ligne de commande
  • 3.1 Leçon 1
3.2 Recherche et extraction de données à partir de fichiers
  • 3.2 Leçon 1
  • 3.2 Leçon 2
3.3 Conversion de commandes en script
  • 3.3 Leçon 1
  • 3.3 Leçon 2
Sujet 4 : Le système d'exploitation Linux
4.1 Choix d'un système d'exploitation
  • 4.1 Leçon 1
4.2 Compréhension du matériel informatique
  • 4.2 Leçon 1
4.3 Localisation des données
  • 4.3 Leçon 1
  • 4.3 Leçon 2
4.4 Intégration au réseau
  • 4.4 Leçon 1
Sujet 5 : Sécurité et droits d'accès aux fichiers
5.1 Sécurité élémentaire et identification des catégories d'utilisateurs
  • 5.1 Leçon 1
5.2 Création des utilisateurs et des groupes
  • 5.2 Leçon 1
5.3 Gestion des propriétés et des droits d'accès aux fichiers
  • 5.3 Leçon 1
5.4 Répertoires et fichiers spéciaux
  • 5.4 Leçon 1
How to get certified
  1. Sujet 5 : Sécurité et droits d'accès aux fichiers
  2. 5.3 Gestion des propriétés et des droits d'accès aux fichiers
  3. 5.3 Leçon 1

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 ou u.

    • 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 ou o.

  • 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 permission r 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

  1. Créez un répertoire nommé emptydir en utilisant la commande mkdir emptydir. Maintenant, à l’aide de ls, listez les permissions du répertoire emptydir.

  2. Créez un fichier vide nommé emptyfile avec la commande touch emptyfile. Maintenant, en utilisant chmod avec la notation symbolique, ajoutez les permissions d’exécution pour le propriétaire du fichier emptyfile, et supprimez les permissions d’écriture et d’exécution pour tous les autres. Faites cela en utilisant une seule commande chmod.

  3. Quelles seront les permissions pour un fichier appelé text.txt après que vous aurez utilisé la commande chmod 754 text.txt ?

  4. 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 ?

  5. 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 ?

  6. 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

  1. Essayez ceci sur un terminal : créez un fichier vide appelé emptyfile avec la commande touch emptyfile. Maintenant, mettez à zéro les permissions pour le fichier avec chmod 000 emptyfile. Que se passe-t-il si vous modifiez les permissions pour emptyfile en passant une seule valeur pour chmod en mode numérique, par exemple chmod 4 emptyfile ? Et si nous en utilisons deux, comme chmod 44 emptyfile ? Que pouvons-nous apprendre sur la façon dont chmod lit la valeur numérique ?

  2. Pouvez-vous exécuter un fichier pour lequel vous avez des permissions d’exécution, mais pas de lecture (--x) ? Pourquoi ou pourquoi pas ?

  3. 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 ?

  4. 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 ?

  5. Comment créer un répertoire nommé Box dans lequel tous les fichiers sont automatiquement détenus par le groupe users 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

  1. Créez un répertoire nommé emptydir en utilisant la commande mkdir emptydir. Maintenant, à l’aide de ls, listez les permissions du répertoire emptydir.

    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.

  2. Créez un fichier vide nommé emptyfile avec la commande touch emptyfile. Maintenant, en utilisant chmod en notation symbolique, ajoutez les permissions d’exécution pour le propriétaire du fichier emptyfile, et supprimez les permissions d’écriture et d’exécution pour tous les autres. Faites cela en utilisant une seule commande chmod.

    Pensez-y de cette façon :

    • “Pour l’utilisateur qui possède le fichier (u) ajouter (+) la permission d’exécution (x)”, donc u+x.

    • “Pour le groupe (g) et les autres utilisateurs (o), supprimer (-) les permissions d’écriture (w) et d’exécution (x)”, donc go-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
  3. Quelles seront les permissions d’un fichier appelé text.txt après que j’aurai utilisé la commande chmod 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 est 2, exécution est 1 et aucune permission est 0. Nous obtenons la valeur d’un chiffre en additionnant les valeurs correspondantes pour chaque permission. 7 est 4+2+1, ou rwx, 5 est 4+0+1, donc r-x et 4 est juste lecture, ou r--. Les permissions pour text.txt seraient :

    rwxr-xr--
  4. 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) sont rwx, 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 est root, 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 sont 755, donc la commande devrait être chmod 0755.

  5. 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 groupe disk peuvent y écrire.

  6. 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

  1. Essayez ceci sur un terminal : créez un fichier vide appelé emptyfile avec la commande touch emptyfile. Maintenant, mettez à zéro les permissions pour le fichier avec chmod 000 emptyfile. Que se passe-t-il si vous modifiez les permissions pour emptyfile en passant une seule valeur pour chmod en mode numérique, par exemple chmod 4 emptyfile ? Et si nous en utilisons deux, comme chmod 44 emptyfile ? Que pouvons-nous apprendre sur la façon dont chmod 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.

  2. 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.

  3. 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 le t 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.

  4. 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 (ou t) prend la place du x sur la sortie de ls -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é. Un S 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é. Un S 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. Un t 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.

  5. Comment créer un répertoire nommé Box dans lequel tous les fichiers sont automatiquement détenus par le groupe users 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 commande sudo 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é.

Linux Professional Insitute Inc. Tous droits réservés. Visitez le site web du projet _Learning_ : https://learning.lpi.org
Ce travail est sous licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Pas de Modification 4.0 International.

Prochaine leçon

5.4 Répertoires et fichiers spéciaux (5.4 Leçon 1)

Lire la prochaine leçon

Linux Professional Insitute Inc. Tous droits réservés. Visitez le site web du projet _Learning_ : https://learning.lpi.org
Ce travail est sous licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Pas de Modification 4.0 International.

LPI est une organisation à but non lucratif.

© 2023 Le Linux Professional Institute (LPI) est la référence mondiale en matière de certification et un organisme de soutien aux professionnels de l'Open Source. Avec plus de 200 000 certifiés à son actif, c'est le principal organisme de certification indépendant pour Linux et l'Open Source au monde. Le LPI a certifié des professionnels dans plus de 180 pays, organise des examens en plusieurs langues et compte des centaines de partenaires pour la formation.

Notre objectif est la création d'opportunités économiques et créatives pour tous en rendant accessible au monde entier la certification des connaissances et des compétences en matière d'Open Source.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Contactez-nous
  • Politique en matière de confidentialité et de cookies

Vous avez repéré une erreur ou vous voulez aider à améliorer cette page ? Faites-nous savoir.

© 1999–2023 The Linux Professional Institute Inc. Tous droits réservés.