TP4 – Utilisateurs et permissions

Introduction

La plupart des systèmes d'exploitation (dont GNU/Linux) est multi-utilisateurs. Ces systèmes doivent garantir la protection des fichiers du système proprement dit et des utilisateurs contre :

  • les suppressions (in)volontaires de la part d'autres utilisateurs (par exemple : rm -fr ~copain/TPs/ ) ;
  • la modification de fichiers sans l'accord de son propriétaire ( gedit ~copain/devoir.html) ;
  • ou le "vol" d'information en lisant des informations sans autorisation ( cp ~copain/.mailbox .).

Cette protection est mise en place par la différenciation des utilisateurs et l'attribution de droits à chacun d'eux ou à des groupes d'utilisateurs.

Références :

http://doc.ubuntu-fr.org/permissions

http://fr.openclassrooms.com/informatique/cours/reprenez-le-controle-a-l-aide-de-linux/les-utilisateurs-et-les-droits

Utilisateurs et groupes

Les personnes se connectent sur un ordinateur grâce à leur nom d'utilisateur. Ces utilisateurs sont les propriétaires par défaut des fichiers et dossiers qu'il créeront sur le système de fichiers.

Expérimentez

Par exemple, les fichiers sous votre racine utilisateur vous appartiennent :

ls -l ~

(option -l : affichage long)
Vous voyez une colonne (la 3ème) affichant votre nom d'utilisateur comme propriétaire des fichiers et dossiers listés.

Vous pouvez voir d'autres utilisateurs dans le dossier père de votre racine personnelle.

ls -l ~/..

Enchaînement de quelques commandes à copier-coller dans le terminal pour aboutir à l'extraction de la liste des utilisateurs commençant par la lettre 'm' :


 # suppression des espaces consécutifs
 ls -l ~/.. | tr -s ' '
 # extraction du troisième champ (séparés par des espaces)
 ls -l ~/.. | tr -s ' ' | cut -d ' ' -f3
 # suppression des lignes qui commencent par un chiffre
 ls -l ~/.. | tr -s ' ' | cut -d ' ' -f3 | grep -v '^[0-9]'
 # ne garder que les lignes qui commencent par un 'm'
 ls -l ~/.. | tr -s ' ' | cut -d ' ' -f3 | grep -v '^[0-9]'  | grep '^m'

(nous verrons comment construire ces expressions dans un TP prochain)

Modifiez la dernière expression pour lister les utilisateurs qui commencent par la première lettre de votre identifiant.

Le super-utilisateur

La partie de l'arborescence consacrée aux fichiers systèmes est la possession d'un utilisateur particulier que l'on nomme le super-utilisateur, ou l'administrateur. Sous GNU/Linux son identifiant est root et il a tous les droits !

On peut voir son identifiant en listant les dossiers sous la racine du système de fichier :

ls -l /

(" root" est visible)

Même sur votre machine personnelle, que vous administrez, le nom de l'administrateur est invariablement root. Vous devez effectuer les tâches d'administration sous cette identité. Cette précaution évite qu'un utilisateur n'endommage son système par inadvertance. Quand il prend la peau de root, il sait qu'il doit faire attention.

C'est une différence avec le système Windows par exemple pour lequel un utilisateur peut être constamment administrateur et avoir tous les droits sur la totalité du système.

À l'université seule une petite équipe d'administrateurs système connaît le mot de passe root qui permet d'installer de nouveaux logiciels ou modifier la configuration des ordinateurs.

Les groupes d'utilisateurs

Les utilisateurs peuvent appartenir à plusieurs groupes d'utilisateurs. Cette organisation permet d'affecter des permissions (des droits) différentes à chacun des groupes et d'en faire bénéficier ses membres. Par exemple, tous les utilisateurs faisant partie du groupe cdrom pourront accéder au lecteur et tous ceux faisant partie du groupe lp pourront imprimer.

On utilise la commande id pour connaître les identifiants utilisateurs et de groupe :


id
uid=... gid=... groupes=...
  • uid : user id (un numéro et un nom)
  • gid : group id (un numéro et parfois un nom)

À l'université le groupe 500 correspond à celui des étudiants.
Si un administrateur veut changer les permissions des étudiants, il n'a qu'à modifier les droits associés à ce groupe. Pas la peine de modifier les permissions pour les milliers d'étudiants !

Tout fichier et dossier appartiennent à un utilisateur et sont associés à un groupe. Ce groupe peut être celui qui porte le même nom que l'utilisateur ou un groupe général comme celui des étudiants.

Ce groupe est le 4ème champ dans le résultat de la commande ls -l, après celui de l'utilisateur.

Toute personne faisant partie du groupe « sudo » (notamment sur son propre ordinateur) peut momentanément prendre l'identité du super-utilisateur pour émettre des commandes :

sudo mkdir /un_dossier_sous_la_racine

(à l'université les étudiants ne font pas partie du groupe sudo...)

Permissions

Nous avons dit en introduction que le système d'exploitation était doté d'un système de protection de ses fichiers et dossiers.

Expérimentez

Faisons un essai : à partir du terminal, effacez le fichier exécutable du programme gedit (un des éditeurs de texte du système) avec la commande rm.

Il faut pour cela connaître le chemin du programme gedit. Il se trouve avec la commande which :


which gedit
/usr/bin/gedit

d'où la commande pour supprimer cet exécutable :

rm /usr/bin/gedit

réponse de la commande :


rm : supprimer fichier (protégé en écriture) «/usr/bin/gedit» ? y
rm: impossible de supprimer «/usr/bin/gedit»: Permission non accordée

Visiblement, un utilisateur n'a pas le droit d'effacer un programme du système.

Nous allons voir maintenant comment fonctionne ce mécanisme de permissions.

Les permissions associées à un fichier ou dossier sont visibles avec le premier champ d'un ls -l.

Par exemple avec le dossier /boot :


ls -l /boot
 -rw-r--r-- 1 root root ...
 drwxr-xr-x 5 root root ...
 -rw------- 1 root root ...

La première lettre indique que l'on a affaire à un dossier ' d', un lien ' l' ou un fichier ' -'.

Ensuite on distingue 3 droits possibles :

  • ' r' pour " read" : accès en lecture ;
  • ' w' pour " write" : accès en écriture ;
  • ' x' pour " execute" : droit d' exécution d'un programme ou d' accès à un dossier.

Ces permissions sont visibles sous forme de trois blocs de trois lettres.
Par exemple : rw- r-- r-- ou rwx r-x r-x

Ces blocs concernent 3 catégories d'utilisateurs :

  1. le propriétaire du fichier ou dossier ;
  2. le groupe associé à la ressource ;
  3. l' ensemble des autres utilisateurs.

Ainsi un fichier qui aurait les permissions rwxr-xr-- signifierait :

  1. droits de lecture, écriture, exécution pour le propriétaire
  2. droits de lecture et exécution pour le groupe
  3. droit de lecture pour les autres.

Pour revenir au programme gedit que nous avons tenté d'effacer, voici les permissions qui y sont associées :


ls -l /usr/bin/gedit
-rwxr-xr-x 1 root root 581360 mars  27  2014 /usr/bin/gedit

Ce fichier appartient à root qui a les permissions en lecture, écriture et exécution. Pour le reste des utilisateurs (groupe et autres), ils n'ont pas accès en écriture et ne peuvent donc pas supprimer le fichier.

Changement des droits sur un fichier ou un dossier

En utilisant la commande chmod.

Expérimentez

Créer un fichier toto, modifiez les droits comme ci-dessous et visualiser leur évolution avec ls -l toto.


touch toto
chmod a+r toto
chmod g-r toto
chmod og+rw toto
chmod ug-w toto

Désigner les utilisateurs concernés :

  • u : user
  • g : group
  • o : other
  • a : all (équivalent à ugo)

opérateurs :

  • + ajout du droit
  • - retrait du droit

droits :

  • r, w ou x
Expérimentez

Éditez le fichier toto avec gedit. Modifier les droits si nécessaire.

Supprimer le fichier.

Les dossiers : un cas particulier

Les dossiers sont un cas particulier. Pour accéder au contenu d'un dossier (pour ouvrir un fichier ou se déplacer dans un sous-dossier), un utilisateur doit disposer de la permission d'exécution ( x) sur ce dossier. De plus, pour être en mesure de lister le contenu d'un dossier, l'utilisateur doit avoir la permission de lecture ( r) sur ce dossier. Pour écrire dans le dossier, la permission d'écriture ( w) doit être accordée. L'utilisateur peut disposer de ces permissions selon qu'il est propriétaire du dossier, membre du groupe propriétaire du dossier ou faire partie du reste du monde. En résumé :

  • Pour lister le contenu d'un dossier, nécessité du droit en lecture ;
  • Pour créer (ou modifier) un fichier ou dossier dans un dossier, nécessité du droit en écriture ;
  • Pour se déplacer dans un dossier, nécessité du droit en exécution.
  • Un utilisateur ne disposant que de la permission d'exécution peut ouvrir un dossier, mais ne peut pas en voir le contenu. C'est utile, par exemple, pour traverser un dossier dont on ne doit pas pouvoir lister le contenu.

Affectation des droits en octal

La commande chmod admet un mode d'affectation absolu des droits sur les fichiers.

Dans la pratique les droits pour l'utilisateur, le groupe et les autres sont désignés par 3 chiffres en octal (valeurs de 0 à 7).

Chaque chiffre est l'équivalent de 3 bits, un pour chaque droit rwx.

par exemple rwx r-x r-- serait équivalent en binaire : 111 101 100

soit les chiffres en octal : 7 5 4

Expérimentez

Créez un fichier toto et affectez lui ces droits :


chmod 754 toto

Vérifier :


ls -l toto

Que signifient les droits : 012

Vérifier votre réponse en les affectant à toto

Modifier les droits du fichier toto en utilisant l'octal afin d'écrire quelques chose dedans avec gedit.

Exercice

Dans le dossier ~/Documents/L1/ISE/TP4, créez l'arborescence suivante :


 TP4
 ├── Binome/
 │   └── devoir.tex
 ├── Connaisseurs/
 │   └── reponse746.txt
 ├── Depot/
 ├── Public/
 │   ├── images/
 │   ├── medias/
 │   └── wikipedia.html
 └── Secret/
     └── journal.doc

Attention : Le dossier ~/Bureau/Stockage est un système de fichiers Windows qui n'a pas le même système de droits que Linux. C'est pour cette raison qu'il NE faut PAS faire l'exercice sous ~/Bureau/stockage

et affectez des permissions tel que :

  • le contenu du dossier Binome puisse être lu et modifié par soi-même ou un utilisateur appartenant au même groupe exclusivement ;
  • seul les utilisateurs connaissant le nom exact du fichier reponse746.txt puisse (seulement) en lire le contenu ;
  • tout le monde peut copier des fichiers dans le dossier Depot, mais personne ne peut lister son contenu ;
  • tout le monde peut lire le contenu de Public et se déplacer dans ses dossiers ;
  • seul l'utilisateur propriétaire peut accéder dans le dossier Secret et en lire et modifier le fichier journal.doc

Vous pouvez vérifier que cela fonctionne avec votre binôme qui se connecte dans un autre terminal sous son identité :


 su identifiant                         # se connecte en tant que l'utilisateur "identifiant"
 whoami                                 # affiche l'utilisateur courant
 touch Binome/devoir.tex                # doit fonctionner
 ls Connaisseurs                        # ne doit pas fonctionner
 ls Depot                               # ne doit pas fonctionner
 cp Binome/devoir.tex Depot/            # doit fonctionner
 cp Connaisseurs/reponse746.txt Depot/  # doit fonctionner
 touch Depot/document.txt               # doit fonctionner
 tree Public                            # doit fonctionner
 touch Public/medias/song.mp3           # ne doit pas fonctionner
 ls Secret/journal.doc                  # ne doit pas fonctionner
 cp Secret/journal.doc Depot/           # ne doit pas fonctionner
 

Réponse

Si vous avez bien donné les permissions, vous devez obtenir le résultat suivant :


 tree -p TP4
 TP4/
 ├── [drwxrwx---]  Binome/
 │   └── [-rw-rw----]  devoir.tex
 ├── [drwx--x--x]  Connaisseurs/
 │   └── [-rw-r--r--]  reponse746.txt
 ├── [drwx-wx-wx]  Depot/
 ├── [drwxr-xr-x]  Public/
 │   ├── [drwxr-xr-x]  images/
 │   ├── [drwxr-xr-x]  medias/
 │   └── [-rw-r--r--]  wikipedia.html
 └── [drwx------]  Secret/
     └── [-rw-------]  journal.doc

 7 directories, 4 files

Conclusion

Le système de permissions sous GNU/Linux est simple mais permet de gérer efficacement les besoins basiques de protection des fichiers et des utilisateurs.

Un contrôle plus fin sera vu dans le prochain TP avec la liste des contrôle d'accès ou ACL.