Gestion des autorisations sous Linux
Les permissions ou autorisations sur les fichiers et les répertoires constituent la principale caractéristique de sécurité de Linux. Pour ce faire, Linux attribue un propriétaire à chaque fichier et répertoire et permet à ce propriétaire de définir les paramètres de sécurité de base pour contrôler l'accès au fichier ou au répertoire. Dans ce cours, nous vous montrerons comment Linux gère la propriété des fichiers et des répertoires, ainsi que les paramètres d'autorisation de base que vous pouvez attribuer à tout fichier ou répertoire sur votre système Linux.
Vous pouvez afficher les paramètres de permission pour un fichier ou un répertoire spécifié en ajoutant l'option -l à la commande ls.
devinfo@ubuntu:~$ ls -l test -rw-rw-r-- 1 devinfo devinfo 0 oct. 17 10:20 test devinfo@ubuntu:~$ ls -ld Documents drwxr-xr-x 2 devinfo devinfo 4096 oct. 16 12:38 Documents
La figure ci-dessous montre une description de toutes les différentes informations affichées à l'aide de la commande ls -l.
Comprendre la propriété
Les informations sur le propriétaire et le groupe d'un fichier (ou d'un répertoire) sont importantes, car Linux utilise ces informations dans une approche à trois niveaux pour protéger les fichiers et les répertoires.
- Propriétaire : dans le système Linux, chaque fichier et répertoire est attribué à un seul compte utilisateur. Les autorisations définies dans ce niveau s'appliquent uniquement au propriétaire du fichier. Étant donné que le propriétaire est un nom de compte d'utilisateur, ce niveau est également appelé catégorie d'utilisateur.
- Groupe : Le système Linux attribue également chaque fichier et répertoire à un seul groupe d'utilisateurs. L'administrateur peut ensuite attribuer à ce groupe des privilèges spécifiques au fichier ou au répertoire qui diffèrent des privilèges du propriétaire.
- Autres : cette catégorie d'autorisation est attribuée à tout compte utilisateur qui n'est ni le propriétaire ni dans le groupe attribué. Les autorisations définies à ce niveau sont souvent peu nombreuses en raison du large éventail de comptes auxquels elles s'appliquent.
De nombreuses distributions Linux (comme Ubuntu) attribuent chaque compte d'utilisateur à un groupe distinct portant le même nom que le compte d'utilisateur. Cela permet d'éviter le partage accidentel de fichiers. Cependant, cela peut également rendre les choses un peu confuses lorsque vous travaillez avec les autorisations de propriétaire et de groupe et que vous voyez le même nom apparaître dans les deux zones. Heureusement, vous pouvez modifier le propriétaire et le groupe par défaut attribués aux fichiers et répertoires à l'aide de commandes Linux.
Modification de la propriété d'un fichier ou d'un répertoire
L'utilisateur root ou un compte avec des privilèges de superutilisateur peut changer le propriétaire affecté à un fichier ou un répertoire à l'aide de la commande chown (change owner). Le format de cette commande ressemble à ceci :
chown [options] user_spec fichiers
Le paramètre user_spec est le nom d'utilisateur du nouveau propriétaire à affecter au fichier ou au répertoire, et fichiers est le nom du fichier ou du répertoire à modifier.
devinfo@ubuntu:~$ ls -l test -rw-rw-r-- 1 devinfo devinfo 0 oct. 17 10:20 test devinfo@ubuntu:~$ sudo chown root test [sudo] Mot de passe de devinfo : devinfo@ubuntu:~$ ls -l test -rw-rw-r-- 1 root devinfo 0 oct. 17 10:20 test
Si nécessaire, vous pouvez spécifier plus d'un fichier ou répertoire en plaçant un espace entre chaque nom de fichier ou de répertoire. Il existe quelques options de ligne de commande disponibles pour la commande chown, mais beaucoup ne sont pas très utilisées. Une option qui pourrait vous être utile est l'option -R, qui change récursivement le propriétaire de tous les fichiers sous le répertoire spécifié.
Modification du groupe d'un fichier ou d'un répertoire
Le propriétaire du fichier ou du répertoire, ou un compte disposant de privilèges de super utilisateur, peut modifier le groupe attribué au fichier ou au répertoire en utilisant la commande chgrp. La syntaxe de cette commande est la suivante :
chgrp [options] group_spec fichiers
Le paramètre group_spec est le nom du nouveau groupe d'utilisateurs attribué au fichier ou au répertoire, et le paramètre fichiers est le nom du fichier ou du répertoire à modifier. Si vous êtes le propriétaire du fichier, vous ne pouvez changer le groupe que par un groupe auquel vous appartenez. L'utilisateur root, ou un compte avec des privilèges de super utilisateur, peut changer le groupe en n'importe quel groupe du système.
devinfo@ubuntu:~$ whoami devinfo devinfo@ubuntu:~$ ls -l test -rw-rw-r-- 1 root devinfo 0 oct. 17 10:20 test devinfo@ubuntu:~$ sudo chgrp users test devinfo@ubuntu:~$ ls -l test -rw-rw-r-- 1 root users 0 oct. 17 10:20 test
La commande chgrp utilise également l'option -R pour modifier de manière récursive le groupe attribué à tous les fichiers et répertoires sous le répertoire spécifié.
En plus de changer le groupe d'un fichier avec chgrp, vous pouvez également le changer avec la commande chown. Il suffit de mettre deux points ( :) devant le nom du nouveau groupe.
devinfo@ubuntu:~$ ls -l test -rw-rw-r-- 1 root users 0 oct. 17 10:20 test devinfo@ubuntu:~$ sudo chown :staff test devinfo@ubuntu:~$ ls -l test -rw-rw-r-- 1 root staff 0 oct. 17 10:20 test
Il est encore plus pratique de pouvoir changer le propriétaire et le groupe du fichier en même temps avec la commande chown. Mettez le nouveau propriétaire en premier, suivi de deux points, et terminez par le nouveau groupe.
devinfo@ubuntu:~$ ls -l test -rw-rw-r-- 1 root staff 0 oct. 17 10:20 test devinfo@ubuntu:~$ sudo chown devinfo:users test devinfo@ubuntu:~$ ls -l test -rw-rw-r-- 1 devinfo users 0 oct. 17 10:20 test
Gardez à l'esprit que vous devez toujours utiliser le compte root ou un compte avec des privilèges de super utilisateur pour effectuer ces modifications de fichiers par la commande chown.
Contrôle des autorisations d'accès
Une fois que vous avez établi le propriétaire et le groupe du fichier ou du répertoire, vous pouvez attribuer des permissions spécifiques à chacun. Linux utilise trois types de contrôles de permission sur les fichiers et les répertoires.
- Lire : possibilité d'accéder aux données stockées dans le fichier ou d'afficher le contenu d'un répertoire.
- Écrire : possibilité de modifier les données stockées dans le fichier ou de créer, renommer, modifier les attributs et supprimer des fichiers dans un répertoire.
- Exécuter : possibilité d'exécuter le fichier sur le système, ou possibilité pour un utilisateur de remplacer son répertoire de travail par ce répertoire (si cette option est également définie pour tous les répertoires parents).
Vous pouvez attribuer à chaque niveau de protection (propriétaire, groupe et autre) différentes autorisations de lecture, d'écriture et d'exécution. Cela crée un ensemble de neuf autorisations différentes qui sont attribuées à chaque fichier et répertoire sur le système Linux. Ces autorisations apparaissent dans la sortie ls après le code de type de fichier lorsque vous utilisez l'option -l. Le r signifie lire, w pour écrire et x pour exécuter.
La figure ci-dessous montre un exemple de permission de fichier ou de répertoire :
L'ordre des permissions au sein de chaque niveau est important. Il est toujours dans l'ordre rwx, et si un tiret (-) est affiché à la place d'une des autorisations, cela signifie que cette autorisation particulière n'est pas accordée.
Le compte utilisateur root, un compte disposant de privilèges de super utilisateur ou le propriétaire du fichier ou du répertoire peuvent modifier les autorisations attribuées. La commande permettant de modifier les permissions est chmod. La commande chmod peut utiliser deux modes différents pour indiquer les paramètres d'autorisation : le mode symbolique et le mode octal.
Mode symbolique
En mode symbolique, vous indiquez les permissions en utilisant un code de lettres pour le niveau : utilisateur (u), groupe (g), autres (o), ou tous (a). Notez que ce mode fait référence au niveau propriétaire en tant qu'"utilisateur" et au niveau autre en tant que "autres", vous devez donc faire attention lorsque vous utilisez cette commande !
Avec ce mode, la syntaxe du code des permissions est assez simple : lire (r), écrire (w) ou exécuter (x). Le niveau et les codes d'autorisation sont séparés par un signe plus (+) si vous souhaitez ajouter l'autorisation, un signe moins (-) pour supprimer l'autorisation ou un signe égal (=) pour définir l'autorisation comme seule autorisation. Voici un exemple d'utilisation du mode symbolique avec la commande chmod :
devinfo@ubuntu:~$ ls -l test -rw-rw-r-- 1 devinfo users 0 oct. 17 10:20 test devinfo@ubuntu:~$ chmod g-w test devinfo@ubuntu:~$ ls -l test -rw-r--r-- 1 devinfo users 0 oct. 17 10:20 test
Dans cet exemple, le code g-w de la commande chmod indique de supprimer l'autorisation d'écriture pour le niveau de groupe du fichier test.
En utilisant le mode symbolique, vous pouvez combiner les codes de lettres pour les différents niveaux et autorisations à la fois pour apporter plusieurs modifications dans une seule commande chmod, comme indiqué ici :
devinfo@ubuntu:~$ chmod ug=rwx test devinfo@ubuntu:~$ ls -l test -rwxrwxr-- 1 devinfo users 0 oct. 17 10:20 test
Le code ug attribue la modification aux niveaux du propriétaire (utilisateur) et du groupe, tandis que le code rwx attribue les autorisations de lecture, d'écriture et d'exécution. Le signe égal indique qu'il faut définir ces permissions.
Mode octal
En mode octal, les neuf bits d'autorisation sont représentés par trois nombres octaux, un pour chaque niveau d'autorisation (propriétaire, groupe et monde). Le tableau ci-dessous montre comment le numéro octal correspond aux trois permissions en mode symbolique.
Valeur octale | Autorisation | Description |
---|---|---|
0 | --- | Pas de permissions |
1 | --x | Exécuter uniquement |
2 | -w- | Ecrire seulement |
3 | -wx | Ecrire et exécuter |
4 | r-- | Lire seulement |
5 | r-x | Lire et exécuter |
6 | rw- | Lire et écrire |
7 | rwx | Lire, écrire et exécuter |
Dans la syntaxe du mode octal, un seul chiffre est placé à l'emplacement pour représenter les autorisations pour ce niveau : UtilisateurGroupeAutres. Ainsi, le numéro de mode octal 640 définirait les autorisations de lecture et d'écriture (6) dans le niveau propriétaire (Utilisateur), il définirait uniquement la lecture (4) au niveau du groupe et aucune autorisation (0) ne serait accordée dans le niveau autres. Voici un exemple d'utilisation de chmod avec la syntaxe en mode octal :
devinfo@ubuntu:~$ ls -l test -rwxrwxr-- 1 devinfo users 0 oct. 17 10:20 test devinfo@ubuntu:~$ chmod 650 test devinfo@ubuntu:~$ ls -l test -rw-r-x--- 1 devinfo users 0 oct. 17 10:20 test
Le mode octal 650 définit les autorisations de niveau propriétaire pour lire et écrire (6), les autorisations de groupe pour lire et exécuter (5) et le niveau autre sans autorisation (0). C'est un moyen pratique de définir toutes les autorisations pour un fichier ou un répertoire en une seule commande.
Gestion des autorisations par défaut
Lorsqu'un utilisateur crée un nouveau fichier ou répertoire, le système Linux lui attribue un propriétaire, un groupe et des autorisations par défaut. Le propriétaire par défaut, comme prévu, est l'utilisateur qui a créé le fichier. Le groupe par défaut est le groupe principal du propriétaire.
La fonction de masque utilisateur (umask) définit les permissions par défaut que Linux attribue au fichier ou au répertoire. Le masque utilisateur est une valeur octale qui représente les bits à supprimer des autorisations en mode octal 666 pour les fichiers, ou en mode octal 777 pour les répertoires.
La valeur du masque utilisateur est définie avec la commande umask. Vous pouvez afficher votre paramètre umask actuel en entrant simplement la commande sur la ligne de commande.
devinfo@ubuntu:~$ umask 0002
La sortie de la commande umask affiche quatre valeurs octales. La première valeur octale représente le masque des bits SUID (4), GUID (2) et sticky (1) affectés aux fichiers et répertoires que vous créez. Les trois valeurs octales suivantes masquent les paramètres d'autorisation de niveau propriétaire, groupe et autres.
Le masque est un masque au niveau du bit appliqué aux bits d'autorisation sur le fichier ou le répertoire. Tout bit défini dans le masque est supprimé des autorisations pour le fichier ou le répertoire. Si un bit n'est pas défini, le masque ne modifie pas le paramètre. Le tableau ci-dessous montre comment les valeurs umask fonctionnent en pratique lors de la création de fichiers et de répertoires sur votre système Linux.
umask | Fichiers créés | Répertoires créés |
---|---|---|
000 | 666 (rw-rw-rw-) | 777 (rwxrwxrwx) |
002 | 664 (rw-rw-r--) | 775 (rwxrwxr-x) |
022 | 644 (rw-r--r--) | 755 (rwxr-xr-x) |
027 | 640 (rw-r-----) | 750 (rwxr-x---) |
077 | 600 (rw-------) | 700 (rwx------) |
277 | 400 (r--------) | 500 (r-x------) |
Vous pouvez tester cela en créant un nouveau fichier et un nouveau répertoire sur votre système Linux :
devinfo@ubuntu:~$ umask 0002 devinfo@ubuntu:~$ touch fich devinfo@ubuntu:~$ ls -l fich -rw-rw-r-- 1 devinfo devinfo 0 oct. 19 04:00 fich devinfo@ubuntu:~$ mkdir rep devinfo@ubuntu:~$ ls -ld rep drwxrwxr-x 2 devinfo devinfo 4096 oct. 19 04:02 rep
La valeur umask de 0002 a créé les autorisations de fichier par défaut de rw-rw--r-- , ou octal 664, sur le fichier fich, et rwxrwxr-x , ou octal 775, sur le répertoire rep, comme prévu.
Vous pouvez modifier le paramètre umask par défaut pour votre compte utilisateur en utilisant la commande umask à partir de la ligne de commande.
devinfo@ubuntu:~$ umask 077 devinfo@ubuntu:~$ touch fichier2 devinfo@ubuntu:~$ ls -l fichier2 -rw------- 1 devinfo devinfo 0 oct. 19 04:05 fichier2 devinfo@ubuntu:~$ mkdir rep2 devinfo@ubuntu:~$ ls -ld rep2 drwx------ 2 devinfo devinfo 4096 oct. 19 04:06 rep2
Les autorisations par défaut pour le nouveau fichier ont été modifiées pour correspondre au paramètre umask. Notez que vous pouvez utiliser un nombre à trois chiffres pour indiquer un nouveau paramètre de masque utilisateur, si vous ne souhaitez soustraire aucune des autorisations spéciales.