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
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.
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.
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 :
- le propriétaire du fichier ou dossier ;
- le groupe associé à la ressource ;
- l' ensemble des autres utilisateurs.
Ainsi un fichier qui aurait les permissions
rwxr-xr--
signifierait :
- droits de lecture, écriture, exécution pour le propriétaire
- droits de lecture et exécution pour le groupe
- 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
.
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
oux
É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
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
~/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 fichierjournal.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.