Alain Barraud Mémento informatique  
 
Accueil Logithèque - SE Photo - vidéo Internet - protocoles Site Web PC - Réseau Archives
Page ouverte le 01/03/2009

Les utilisateurs et les droits


Sommaire
La grande puissance de Linux, c'est d'être :
  • Multitâche
  • Multi-utilisateurs
chaque personne a son propre compte utilisateur, et il existe un ensemble de règles qui disent qui a le droit de faire quoi.

sudo : exécuter une commande en root

En installant Ubuntu, on a demande le nom du compte utilisateur à créer. C'est un compte avec des droits limités.
C'est une sécurité.

L'organisation des utilisateurs sous Linux

On peut créer autant d'utilisateurs que l'on veut, eux-mêmes répartis dans des groupes.
Il y a un utilisateur "spécial" appelé root, aussi appelé super-utilisateur. Il a tous les droits sur la machine.
Voici une représentation schématique :
organisation utilisateurs


Au départ, 2 utilisateurs sont créés : root et alain.
On ne se connecte en root que très rarement, lorsque c'est nécessaire. Certaines commandes de Linux ne sont accessibles qu'à root.
Tout le reste du temps, on utilise le compte "limité" qu'on a créé.

Cette simple protection permet de largement limiter les dégâts en cas de fausse manipulation, de virus sur le PC, etc. En effet, un virus ne peut rien faire de plus que nous quand on est connecté avec des droits limités. En revanche, si on est en root il pourra tout faire, même détruire l'ordinateur.

alt Exception : Ubuntu est une des rares distributions à ne pas autoriser de se connecter (logger) en root. Le compte root existe mais on n'y a pas accès directement. Ce n'est pas un problème comme on va le voir, car on peut y accéder indirectement.
Ce choix est justifié par le fait qu'il est dangereux de laisser le compte root entre les mains d'un débutant.

sudo : devenir root un instant

Par défaut, on est connecté sous son compte limité.
Il est impossible sous Ubuntu de se connecter directement en root au démarrage de l'ordinateur.

On peut devenir root temporairement à l'aide de la commande sudo.
Cette commande signifie "Faire en tant que super-utilisateur" : Super User DO.

Cela donne :

Code : Console

sudo commande

On demande normalement le mot de passe (au moins la première fois) pour exécuter la commande. Ce mot de passe est le même que celui du compte utilisateur limité.

Par exemple, on peut exécuter un simple ls avec les droits root :

Code : Console

alain@alain-pc01:/home$ sudo ls
[sudo] password for alain:
autredossierDesktopExamplesImagesModèles/Musiquetutos
autresanimauxDocumentsimageslogmondossierPublicVidéos

Comme on le voit, on demande d'abord le mot de passe par sécurité.

sudo su : devenir root et le rester

Si on tape sudo su (tout court), on passe root indéfiniment.

Code : Console

alain@alain-pc01:/home$ sudo su
[sudo] password for alain:
root@alain-pc01:/home#

Le symbole # à la fin de l'invite de commandes indique que l'on est devenu super-utilisateur.

Pour quitter le "mode root", taper exit (ou faire la combinaison Ctrl + D).

Code : Console

root@alain-pc01:/home/alain# exit
exit
alain@alain-pc01:~$

alt Sous les autres distributions qu'Ubuntu, écrire "su" suffit à passer root.
Il est néanmoins recommandé dans ce cas d'ajouter un tiret en paramètre, c'est-à-dire d'écrire "su -". L'ajout du tiret a pour effet de rendre accessibles certains programmes destinés seulement à root. Par ailleurs, cela nous place directement dans le dossier personnel de root (/root).


adduser : ajouter un utilisateur

adduser et deluser sont des commandes réservées à root.
Si on veut essayer de les appeler en utilisateur normal, on nous dira qu'on n'a pas le droit de les utiliser. Seul root peut gérer les utilisateurs.

adduser : ajouter un utilisateur

La commande adduser permet d'ajouter un utilisateur. On doit au minimum fournir un paramètre : le nom de l'utilisateur à créer.
Par exemple, pour créer un compte pour simone :

Code : Console

root@alain-pc01:/home# adduser simone
Ajout de l'utilisateur « simone »…
Ajout du nouveau groupe « simone » (1001)…
Ajout du nouvel utilisateur « simone » (1001) avec le groupe « simone »…
Création du répertoire personnel « /home/simone »…
Copie des fichiers depuis « /etc/skel »…

Penser à rajouter un sudo devant la commande si on n'est pas déjà root, c'est-à-dire tapez sudo adduser simone.
Le répertoire personnel de simone est automatiquement créé (/home/simone) et son compte est préconfiguré.
On nous demande ensuite de taper son mot de passe :

Code : Console

Entrez le nouveau mot de passe UNIX :
Retapez le nouveau mot de passe UNIX :
passwd : le mot de passe a été mis à jour avec succès

Taper le mot de passe de simone, puis faites Entrée. Retaper le mot de passe pour valider.
On ne voit pas d'étoiles * quand on tape le mot de passe sous linux par sécurité.

On propose ensuite de rentrer quelques informations personnelles sur simone, comme son nom, son numéro de téléphone… Ce n'est pas obligatoir. On peut taper Entrée sans rien écrire.

Code : Console

Modification des informations relatives à l'utilisateur simone
Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée
        Nom complet []:
        Nº de bureau []:
        Téléphone professionnel []:
        Téléphone personnel []:
        Autre []:
Ces informations sont-elles correctes ? [o/N] o

On demande à la fin de confirmer par un "o" (oui) que tout est bon. Taper Entrée, et ça y est, simone est créé.

passwd : changer le mot de passe

S'il est nécessaire de changer le mot de passe de simone par la suite, utiliser la commande passwd en indiquant en paramètre le nom du compte à modifier.

Code : Console

root@alain-pc01:/home# passwd simone
Entrez le nouveau mot de passe UNIX :
Retapez le nouveau mot de passe UNIX :
passwd : le mot de passe a été mis à jour avec succès

alt Attention ! Si on appelle passwd sans préciser de compte en paramètre, c'est le mot de passe de root qu'on va changer !

deluser : supprimer un compte

Pour supprimer un compte, on utilise deluser. Par exemple, pour supprimer le compte de Julien :

Code : Console

deluser julien

Aucune confirmation n'est demandée.
alt Surtout, ne pas supprimer son compte utilisateur !
En effet, si je le fais, il n'y aura plus que root sur la machine... et Ubuntu interdit de se logger en root. Par conséquent, au prochain démarrage de la machine on ne pourra pas se connecter… et on sera complètement coincé !

Toutefois, cette commande seule ne supprime pas le répertoire personnel de Julien. Si on veut supprimer aussi son home et tous ses fichiers personnels, utiliser le paramètre --remove-home :

Code : Console

deluser --remove-home julien

alt adduser et deluser sont des commandes qui n'existent que dans Debian et tous ses descendants, dont Ubuntu.
Partout ailleurs, on doit utiliser useradd et userdel qui sont les commandes Unix traditionnelles qui marchent partout. Elles font en gros la même chose mais de manière beaucoup plus basique : si on n'appelle pas passwd nous-même, le compte ne sera pas activé et n'aura pas de mot de passe.


addgroup : ajouter un groupe

Chaque utilisateur appartient à un groupe.
Si on ne définit rien, un groupe du même nom que l'utilisateur sera automatiquement créé. Ainsi, alain appartient au groupe alain, et nicolas au groupe nicolas.

Dans ce cas, on peut le vérifier en regardant à qui appartiennent les dossiers dans /home via un ls -l :

Code : Console

root@alain-pc01:~# cd /home
root@alain-pc01:/home# ls -l
total 24
drwx------2rootroot163842007-09-1918:22lost+found
drwxr-xr-x65alainalain40962007-11-1522:40alain
drwxr-xr-x2nicolasnicolas40962007-11-1523:00nicolas

La 3ème colonne indique le propriétaire du fichier ou dossier, et la 4ème indique le groupe qui possède ce fichier ou dossier.
Ainsi, le dossier alain appartient à l'utilisateur alain et au groupe alain.
De même pour nicolas.
On constate par ailleurs que lost+found appartient à root, et qu'il y a un groupe root (root fait donc partie du groupe root).

On peut très bien avoir ce type de fonctionnement (un utilisateur = un groupe). Mais si par exemple, il y a beaucoup d'utilisateurs, mieux vaudra créer des groupes.

addgroup : créer un groupe

La commande addgroup crée un nouveau groupe. On a juste besoin de spécifier le nom du groupe en paramètre :

Code : Console

root@alain-pc01:~# cd /home
root@alain-pc01:/home# addgroup amis
Ajout du groupe « amis » (identifiant 1002)…
Terminé.

Reste à y rattacher un ou des utilisateurs.

usermod : modifier un utilisateur

La commande usermod permet d'éditer un utilisateur. Elle possède plusieurs paramètres, on va en retenir 2 :
  • -l : renomme l'utilisateur (le nom de son répertoire personnel ne sera pas changé par contre)
  • -g : change de groupe
Pour mettre nicolas dans le groupe amis, je fais comme ceci :

Code : Console

usermod -g amis nicolas

Et pour remettre nicolas dans le groupe nicolas :

Code : Console

usermod -g nicolas nicolas

alt Il est aussi possible qu'un utilisateur appartienne à plusieurs groupes. Pour cela, utiliser le paramètre -G (majuscule).
Exemple : usermod -G amis,bordeaux,collegues nicolas
Séparer les noms des groupes par une virgule, sans espace entre chaque nom de groupe.
alt Faire très attention en utilisant usermod ! Lorsqu'on utilise -G, l'utilisateur change de groupe peu importe les groupes auxquels il appartenait auparavant.
Si on veut ajouter des groupes à un utilisateur (sans perdre les groupes auxquels il appartenait auparavant), utiliser -a :
usermod -aG amis patrick

delgroup : supprimer un groupe

Pour supprimer un groupe :

Code : Console

delgroup amis

alt addgroup et delgroup n'existent pas ailleurs que sous Debian et ses dérivés (même remarque que pour adduser et deluser).
Les commandes "traditionnelles" qui marchent partout sont groupadd et groupdel, mais elles offrent moins d'options.


chown : changer le propriétaire d'un fichier

Seul root peut changer le propriétaire d'un fichier.
Par exemple, alain possède dans son répertoire personnel un fichier appelé "rapport.txt". Si on fait ls -l pour ce fichier :

Code : Console

alain@alain-pc01:~$ ls -l rapport.txt
-rw-r--r-- 1 alain alain 0 2007-11-15 23:14 rapport.txt

alt Petite astuce : comme on le voit, si on précise un nom de fichier en dernier paramètre de la commande ls, on ne verra que ce fichier dans les résultats.
Le joker * est là aussi utilisable : ls -l *.jpg afficherait uniquement les images JPEG contenues dans ce dossier.

On veut "donner" ce fichier à nicolas. On va utiliser la commande chown.

chown : changer le propriétaire d'un fichier

La commande chown, qui doit être utilisée en tant que root, attend 2 paramètres au moins :
  • Le nom du nouveau propriétaire
  • Le nom du fichier à modifier

Code : Console

chown nicolas rapport.txt

On peut voir ensuite que nicolas est bien le nouveau propriétaire du fichier :

Code : Console

root@alain-pc01:/home/alain# ls -l rapport.txt
-rw-r--r-- 1 nicolas alain 0 2007-11-15 23:14 rapport.txt

Seulement, il appartient toujours au groupe alain !

chgrp : changer le groupe propriétaire d'un fichier

chgrp s'utilise exactement de la même manière que chown, à la différence près qu'il affecte cette fois le groupe propriétaire d'un fichier.

Code : Console

chgrp amis rapport.txt

… affectera le fichier rapport.txt au groupe "amis".
Vérifions avec ls -l que rapport.txt appartient désormais à nicolas et au groupe amis :

Code : Console

root@alain-pc01:/home/alain# ls -l rapport.txt
-rw-r--r-- 1 nicolas amis 0 2007-11-15 23:14 rapport.txt

chown peut aussi changer le groupe propriétaire d'un fichier !

Code : Console

chown nicolas:amis rapport.txt

… affectera le fichier à l'utilisateur nicolas et au groupe amis.
Il suffit de séparer par un symbole deux-points ":" le nom du nouvel utilisateur (à gauche) et le nom du nouveau groupe (à droite).

-R : affecter récursivement les sous-dossiers

Très utile aussi, l'option -R de chown. Elle modifie tous les sous-dossiers et fichiers contenus dans un dossier pour y affecter un nouvel utilisateur (et un nouveau groupe si on utilise la technique du deux-points qu'on vient de voir).

Par exemple, si je veux donner tout le contenu du dossier personnel de nicolas à alain (et au groupe alain), c'est très simple :

Code : Console

chown -R alain:alain /home/nicolas/

Résultat :

Code : Console

root@alain-pc01:~# cd /home
root@alain-pc01:/home# ls -l
total 24
drwx------2rootroot163842007-09-1918:22lost+found
drwxr-xr-x62alainalain40962007-11-1522:40alain
drwxr-xr-x2alainalain40962007-11-1523:00nicolas

Tous les fichiers à l'intérieur du dossier de nicolas appartiennent maintenant aussi à alain.


chmod : modifier les droits d'accès

Le fonctionnement des droits

Chaque fichier et chaque dossier possèdent une liste de droits. C'est une liste qui dit qui a le droit de voir le fichier, de le modifier et de l'exécuter.

Quand on fait ls -l, la liste de droits, c'est la première colonne :

Code : Console

root@alain-pc01:~# cd /home
root@alain-pc01:~$ ls -l
total 40
drwxr-xr-x2alainalain40962007-09-1918:22Desktop
drwxr-xr-x2alainalain40962007-11-1522:40Documents
lrwxrwxrwx1alainalain262007-11-1523:00Examples -> /usr/share/example-content
drwxr-xr-x2alainalain40962007-11-1523:00images

On peut voir 5 lettres différentes. Voici leurs significations :
  • d (Directory) : indique si l'élément est un dossier.
  • l (Link) : indique si l'élément est un lien (raccourci).
  • r (Read) : indique si on peut lire l'élément.
  • w (Write) : indique si on peut modifier et supprimer l'élément.
  • x (eXecute) : si c'est un fichier, "x" indique qu'on peut l'exécuter. Ce n'est utile que pour les fichiers exécutables (programmes et scripts).
    Si c'est un dossier, "x" indique qu'on peut le "traverser", c'est-à-dire qu'on peut voir les sous-dossiers qu'il contient si on a le droit de lecture dessus.
Si il y a une lettre, c'est que le droit existe. S'il y a un tiret à la place, c'est qu'il n'y a pas de droit.
Les droits sont découpés en fonction des utilisateurs :
droits sur un fichier

Le premier élément ("d") mis à part, on constate que r, w et x sont répétés 3 fois en fonction des utilisateurs :
  • Le premier triplet rwx indique les droits que possède le propriétaire du fichier sur ce fichier.
  • Le second triplet rwx indique les droits que possèdent les autres membres du groupe sur ce fichier.
  • Enfin, le dernier triplet rwx indique les droits que possèdent tous les autres utilisateurs de la machine sur ce fichier.
Prenons un cas concret, le fichier rapport.txt :

Code : Console

root@alain-pc01:~$ ls -l rapport.txt
-rw-r--r-- 1 alain alain 0 2007-11-15 23:14 rapport.txt

Ses droits sont : -rw-r--r--
  • - : le premier tiret indique qu'il ne s'agit pas d'un dossier. S'il y avait eu un "d" à la place, cela aurait indiqué qu'il s'agissait d'un dossier.
  • rw- : indique que le propriétaire du fichier, peut lire et modifier (et donc supprimer) le fichier. En revanche, il ne peut pas l'exécuter car il n'a pas de x à la fin. Rappel : quiconque peut modifier un fichier a aussi le droit de le supprimer.
  • r-- : tous les gens qui font partie du groupe "alain" mais qui ne sont pas "alain" peuvent seulement lire le fichier. Ils ne peuvent ni le modifier, ni l'exécuter. Avoir un nom de groupe identique au nom d'utilisateur peut embrouiller : si on est aussi bien organisé que sur le premier schéma, on parlerait plutôt du groupe "famille".
  • r-- : tous les autres (ceux qui ne font pas partie du groupe "alain") peuvent seulement lire le fichier.
En résumé, ces droits nous apprennent que l'élément est un fichier, que alain peut le lire et le modifier, et que tous les autres utilisateurs peuvent seulement le lire.

Nota. root a TOUS les droits. Il peut tout faire : lire, modifier, exécuter n'importe quel fichier.

chmod : modifier les droits d'accès

Modifier les droits d'accès avec la commande chmod.
Important : contrairement aux commandes précédentes, pas besoin d'être root pour utiliser chmod. On doit juste être propriétaire du fichier dont on veut modifier les droits d'accès.

chmod est un petit peu délicat à utiliser. En effet, on peut attribuer les droits sur un fichier / dossier via plusieurs méthodes différentes, la plus courante étant celle des chiffres.

Attribuer des droits avec des chiffres (chmod absolu)
On attribue un chiffre à chaque droit :
DroitChiffre
r4
w2
x1

Pour combiner ces droits, il va falloir additionner les chiffres correspondants.
Ainsi, pour attribuer le droit de lecture et de modification, il faut additionner 4 + 2, ce qui donne 6. Le chiffre 6 signifie donc "Droit de lecture et d'écriture".

Voici la liste des droits possibles et la valeur correspondante :
DroitChiffreCalcul
---00 + 0 + 0
r--44 + 0 + 0
-w-20 + 2 + 0
--x10 + 0 + 1
rw-64 + 2 + 0
-wx30 + 2 + 1
r-x54 + 0 + 1
rwx74 + 2 + 1
Avec ça, on peut calculer la valeur d'un triplet de droits. Il faut faire le même calcul pour les droits qu'on veut attribuer au propriétaire, au groupe et aux autres.

Par exemple, "640" indique les droits du propriétaire, du groupe et des autres (dans l'ordre).
  • 6 : droit de lecture et d'écriture pour le propriétaire.
  • 4 : droit de lecture pour le groupe.
  • 0 : aucun droit pour les autres.
Le droit maximal qu'on puisse donner à tout le monde est 777 : droit de lecture, d'écriture et d'exécution pour le propriétaire, pour son groupe et pour tous les autres.
Au contraire, avec un droit de 000, personne ne peut rien faire. A part root bien sûr.

Pour changer les droits sur le fichier rapport.txt, et être le seul autorisé à le lire et l'éditer, je dois exécuter cette commande :

Code : Console

chmod 600 rapport.txt

On peut vérifier avec ls -l :

Code : Console

alain@alain-pc01:~$ ls -l rapport.txt
-rw------- 1 alain alain 0 2007-11-15 23:14 rapport.txt

Attribuer des droits avec des lettres (chmod relatif)
Autre moyen de modifier les droits d'un fichier. Il revient un peu au même mais permet parfois de paramétrer plus finement, droit par droit.
Dans ce mode, il faut savoir que :
  • u = user (propriétaire)
  • g = group (groupe)
  • o = other (autres)
… et que :
  • + signifie "ajouter le droit".
  • - signifie "supprimer le droit".
  • = signifie "affecter le droit".
Avec ça :

Code : Console

chmod g+w rapport.txt

Signifie : "Ajouter le droit d'écriture au groupe".

Code : Console

chmod o-r rapport.txt

Signifie : "Enlever le droit de lecture aux autres".

Code : Console

chmod u+rx rapport.txt

Signifie : "Ajouter les droits de lecture et d'exécution au propriétaire".

Code : Console

chmod g+w,o-w rapport.txt

Signifie : "Ajouter le droit d'écriture au groupe et l'enlever aux autres".

Code : Console

chmod go-r rapport.txt

Signifie : "Enlever le droit de lecture au groupe et aux autres".

Code : Console

chmod +x rapport.txt

Signifie : "Ajouter le droit d'exécution à tout le monde".

Code : Console

chmod u=rwx,g=r,o=- rapport.txt

Signifie : "Affecter tous les droits au propriétaire, juste la lecture au groupe, rien aux autres".

Et toujours… -R pour affecter récursivement
Le paramètre -R existe aussi dans chmod. Si on affecte des droits sur un dossier avec -R, tous ses fichiers et sous-dossiers récupèreront le même droit.

Si je veux être le seul à pouvoir lire, éditer et exécuter les fichiers de mon répertoire personnel et de tous ses fichiers, j'ai juste besoin d'écrire :

Code : Console

chmod -R 700 /home/alain

Tout simplement.