27.2. Utilisateurs et autorisations d'accès

Depuis sa création au début des années 1990, Linux a été conçu comme un système multi-utilisateurs. Un nombre quelconque d'utilisateurs peut travailler dessus en même temps. Les utilisateurs doivent se loguer au système avant de démarrer une session sur leur poste de travail. Chaque utilisateur possède un nom d'utilisateur et le mot de passe correspondant. Grâce à cette différenciation des utilisateurs, il est garanti que les utilisateurs non autorisés ne pourront pas consulter des fichiers pour lesquels ils ne possèdent pas d'autorisation. Les modifications plus importantes du système, telles que l'installation de nouveaux programmes, sont généralement impossibles ou restreintes pour les utilisateurs normaux. Seul l'utilisateur, ou le superutilisateur, possède la capacité non restreinte d'apporter des modifications au système et dispose d'un accès illimité à l'ensemble des fichiers. Quiconque utilise ce concept de façon judicieuse, en se loguant avec un accès root complet uniquement lorsque cela est nécessaire, peut réduire le risque de perte non intentionnelle de données. Étant donné qu'en règle générale, seul l'utilisateur root peut supprimer des fichiers ou des systèmes ou formater les disques durs, il est possible de réduire considérablement le risque d'un effet cheval de Troie ou d'une entrée accidentelle de commandes destructrices.

27.2.1. Autorisations du système de fichiers

Fondamentalement, chaque fichier d'un système de fichiers Linux appartient à un utilisateur et à un groupe. Chacun de ces groupes propriétaires et tous les autres sont autorisés à écrire, lire ou exécuter ces fichiers.

Dans ce cas, un groupe peut être défini comme un ensemble d'utilisateurs connectés ayant certains droits collectifs. Par exemple, appelez un groupe travaillant sur un certain projet project3. Chaque utilisateur d'un système Linux est membre d'au moins un groupe propriétaire, en principe celui des users. Un système peut comprendre autant de groupes que nécessaire, mais seul un superutilisateur peut ajouter des groupes. La commande groups permet à chaque utilisateur de savoir à quel groupe il appartient.

Accès aux fichiers

L'organisation des autorisations du système de fichiers diffère pour les fichiers et les répertoires. Les informations sur les autorisations de fichier peuvent être affichées à l'aide de la commande ls -l. La sortie peut se présenter comme dans l'Exemple 27.1, « Exemple de sortie affichant les autorisations de fichier ».

Exemple 27.1. Exemple de sortie affichant les autorisations de fichier

-rw-r----- 1 tux project3 14197 Jun 21  15:03 Roadmap

Comme le montre la troisième colonne, ce fichier appartient à l'utilisateur tux. Il est assigné au groupe project3. Pour connaître les autorisations d'utilisateur du fichier Roadmap, il convient d'examiner la première colonne de plus près.

-

rw-

r--

---

Type

Autorisations d'utilisateur

Autorisations de groupe

Autorisations pour les autres utilisateurs

Cette colonne se compose d'un caractère d'en-tête suivi par neuf caractères groupés par trois par trois. La première des dix lettres représente le type de composant du système de fichiers. Le tiret () indique qu'il s'agit d'un fichier. Un répertoire (d), un lien (l), un périphérique de bloc (b), ou un périphérique de caractères peuvent également être indiqués.

Les trois blocs suivants sont fondés un modèle standard. Les trois premiers caractères indiquent si le fichier est lisible(r) ou non (-). Un w dans la partie intermédiaire symbolise le fait que l'objet correspondant peut être modifié et un tiret () signifie qu'il est impossible d'écrire dans le fichier. Un x en troisième position signale que l'objet peut être exécuté. Comme le fichier de cet exemple est un fichier texte et non un fichier exécutable, l'accès exécutable n'est pas requis pour ce fichier.

Dans cet exemple, en tant que propriétaire du fichier Roadmap, tux possède les droits de lecture (r) et d'écriture (w) sur ce fichier, mais ne peut l'exécuter (x). Les membres du groupe project3 peuvent lire le fichier, mais ne peuvent le modifier ou l'exécuter. Les autres utilisateurs n'ont pas accès à ce fichier. Il est possible d'assigner d'autres autorisations au moyen des ACL (listes de contrôle d'accès). Pour plus d'informations, consultez la Section 27.2.6, « Listes de contrôle d'accès ».

Autorisations de répertoire

Les autorisations d'accès pour les répertoires ont le type d. Pour les répertoires, les autorisations individuelles ont une signification légèrement différente.

Exemple 27.2. Exemple de sortie affichant les autorisations de répertoire

drwxrwxr-x 1 tux project3 35 Jun 21 15:15  ProjectData

Dans l'Exemple 27.2, « Exemple de sortie affichant les autorisations de répertoire », le propriétaire (tux) et le groupe propriétaire (project3) du répertoire ProjectData sont faciles à identifier. Contrairement aux autorisations d'accès aux fichiers de Accès aux fichiers, l'autorisation de lecture définie (r) signifie qu'il est possible d'afficher le contenu du répertoire. Le droit d'écriture (w) implique qu'il est possible de créer de nouveaux fichiers. Le droit d'exécution (x) implique que l'utilisateur peut accéder à ce répertoire. Dans l'exemple précédent, l'utilisateur tux ainsi que les membres du groupe project3 peuvent accéder au répertoire ProjectData (x), en afficher le contenu (r), et lui ajouter ou en supprimer des fichiers (w). Les autres utilisateurs ont un accès restreint. Ils peuvent entrer dans le répertoire (x) et le parcourir (r), mais ne peuvent pas y insérer de nouveaux fichiers (w).

27.2.2. Modification des autorisations de fichier

Modification des autorisations d'accès

Les autorisations d'accès d'un fichier ou d'un répertoire peuvent être modifiées par le propriétaire et, bien sûr, par l'utilisateur root à l'aide de la commande chmod, suivie des paramètres modifiant les autorisations et un ou plusieurs noms de fichiers. Les paramètres constituent des catégories différentes :

  1. les utilisateurs concernés

    • u (user) - propriétaire du fichier

    • g (group) - groupe qui détient le fichier

    • o (others) - utilisateurs supplémentaires (si aucun paramètre n'est indiqué, les modifications s'appliquent à toutes les catégories)

  2. un caractère de suppression (), de définition (=) ou d'insertion (+)

  3. les abréviations

    • r - lire

    • w - écrire

    • x - exécuter

  4. nom de fichier ou noms de fichier séparés par des espaces

Par exemple, si l'utilisateur tux de l'Exemple 27.2, « Exemple de sortie affichant les autorisations de répertoire » souhaite accorder le droit d'écriture (w) à d'autres utilisateurs sur le répertoire ProjectData, il peut le faire à l'aide de la commande chmod o+w ProjectData.

En revanche, s'il souhaite supprimer toutes les autorisations d'utilisateurs excepté la sienne, il peut le faire en entrant la commande chmod go-w ProjectData. Pour interdire à tous les utilisateurs d'ajouter un nouveau fichier au dossier ProjectData, entrez chmod -w ProjectData. À présent, même le propriétaire ne peut écrire dans le fichier sans rétablir les droits d'écriture au préalable.

Modifications des autorisations de propriété

Les autres commandes importantes qui permettent de contrôler la propriété et les autorisations des composants du système de fichiers sont chown (pour « change owner ») et chgrp (pour « change group »). La commande chown peut servir à transférer la propriété d'un fichier vers un autre utilisateur. Toutefois, seul un utilisateur root est autorisé à effectuer cette modification.

Supposons que le fichier Roadmap de l'Exemple 27.2, « Exemple de sortie affichant les autorisations de répertoire » ne doive plus appartenir à tux, mais à l'utilisateur geeko. L'utilisateur root doit alors entrer chown geeko Roadmap.

chgrp modifie la propriété de groupe du fichier. Toutefois, le propriétaire du fichier doit faire partie du nouveau groupe. De cette manière, l'utilisateur tux de l'Exemple 27.1, « Exemple de sortie affichant les autorisations de fichier » peut basculer le groupe propriétaire du fichier ProjectData vers project4 à l'aide de la commande chgrp project4 ProjectData, à condition qu'il soit membre de ce nouveau groupe.

27.2.3. Le bit setuid

Dans certaines situations, les autorisations d'accès peuvent être trop restrictives. C'est pourquoi Linux possède des paramètres supplémentaires permettant de modifier provisoirement l'identité actuelle de l'utilisateur et du groupe pour une action spécifique. Par exemple, le programme passwd requiert normalement des autorisations de niveau racine pour accéder à /etc/passwd. Ce fichier contient des informations importantes (par exemple, les répertoires privés des utilisateurs, ainsi que les ID des utilisateurs et des groupes). Un utilisateur ordinaire n'est donc pas en mesure de changer le fichier passwd, car cela serait trop dangereux d'accorder un accès direct à ce fichier à l'ensemble des utilisateurs. Le mécanisme setuid offre une solution à ce problème. setuid (pour « set user ID ») est un attribut de fichier spécial qui indique au système d'exécuter certains programmes sous un ID utilisateur spécifique. Imaginons la commande passwd :

-rwsr-xr-x  1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd

Le s indique que le bit setuid est défini pour l'autorisation de l'utilisateur. Grâce au bit setuid, tous les utilisateurs qui lancent la commande passwd l'exécutent en tant que root.

27.2.4. Le bit setgid

Le bit setuid s'applique aux utilisateurs. Toutefois, il existe également une propriété équivalente pour les groupes : le bit setgid. Un programme pour lequel cet attribut a été défini est exécuté sous l'ID groupe sous lequel il a été enregistré, quel que soit l'utilisateur qui le lance. Par conséquent, dans un répertoire comprenant le bit setgid, tous les fichiers et sous-répertoires nouveaux sont assignés au groupe auquel appartient le répertoire. Prenez pour exemple le répertoire suivant :

drwxrws--- 2 tux archive 48 Nov 19 17:12
   backup

Le s indique que le bit setuid est défini pour l'autorisation du groupe. Le propriétaire du répertoire et les membres du groupe archive peuvent accéder à ce répertoire. Les utilisateurs qui ne sont pas membres de ce groupe sont « assignés » à leur groupe respectif. L'ID de groupe effectif de tous les fichiers écrits sera archive. Par exemple, un programme de sauvegarde qui est exécuté avec l'ID de groupe archive peut accéder à ce répertoire, même s'il n'est pas doté des privilèges de niveau racine.

27.2.5. Le bit autocollant

Il existe également le bit autocollant. Son utilisation est différente selon qu'il appartient à un programme exécutable ou à un répertoire. S'il appartient à un programme, un fichier marqué de cette façon est chargé dans la mémoire RAM pour éviter d'avoir à l'extraire du disque dur à chacune de ces utilisations. Cet attribut est rarement utilisé car les disques durs modernes sont suffisamment rapides. Si ce bit est assigné à un répertoire, il empêche les utilisateurs de supprimer leurs fichiers respectifs. Des exemples typiques sont les répertoires /tmp et /var/tmp :

drwxrwxrwt   2 root  root   1160 2002-11-19 17:15 /tmp
  

27.2.6. Listes de contrôle d'accès

Le concept classique d'autorisation pour les objets du système de fichiers Linux, tels que les fichiers ou les répertoires, peut être développé au moyen des ACL (listes de contrôle d'accès). Elles permettent d'assigner des autorisations à des utilisateurs ou groupes individuels autres que le propriétaire ou le groupe propriétaire d'origine d'un objet du système de fichiers.

Les fichiers ou répertoires qui comportent des autorisations d'accès étendues peuvent être détectés à l'aide d'une simple commande ls -l :

-rw-r--r--+ 1 tux project3 14197 Jun 21  15:03 Roadmap

Roadmap est détenu par tux qui appartient au groupe project3. tux possède à la fois les droits d'écriture et de lecture sur ce fichier. Son groupe, comme tous les autres utilisateurs, possèdent des droits de lecture. La seule différence qui distingue ce fichier d'un fichier sans ACL est le + supplémentaire qui apparaît dans la première colonne comportant les bits d'autorisation.

Pour obtenir des détails sur l'ACL, exécutez la commande getfacl Roadmap :

# file: Roadmap 
# owner: tux 
# group: project3 
user::rw- 
user:jane:rw-       effective: r-- 
group::r-- 
group:djungle:rw-   effective: r-- 
mask::r-- 
other::---

Les trois premières lignes de la sortie ne comportent aucune information qui n'est pas disponible avec la commande ls -l. Ces lignes indiquent uniquement le nom du fichier, le propriétaire et le groupe propriétaire. Les lignes 4 à 9 comportent les entrées ACL. Les autorisations d'accès conventionnelles représentent un sous-ensemble des autorisations possibles en utilisant les ACL. Cet exemple d'ACL accorde les droits de lecture et d'écriture au propriétaire du fichier, ainsi qu'à l'utilisateur jane (lignes 4 et 5). Le concept conventionnel a été développé pour offrir l'accès à un utilisateur supplémentaire. Le même principe s'applique à la gestion d'un accès de groupe. Le groupe propriétaire possède des droits de lecture (ligne 6) et le groupe djungle des droits de lecture et d'écriture. L'entrée de la commande mask à la ligne 8 réduit les droits de lecture effectifs de l'utilisateur jane et du groupe djungle. Les autres utilisateurs et groupes ne bénéficient d'aucun accès au fichier (ligne 9).

Seules des informations très basiques sont fournies ici. Pour plus d'informations sur les ACL, reportez-vous au Chapitre 24, Listes de contrôle d'accès sous Linux.