Une introduction aux permissions Linux

Introduction

Linux est, par définition, un système d’exploitation multi-utilisateurs basé sur les concepts Unix de propriété des fichiers et de permissions pour assurer la sécurité au niveau du système de fichiers. Pour administrer de manière fiable un serveur cloud, il est essentiel d’avoir une bonne compréhension de la manière dont fonctionnent la propriété et les permissions. Il existe de nombreuses subtilités dans la gestion de la propriété des fichiers et des permissions, mais ce tutoriel fournira une bonne introduction.

Ce tutoriel couvrira comment visualiser et comprendre la propriété et les permissions sous Linux. Si vous recherchez un tutoriel sur la manière de modifier les permissions, vous pouvez lire Les bases des permissions sous Linux et comment utiliser Umask sur un VPS.

Prérequis

Assurez-vous de bien comprendre les concepts abordés dans les tutoriels précédents de cette série :

Pour suivre ce tutoriel, vous aurez besoin d’accéder à un serveur cloud. Vous pouvez suivre ce guide pour créer une instance DigitalOcean.

À propos des utilisateurs

Comme mentionné dans l’introduction, Linux est un système multi-utilisateur. Vous devez comprendre les fondamentaux des utilisateurs et des groupes Linux avant de comprendre la propriété et les autorisations, car ce sont les entités auxquelles s’appliquent la propriété et les autorisations. Commençons par ce que sont les utilisateurs.

Sous Linux, il existe deux types d’utilisateurs : les utilisateurs système et les utilisateurs réguliers. Traditionnellement, les utilisateurs système sont utilisés pour exécuter des processus non interactifs ou en arrière-plan sur un système, tandis que les utilisateurs réguliers sont utilisés pour se connecter et exécuter des processus de manière interactive. Lorsque vous initialisez et vous connectez à un système Linux pour la première fois, vous remarquerez qu’il démarre avec de nombreux utilisateurs système déjà créés pour exécuter les services dont le système d’exploitation dépend. C’est normal.

Vous pouvez voir tous les utilisateurs sur un système en regardant le contenu du fichier /etc/passwd. Chaque ligne de ce fichier contient des informations sur un seul utilisateur, commençant par son nom d’utilisateur (le nom avant le premier :). Vous pouvez afficher le contenu du fichier passwd avec cat:

  1. cat /etc/passwd
Output
… sshd:x:109:65534::/run/sshd:/usr/sbin/nologin landscape:x:110:115::/var/lib/landscape:/usr/sbin/nologin pollinate:x:111:1::/var/cache/pollinate:/bin/false systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false vault:x:997:997::/home/vault:/bin/bash stunnel4:x:112:119::/var/run/stunnel4:/usr/sbin/nologin sammy:x:1001:1002::/home/sammy:/bin/sh

Superutilisateur

En plus des deux types d’utilisateurs, il y a le superutilisateur, ou utilisateur root, qui a la capacité de contourner toutes les restrictions de propriété et d’autorisation de fichiers. En pratique, cela signifie que le superutilisateur a le droit d’accéder à tout sur son propre serveur. Cet utilisateur est utilisé pour effectuer des modifications à l’échelle du système.

Il est également possible de configurer d’autres comptes utilisateur avec la capacité de prendre des « droits de superutilisateur ». Cela est souvent appelé avoir sudo, car les utilisateurs qui ont la permission d’obtenir temporairement des droits de superutilisateur le font en précédant les commandes de niveau administrateur avec sudo. En fait, créer un utilisateur normal ayant des privilèges sudo pour les tâches d’administration système est considéré comme une meilleure pratique. De cette manière, vous pouvez être plus conservateur dans votre utilisation du compte utilisateur root.

À propos des groupes

Les groupes sont des collections de zéro ou plusieurs utilisateurs. Un utilisateur appartient à un groupe par défaut, et peut également être membre de l’un quelconque des autres groupes sur un serveur.

Vous pouvez consulter tous les groupes sur le système et leurs membres en regardant dans le fichier /etc/group, comme vous le feriez avec /etc/passwd pour les utilisateurs. Cet article ne couvre pas la gestion des groupes.

Maintenant que vous savez ce que sont les utilisateurs et les groupes, parlons de la propriété et des permissions des fichiers!

Consultation de la propriété et des permissions

Sous Linux, chaque fichier est détenu par un seul utilisateur et un seul groupe, et possède ses propres permissions d’accès. Voyons comment consulter la propriété et les permissions d’un fichier.

La manière la plus courante de consulter les permissions d’un fichier est d’utiliser la commande ls avec l’option de liste longue -l, par exemple ls -l monfichier. Si vous souhaitez consulter les permissions de tous les fichiers de votre répertoire actuel, exécutez la commande sans l’argument monfichier, comme ceci :

  1. ls -l

Remarque : Si vous êtes dans un répertoire personnel vide et que vous n’avez pas encore créé de fichiers à consulter, vous pouvez suivre en listant le contenu du répertoire /etc en exécutant cette commande : ls -l /etc

Voici un exemple de capture d’écran de la sortie de ls -l, avec des étiquettes pour chaque colonne de sortie :

Chaque fichier répertorie son mode (qui contient les permissions), propriétaire, groupe et nom. Pour aider à expliquer ce que signifient toutes ces lettres et tirets, nous allons décomposer la colonne du mode en ses composants.

Mode de compréhension

Pour expliquer ce que signifient tous les regroupements et lettres, voici un décompte des métadonnées du mode du premier fichier dans l’exemple ci-dessus :

Type de fichier

Sous Linux, il existe deux types de fichiers : les fichiers normaux et les fichiers spéciaux. Le type de fichier est indiqué par le premier caractère du mode d’un fichier – dans ce guide, cela sera appelé le « champ de type de fichier ».

Les fichiers normaux peuvent être identifiés par un trait d’union (-) dans leurs champs de type de fichier. Les fichiers normaux peuvent contenir des données ou toute autre chose. Ils sont appelés normaux, ou réguliers, pour les distinguer des fichiers spéciaux.

Les fichiers spéciaux peuvent être identifiés par un caractère non trait d’union, tel qu’une lettre, dans leurs champs de type de fichier, et sont traités différemment par le système d’exploitation que les fichiers normaux. Le caractère qui apparaît dans le champ de type de fichier indique le type de fichier spécial qu’est un fichier particulier. Par exemple, un répertoire, qui est le type de fichier spécial le plus courant, est identifié par le caractère d qui apparaît dans son champ de type de fichier (comme dans la capture d’écran précédente). Il existe plusieurs autres types de fichiers spéciaux.

Classes de permissions

D’après le diagramme, vous pouvez voir que la colonne mode indique le type de fichier, suivi de trois triades, ou classes, de permissions : utilisateur (propriétaire), groupe et autres. L’ordre des classes est cohérent sur tous les systèmes Linux.

Les trois classes de permissions fonctionnent comme suit :

  • Utilisateur : Le propriétaire d’un fichier appartient à cette classe.
  • Groupe : Les membres du groupe du fichier appartiennent à cette classe. Les permissions de groupe sont un moyen utile d’attribuer des permissions sur un fichier donné à plusieurs utilisateurs.
  • Autres : Tout utilisateur qui ne fait pas partie des classes utilisateur ou groupe pour ce fichier appartient à cette classe.

Lecture des permissions symboliques

La prochaine chose à laquelle il faut faire attention sont ces ensembles de trois caractères. Ils représentent les permissions, sous forme symbolique, que chaque classe a pour un fichier donné.

Dans chaque triade, les permissions de lecture, écriture et exécution sont représentées de la manière suivante :

  • Lecture : Indiquée par un r en première position
  • Écriture : Indiquée par un w en deuxième position
  • Exécuter: Indiqué par un x en troisième position. Dans certains cas spéciaux, il peut y avoir un caractère différent ici

A hyphen (-) in the place of one of these characters indicates that the respective permission is not available for the respective class. For example, if the group (second) triad for a file is r--, the file is “read-only” to the group that is associated with the file.

Compréhension de la lecture, de l’écriture, de l’exécution

Maintenant que vous savez comment lire les autorisations d’un fichier, vous devriez savoir ce que chaque autorisation permet réellement aux utilisateurs de faire. Ce tutoriel couvrira chaque autorisation individuellement, mais gardez à l’esprit qu’elles sont souvent utilisées en combinaison les unes avec les autres pour permettre un accès utile aux fichiers et répertoires.

Voici un aperçu de l’accès que les trois types d’autorisations accordent à l’utilisateur :

Lecture

Pour un fichier normal, l’autorisation de lecture permet à un utilisateur de voir le contenu du fichier.

Pour un répertoire, l’autorisation de lecture permet à un utilisateur de voir les noms des fichiers dans le répertoire.

Écriture

Pour un fichier normal, l’autorisation d’écriture permet à un utilisateur de modifier et de supprimer le fichier.

Pour un répertoire, la permission d’écriture permet à un utilisateur de supprimer le répertoire, de modifier son contenu (créer, supprimer et renommer des fichiers à l’intérieur), et de modifier le contenu des fichiers pour lesquels l’utilisateur a des permissions d’écriture.

Exécuter

Pour un fichier normal, la permission d’exécution permet à un utilisateur d’exécuter un fichier – l’utilisateur doit également avoir la permission de lecture. Les permissions d’exécution doivent être définies pour les programmes exécutables et les scripts shell avant qu’un utilisateur puisse les exécuter.

Pour un répertoire, la permission d’exécution permet à un utilisateur d’accéder ou de traverser (c’est-à-dire cd) et d’accéder aux métadonnées des fichiers dans le répertoire (les informations répertoriées dans un ls -l).

Exemples de Modes (et Permissions)

Maintenant que vous savez lire le mode d’un fichier et comprenez la signification de chaque permission, vous verrez quelques exemples de modes courants, avec de brèves explications, pour réunir les concepts.

  • -rw-------: Un fichier accessible uniquement par son propriétaire
  • -rwxr-xr-x: Un fichier exécutable par chaque utilisateur sur le système. Un fichier « exécutable par tout le monde »
  • -rw-rw-rw-: Un fichier ouvert à la modification par chaque utilisateur sur le système. Un fichier « modifiable par tout le monde »
  • drwxr-xr-x: Un répertoire que chaque utilisateur du système peut lire et accéder
  • drwxrwx---: Un répertoire modifiable (y compris son contenu) par son propriétaire et son groupe
  • drwxr-x---: Un répertoire accessible par son groupe

Le propriétaire d’un fichier bénéficie généralement des autorisations les plus étendues, comparé aux deux autres classes. En général, vous verrez que les classes groupe et autre n’ont qu’un sous-ensemble des autorisations du propriétaire (équivalent ou moins). Cela a du sens car les fichiers ne doivent être accessibles qu’aux utilisateurs qui en ont besoin pour une raison particulière.

Autre chose à noter est que même si de nombreuses combinaisons d’autorisations sont possibles, seules certaines ont du sens dans la plupart des situations. Par exemple, l’accès en écriture ou en exécution est presque toujours accompagné d’un accès en lecture, car il est difficile de modifier, voire impossible d’exécuter, quelque chose que vous ne pouvez pas lire.

Conclusion

Vous devriez maintenant avoir une bonne compréhension du fonctionnement de la propriété et des autorisations sous Linux. Pour apprendre à modifier ces autorisations en utilisant chown, chgrp et chmod, consultez Les bases des autorisations Linux et comment utiliser Umask sur un VPS.

Si vous souhaitez en savoir plus sur les fondamentaux de Linux, lisez le prochain tutoriel de cette série, Une introduction à la redirection d’E/S sous Linux.

Source:
https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-permissions