19.2. Utilisateurs et droits d'accès

Linux a été conçu dès le début comme système multiutilisateur qui permet à plusieurs personnes de l'utiliser simultanément. Au début de chaque session de travail, l'utilisateur doit se connecter au système. L'utilisateur dispose pour cela d'un nom d'utilisateur et d'un mot de passe qui lui sont propres. Il est ainsi garanti que des personnes non autorisées ne pourront pas lire des données auquelles elles ne devraient pas avoir accès. De la même façon, les modifications importantes concernant le système, telles que, par exemple, l'installation de programmes, ne peuvent pas être effectuées par un utilisateur ordinaire, si ce n'est, dans certains cas particuliers, dans des limites extrêmement restreintes. Seul root, le super utilisateur, possède des droits illimités et peut accéder sans aucune restriction à tous les fichiers. Ceux qui appliquent judicieusement ce concept et se connectent uniquement en cas de besoin avec la toute puissance de root peuvent diminuer notablement le risque de pertes de données accidentelles. Comme en règle générale l'administrateur est le seul qui soit autorisé à effacer des systèmes de fichiers ou à formater des disques durs, les risques potentiels que constituent les chevaux de Troie ou les commandes destructrices exécutées par erreur sont très nettement réduits.

19.2.1. Droits dans le système de fichiers

Dans le système de fichiers Linux, un fichier appartient toujours à un utilisateur et à un groupe. Le propriétaire du fichier peut assigner à ces deux parties mais aussi à des utilisateurs externes des droits de lecture, d'écriture et d'exécution.

On désigne sous le nom de groupe l'ensemble des utilisateurs d'un système qui possèdent certains droits collectifs. Une équipe travaillant à la réalisation d'un projet et que nous appellerons projet3 constitue un tel groupe. Chaque utilisateur sous Linux fait partie, au minimum, d'une unité de gestion qui est par défaut le groupe users. Il est possible de créer plusieurs autres groupes mais seul root est autorisé à prendre cette mesure. Avec la commande groups, chaque utilisateur peut savoir à quel groupe il appartient.

Droits sur les fichiers

Voyons de plus près comment sont structurés les droits dans le système de fichiers. Commençons par les droits sur les fichiers. La sortie de ls -l pourrait avoir l'aspect de Exemple 19.1, « Exemple d'affichage des droits d'accès aux fichiers ».

Exemple 19.1. Exemple d'affichage des droits d'accès aux fichiers

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

Comme vous pouvez le voir dans la troisième et la quatrième colonnes, ce fichier appartient à l'utilisateur tux faisant partie du groupe projet3. Pour pouvoir cependant voir quels droits ont été attribués sur le fichier, il est nécessaire d'examiner plus attentivement la première colonne.

-

rw-

r--

---

Type

Droits utilisateur

Droits groupe

Droits pour d'autres utilisateurs

Cette colonne est constituée d'un caractère d'introduction ainsi que de neuf caractères répartis par groupes de trois. Le premier des dix caractères représente le type de l'élément du système de fichiers listé ici. Le trait d'union - indique qu'il s'agit d'un fichier normal. Ici, il pourrait tout aussi bien être fait référence à un répertoire (d), à un lien (l), à un périphérique bloc (b) ou à un périphérique caractères (c).

Les trois blocs suivants se conforment à un schéma unifié: Le premier des trois caractères indique si l'entité concernée (utilisateur, groupe ou autres) a des droits d'accès en lecture sur le fichier (r) ou si ces droits ne sont pas attribués (-). Un w dans l'unité du milieu indique que l'accès en écriture au fichier concerné est autorisé. Un trait d'union (-) indique que l'accès en écriture n'est pas possible. Il pourrait figurer, dans la colonne de droite, un x qui symboliserait les droits d'exécution. Mais comme il s'agit ici d'un fichier texte et non pas d'un fichier exécutable, il n'est bien sûr pas nécessaire d'attribuer des droits d'exécution.

Dans notre exemple, l'utilisateur tux, en tant que propriétaire du fichier Roadmap, a des droits d'accès aussi bien en lecture (r) qu'en écriture (w) mais il n'a pas de droits d'exécution (x) qui, d'ailleurs, ne lui serviraient à rien. Les membres du groupe projet3 sont autorisés à lire le fichier mais ne peuvent ni le modifier ni l'exécuter. Les utilisateurs autres que tux et les autres membres du groupe projet3n'ont eux aucun droit d'accès à ce fichier. D'autres permissions peuvent être attribuées au moyen d'ACL (access control lists). Pour plus de détails, consultez Section 19.2.6, « Listes de contrôle d'accès » et le chapitre correspondant dans le Guide de l'administrateur.

Droits sur les répertoires

Abordons maintenant la question des droits d'accès aux répertoires dont le type est d. Ici, les droits ont une signification quelque peu différente.

Exemple 19.2. Exemple d'affichage des droits d'accès aux répertoires

drwxrwxr-x 1 tux projet3 35 Jun 21 15:15  Projets

Dans Exemple 19.2, « Exemple d'affichage des droits d'accès aux répertoires », le propriétaire (tux) et le groupe propriétaire (projet3) du répertoire Projets sont faciles à reconnaître. Contrairement à ce qui se passe pour les droits sur les fichiers vus dans Droits sur les fichiers, le r symbolisant les droits de lecture indique que le contenu du répertoire peut être affiché. Les droits d'écriture (w) incluent en plus l'autorisation de créer de nouveaux fichiers et par le droit d'exécution (x), l'utilisateur est autorisé à passer dans ce répertoire. Dans notre exemple, cela signifie qu'outre l'utilisateur tux, les membres du groupe projet3 sont autorisés à accéder au répertoire Projets (x), à faire afficher son contenu (r) et à y ajouter ou supprimer des fichiers (w). Tous les autres utilisateurs ont des droits beaucoup plus restreints. Ils sont autorisés à accéder au répertoire (x) ou à faire afficher son contenu (r) mais ils ne peuvent y déposer aucun fichier (w n'est pas positionné).

19.2.2. Adaptation des droits sur les fichiers

Modification des droits d'accès

Les droits d'accès à un fichier ou à un répertoire peuvent être modifiés par le propriétaire (et bien sûr aussi par root) avec la commande chmod à laquelle on ajoute des paramètres spécifiant les droits d'accès à changer ainsi que les noms des fichiers à modifier. Les paramètres constituent différentes catégories :

  1. les utilisateurs concernés

    • u (user)—le propriétaire du fichier)

    • g (group)—le groupe propriétaire du fichier)

    • o (others)—autres utilisateurs (si aucun paramètre n'est spécifié, les modifications sont valables pour toutes les catégories))

  2. un signe de soustraction (), d'égalité (=) ou d'addition (+)

  3. les abréviations

    • rread (lecture)

    • wwrite (écriture)

    • xexecute (exécution)

  4. et le(s) nom(s) du ou des fichier(s) concerné(s) séparés par des espaces.

Si l'utilisateur tux dont il est question dans Exemple 19.2, « Exemple d'affichage des droits d'accès aux répertoires » désire accorder à d'autres utilisateurs un accès en écriture (w) au répertoire Projets, il peut leur assigner ces droits au moyen de la commande chmod o+w Projets.

S'il veut supprimer le droit d'écriture pour tous les utilisateurs sauf pour lui-même, il tapera la commande chmod go-w Projets. Pour interdire à tous les utilisateurs de déposer un nouveau fichier dans le répertoire Projets, on tape la commande chmod -w Projets. Maintenant, aucun utilisateur, pas même le propriétaire, n'est autorisé à écrire sur le fichier tant que les droits en écriture ne sont pas restaurés.

Modification des droits de propriété

D'autres commandes essentielles qui règlent les droits de propriété dans le système de fichiers sont chown (change owner) et chgrp (change group). La commande chown est utilisée pour changer le propriétaire d'un fichier spécifié. Cependant, seul root est autorisé à faire cette modification.

Supposons que le fichier Roadmap de Exemple 19.2, « Exemple d'affichage des droits d'accès aux répertoires » ne doive plus désormais appartenir à tux mais à l'utilisateur geeko. La commande – qui devra être lancée par l'utilisateur root sera : chown geeko Roadmap.

La commande chgrp fonctionne de la même façon ; elle est utilisée pour modifier l'appartenance d'un fichier à un groupe. Il convient ici de noter que le propriétaire du fichier doit être membre du nouveau groupe auquel il veut attribuer le fichier. Ainsi, l'utilisateur tux de Exemple 19.1, « Exemple d'affichage des droits d'accès aux fichiers » pourrait donc, avec la commande chgrp projet4 Projets, faire passer la propriété du fichier Projets au groupe projet4 s'il est lui-même membre de ce groupe. Pour root, cette restriction n'existe pas.

19.2.3. Le bit setuid

Dans certaines situations, les droits d'accès peuvent sembler trop restrictifs. À cette fin, il existe sous Linux des paramètres supplémentaires qui permettent la modification temporaire de l'identité de l'utilisateur et du groupe courants pour une action spécifique. Par exemple, le programme passwd nécessite en fait des permissions root pour accéder à /etc/passwd. Ce fichier contient des informations importantes telles que les répertoires personnels des utilisateurs et les ID des utilisateurs et groupes. Ainsi, un utilisateur normal ne peut pas modifier passwd car il serait trop dangereux d'accorder à tous les utilisateurs l'accès direct à ce fichier. Le mécanisme setuid offre une solution à ce problème. Setuid (Set User ID) est un attribut de fichier spécial qui indique au système qu'il doit exécuter les programmes marqués par cet attribut sous un ID utilisateur spécifique. Considérons la commande passwd :

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

Vous pouvez voir le bit s défini pour les droits de l'utilisateur. Avec le bit setuid, tous les utilisateurs qui démarrent la commande passwd l'exécute en tant que root.

19.2.4. Le bit setgid

L'attribut setuid s'applique à l'utilisateur, mais il existe une propriété équivalente pour les groupes : l'attribut setgid. Un programme fonctionne alors sous l'ID de groupe sous lequel il a été enregistré quelque soit l'utilisateur qui l'adémarré. En conséquence, dans un répertoire avec le bit setgid, tous les nouveaux fichiers et sous-répertoires créés seront attribués au groupe auquel est attribué le répertoire. Considérons l'exemple suivant :

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

Vous pouvez voir le bit s défini pour les droits du groupe. Le propriétaire du répertoire et les membres du groupe archive peuvent accéder au répertoire. Les utilisateurs qui ne sont pas membres de ce groupe sont « mappés » au 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 pourra accéder à ce répertoire sans même jouir des privilèges de root.

19.2.5. Le bit sticky

Outre les bits setuid et setgid, il existe également le bit sticky. Il faut ici différencier le cas où le bit sticky appartient à un programme exécutable du cas où il appartient à un répertoire. S'il appartient à un programme, un fichier marqué de cette façon est chargé dans le RAM pour éviter d'avoir à le charger depuis le disque dur à chaque fois qu'il est utilisé. Cet attribut est rarement utilisé parce que les disques durs modernes sont suffisamment rapides. Par contre, si cet attribut est assigné à un répertoire, cela empêche les utilisateurs de s'effacer les fichiers réciproquement (dans les répertoires avec le bit sticky, les utilisateurs n'ont le droit d'effacer que les fichiers dont ils sont propriétaires). Les répertoires /tmp et /var/tmp en sont des exemples typiques :

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

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

Sous Linux, les listes de contrôle d'accès (ACL, en anglais Access Control Lists) représentent une extension du concept de permissions traditionnel pour les fichiers et répertoires. À l'aide des ACL, des permissions peuvent être attribuées à des utilisateurs ou à des groupes autres que l'utilisateur ou le groupe propriétaire d'origine.

Vous pouvez reconnaitre les répertoires ou fichiers dont les droits d'accès sont étendus tout simplement à l'aide de la commande ls -l :

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

Au premier coup d'œil, la sortie de la commande ls n'a pas beaucoup changé. Le fichier Roadmap appartient à l'utilisateur tux qui lui même fait partie du groupe projet3. tux possède aussi bien les droits d'accès en lecture qu'en écriture, le groupe possède les droits d'accès en lecture ainsi que tous les autres utilisateurs. Le seul détail indiquant une différence avec un fichier sans ACL est le + supplémentaire dans la première colonne des bits de permissions.

Vous obtenez des détails relatifs à l'ACL en exécutant la commande getfacl pour votre fichier exemple Roadmap :

# file: Roadmap
# owner: tux
# group: projet3
user::rw-
user:jane:rw-       effective: r--
group::r--
group:jungle:rw-   effective: r--
mask::r--
other::---

Les trois premières lignes n'apportent aucune information nouvelle par rapport à celles obtenues avec la commande ls -l. Il ne s'agit ici que du nom du fichier, du propriétaire et du groupe. De la quatrième à la neuvième ligne sont affichées les données ACL (ACL entries). Les droits d'accès conventionnels représentent un sous-ensemble de permissions que l'on peut définir à l'aide des ACL. Ici, l'exemple d'ACL attribue des droits d'accès en lecture et en écriture au propriétaire du fichier ainsi qu'à l'utilisateur jane (lignes 4 et 5) ; il s'agit donc d'une extension des permissions conventionnelles. La même chose est valable pour les groupes : le groupe propriétaire du fichier possède les droits d'accès en lecture (ligne 6), le groupe jungle se voyant lui attribuer des droits d'accès en lecture et en écriture (ligne 7). L'entrée mask en ligne 8 limite les droits d'accès effectifs pour l'utilisateur jane et le groupe jungle à la lecture. Aucun autre utilisateur ou groupe ne se voit accorder de permissions d'accès au fichier (ligne 9).

Vous trouverez des informations plus détaillées dans le guide de l'administrateur.


SUSE LINUX Guide de l'utilisateur 9.3