Aller au contenu

Paramètres des cookies

Choisissez, par catégorie, les cookies que vous autorisez. Vous pouvez modifier votre choix à tout moment via Paramètres des cookies, en bas de chaque page. Politique de confidentialité

Nécessaires

Toujours activés

Indispensables pour vous connecter, conserver votre panier et mémoriser vos choix. Ils sont toujours activés.

Quels cookies ?
  • weboke_sessie, weboke_klant, weboke_remember: votre session et le maintien de la connexion
  • weboke_basket: votre panier
  • wkBtwIncl: l'affichage des prix TTC ou HT
  • wok_cookies: votre choix concernant les cookies, 12 mois

Mesure quelle publicité mène à une visite ou à une commande, pour que nous ne payions pas des publicités inefficaces.

Quels cookies ?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), jusqu'à 90 jours
  • OpenAI Ads, publicités dans ChatGPT
  • wok_aff: le partenaire qui vous a orienté vers nous (programme d'affiliation), 60 jours

4,6

Pays et langue

Chaque pays a son propre site, avec les prix et la TVA de ce pays.

Afficher

Module 3 · 3.1

Utilisateurs, groupes et droits sur les fichiers

Module 3: Utilisateurs, droits et sudo · Temps de lecture : 12 minutes

Objectif pédagogique : À l'issue de cette leçon, vous saurez créer et consulter des utilisateurs et des groupes, lire les droits d'un fichier ou d'un dossier dans ls -l, et les corriger avec chmod et chown sans tout ouvrir à tout le monde.

Notions clés : root (UID 0), utilisateur ordinaire, utilisateur système, /etc/passwd, /etc/shadow, groupe, adduser, id, rwx, propriétaire, groupe, autres, octal (644, 755, 600), chmod, chown, umask, setuid, 777

Chacun est un numéro

Linux a été conçu dès le départ pour plusieurs utilisateurs sur une même machine. Chaque processus en cours d'exécution tourne au nom d'un utilisateur, et chaque fichier a un propriétaire. Pour le système, un utilisateur est avant tout un numéro, l'UID :

  • root a l'UID 0. Root peut tout faire : lire et modifier n'importe quel fichier, arrêter n'importe quel service, créer n'importe quel utilisateur. Il n'y a pas de « êtes-vous sûr ? ».
  • Les utilisateurs ordinaires, comme anna, reçoivent sur Debian et Ubuntu un UID à partir de 1000. Ils peuvent écrire dans leur propre dossier personnel, et pas grand-chose d'autre.
  • Les utilisateurs système ont un numéro bas et, le plus souvent, ni mot de passe ni shell. Les services tournent sous un tel utilisateur : nginx sous www-data, PostgreSQL sous postgres. Si un tel service est piraté, l'intrus n'obtient que les droits de cet utilisateur, et non ceux de root.

Pour savoir qui vous êtes, utilisez id :

anna@web1:~$ id
uid=1000(anna) gid=1000(anna) groups=1000(anna),27(sudo),100(users)

Anna a l'UID 1000, son propre groupe anna, et fait aussi partie des groupes sudo et users.

Où se trouvent les utilisateurs

La liste des utilisateurs se trouve dans /etc/passwd, une ligne par utilisateur :

anna@web1:~$ grep -E '^(root|www-data|anna):' /etc/passwd
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
anna:x:1000:1000:Anna,,,:/home/anna:/bin/bash

Les champs, séparés par des deux-points : nom, x (le mot de passe est stocké ailleurs), UID, groupe principal, description, dossier personnel, shell. Pour www-data, le shell est /usr/sbin/nologin : impossible de se connecter.

Les mots de passe eux-mêmes sont stockés, chiffrés (hachés), dans /etc/shadow. Seul root peut lire ce fichier. Un ! ou un * au début du champ du mot de passe signifie : la connexion par mot de passe est impossible. C'est ainsi que root est verrouillé par défaut sur Ubuntu, et sur Debian si vous n'avez pas indiqué de mot de passe root lors de l'installation.

Créer des utilisateurs et des groupes

Sur Debian et Ubuntu, vous utilisez la commande conviviale adduser :

root@web1:~# adduser anna
info: Adding user `anna' ...
info: Adding new group `anna' (1000) ...
info: Adding new user `anna' (1000) with group `anna (1000)' ...
info: Creating home directory `/home/anna' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
...

adduser crée l'utilisateur, un groupe personnel du même nom et un dossier personnel, puis demande un mot de passe. La commande de plus bas niveau useradd existe aussi (et c'est la commande habituelle sur AlmaLinux et Rocky Linux), mais sans options elle en fait moins : pas de mot de passe et, sur certains systèmes, pas de dossier personnel.

Un groupe permet d'accorder des droits à plusieurs utilisateurs à la fois. Pour ajouter un utilisateur à un groupe :

root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna     # identique, fonctionne partout

Attention au -a dans usermod : sans -a, vous remplacez tous les groupes supplémentaires de l'utilisateur par ce seul groupe. Un nouveau groupe ne prend effet qu'après une nouvelle connexion.

Pour bloquer un compte sans le supprimer (par exemple celui d'un ancien collègue) :

root@web1:~# usermod -L -e 1 jan

-L verrouille le mot de passe, -e 1 fait expirer le compte. Attention : un mot de passe verrouillé n'empêche pas toujours la connexion par clé SSH. Supprimez donc aussi les clés dans /home/jan/.ssh/authorized_keys (leçon 2.3) ; en revanche, sshd refuse bien un compte expiré (-e 1).

Lire les droits

anna@web1:~$ ls -l /var/www/example.com
total 12
-rw-r--r-- 1 anna     www-data  1520 Nov  9 10:12 index.html
-rw-r----- 1 anna     www-data   412 Nov  9 10:14 config.php
drwxr-xr-x 2 anna     www-data  4096 Nov  9 10:15 images
drwxrwxr-x 2 www-data www-data  4096 Nov  9 10:20 uploads

Le premier bloc de dix caractères est la clé de tout :

  • Caractère 1 : le type. - est un fichier ordinaire, d un dossier (directory), l un raccourci (symlink).
  • Caractères 2 à 4 : ce que le propriétaire peut faire.
  • Caractères 5 à 7 : ce que le groupe peut faire.
  • Caractères 8 à 10 : ce que les autres (tout le monde) peuvent faire.

Viennent ensuite le nombre de liens, le propriétaire, le groupe, la taille et la date.

Pour un fichier, les lettres signifient :

LettreSignification pour un fichier
rlire
wmodifier
xexécuter comme programme ou script

Et pour un dossier, c'est légèrement différent :

LettreSignification pour un dossier
rafficher les noms des fichiers du dossier
wcréer, renommer et supprimer des fichiers dans le dossier
xentrer dans le dossier et ouvrir les fichiers qu'il contient

Ce dernier point surprend beaucoup de monde. Sans x sur un dossier, vous n'accédez pas aux fichiers qu'il contient, même s'ils sont eux-mêmes lisibles. Et quiconque a w sur un dossier peut y supprimer des fichiers, même s'ils appartiennent à quelqu'un d'autre.

Dans l'exemple : index.html est lisible par tous ; config.php (avec le mot de passe de la base de données) peut être lu et modifié par Anna, seulement lu par le groupe www-data (donc le serveur web), et rien du tout par les autres. Dans uploads, le serveur web peut écrire, car c'est là qu'arrivent les fichiers envoyés par les visiteurs.

Les droits sous forme de nombre

Les droits s'écrivent souvent sous forme de trois chiffres, le nombre octal. Chaque lettre a une valeur : r = 4, w = 2, x = 1. Additionnez-les pour chaque catégorie :

DroitsNombreUsage
rw-r--r--644fichier ordinaire lisible par tous
rw-r-----640fichier pour le propriétaire et le groupe, comme une configuration contenant un mot de passe
rw-------600fichier secret, comme authorized_keys ou une clé privée
rwxr-xr-x755dossier ou programme utilisable par tous
rwx------700dossier privé, comme ~/.ssh

Modifier les droits : chmod et chown

anna@web1:~$ chmod 640 /var/www/example.com/config.php
anna@web1:~$ chmod g+w /var/www/example.com/uploads
root@web1:~# chown anna:www-data /var/www/example.com/config.php

chmod modifie les droits, avec un nombre ou avec des lettres (u, g, o pour propriétaire, groupe, autres ; + ou - suivi de la lettre). chown eigenaar:groep modifie le propriétaire et le groupe ; seul root peut le faire. Avec -R, les deux commandes s'appliquent à tout un dossier, et c'est souvent là que les choses tournent mal : chmod -R 644 sur un dossier rend tous les sous-dossiers inutilisables, car les dossiers ont besoin de x. Pour toute une arborescence, utilisez plutôt find :

root@web1:~# find /var/www/example.com -type d -exec chmod 755 {} +
root@web1:~# find /var/www/example.com -type f -exec chmod 644 {} +

Jamais 777

« Ça ne marchait pas, alors j'ai mis 777. » 777 signifie : tout le monde sur le serveur peut lire, modifier et exécuter ceci. Si un jour un seul service ou un seul site de votre serveur est compromis, l'intrus peut écrire partout où il y a 777, y compris dans vos fichiers PHP. Le vrai problème est presque toujours le propriétaire ou le groupe : donnez au serveur web, via le groupe, exactement le droit dont il a besoin, et uniquement sur le dossier où il en a besoin.

Droits par défaut et bits spéciaux

Les nouveaux fichiers reçoivent leurs droits via l'umask. Avec l'umask courant 022, les nouveaux fichiers sont en 644 et les nouveaux dossiers en 755. Vous voyez votre umask avec la commande umask.

Vous verrez parfois un s à la place d'un x, comme pour /usr/bin/passwd (-rwsr-xr-x). C'est le bit setuid : le programme s'exécute avec les droits de son propriétaire (root), même si c'est un utilisateur ordinaire qui le lance. C'est nécessaire pour quelques programmes système, mais ne le placez jamais vous-même sur un script. Un fichier setuid inattendu est un signe connu d'intrusion ; avec find / -perm -4000 -type f 2>/dev/null, vous les voyez tous.

Sur AlmaLinux et Rocky Linux

adduser y est un autre nom de useradd ; utilisez useradd -m anna puis passwd anna. Pour ajouter des groupes, utilisez usermod -aG. SELinux ajoute une couche supplémentaire en plus des droits vus dans cette leçon : un fichier avec les bons droits peut tout de même être refusé s'il porte le mauvais label SELinux (ls -Z l'affiche).

Résumé

  • Chaque utilisateur a un UID ; root (0) peut tout faire, les services tournent sous leurs propres utilisateurs système, sans shell.
  • Les utilisateurs se trouvent dans /etc/passwd, les hachages des mots de passe dans /etc/shadow. Créez les utilisateurs avec adduser et ajoutez des groupes avec usermod -aG.
  • ls -l affiche le type, les droits du propriétaire, du groupe et des autres, puis le propriétaire et le groupe. Pour un dossier, x signifie entrer et w créer et supprimer des fichiers.
  • Nombres courants : 644 et 755 pour ce qui est public, 640 pour une configuration contenant des secrets, 600 et 700 pour ce qui est privé. Jamais 777.
  • Utilisez find pour définir les droits sur toute une arborescence ; surveillez les fichiers setuid.

Quiz

1. Que signifie -rw-r----- pour un fichier dont le propriétaire est anna et le groupe www-data ?



2. Que se passe-t-il si un dossier a les droits drw-r--r-- (donc aucun x) ?



3. Vous exécutez usermod -G www-data anna (sans -a). Quelle en est la conséquence ?



4. Une extension ne parvient pas à écrire dans /var/www/example.com/uploads. Quelle est la meilleure solution ?



5. Pourquoi nginx tourne-t-il sous l'utilisateur www-data et non sous root ?



Exercice

Exercice Z3.1 : Lire les droits. Ouvrez le fichier d'exemple rechten-1.txt : la sortie de id pour trois utilisateurs et de ls -l dans un dossier web. Pour chaque question, indiquez qui peut faire quoi (par exemple : « le serveur web peut-il modifier config.php ? », « quel fichier a des droits trop larges ? », « quel nombre correspond à .env ? »). Le programme compare vos réponses à la clé de correction et explique pour chaque question pourquoi.

Exercice Z3.1: Lire les droits

Fichier pour cet exercice : rechten-1.txt










Nous ne conservons pas ce que vous saisissez ni ce que nous trouvons. Votre navigateur mémorise vos réponses et si l'exercice est réussi. Si vous êtes connecté, nous enregistrons uniquement dans Mes formations que l'exercice était (presque) correct ; vous pouvez aussi le supprimer à cet endroit.

Pour aller plus loin

Les étapes décrites dans ces articles s'appliquent aux offres d'hébergement et aux VPS de WebOké ; chez d'autres fournisseurs, le fonctionnement est comparable.

Un instant…

Configurez vos domaines

Pour chaque domaine, réglez les serveurs de noms, l'association à votre hébergement et le futur titulaire.

Chargement de vos domaines…