Lire et définir correctement les droits des fichiers sur votre VPS
Chaque fichier et chaque dossier de votre VPS possède un propriétaire, un groupe et des droits. S'ils sont trop permissifs, un site web ou un service piraté peut écrire n'importe où. S'ils sont trop restrictifs, vous obtenez des erreurs comme « Permission denied » ou une erreur 403 sur votre site. Vous découvrirez ici comment lire les droits et les définir correctement. Si vous disposez d'un hébergement avec DirectAdmin, consultez Interdit (403) : vous n'avez pas l'autorisation d'accéder à / sur ce serveur.
Lire les droits avec ls -l
ls -l /var/www/example.com -rw-r--r-- 1 anna www-data 1520 index.html -rw-r----- 1 anna www-data 412 config.php drwxr-xr-x 2 anna www-data 4096 images drwxrwxr-x 2 www-data www-data 4096 uploads
Le premier caractère indique le type : - est un fichier, d un dossier, l un lien symbolique. Viennent ensuite trois groupes de trois caractères : ce que le propriétaire peut faire, ce que le groupe peut faire et ce que tous les autres peuvent faire. Suivent le propriétaire (anna) et le groupe (www-data).
| Lettre | Pour un fichier | Pour un dossier |
|---|---|---|
r | Lire | Afficher les noms contenus dans le dossier |
w | Modifier | Créer, renommer et supprimer des fichiers |
x | Exécuter en tant que programme | Entrer dans le dossier et ouvrir les fichiers qu'il contient |
Faites attention à deux points. Sans x sur un dossier, vous ne pouvez pas accéder aux fichiers qu'il contient, même s'ils sont lisibles. Et quiconque dispose de w sur un dossier peut y supprimer des fichiers, même s'ils appartiennent à quelqu'un d'autre.
Les droits sous forme de nombre
On écrit souvent les droits sous forme de trois chiffres : r vaut 4, w 2 et x 1, additionnés pour chaque groupe.
| Nombre | Droits | Utilisation |
|---|---|---|
| 644 | rw-r--r-- | Fichier ordinaire, par exemple une page web ou une image |
| 755 | rwxr-xr-x | Dossier, ou programme que tout le monde peut utiliser |
| 640 | rw-r----- | Configuration contenant un mot de passe, lisible par le serveur web via le groupe |
| 600 | rw------- | Fichier secret, comme authorized_keys, une clé privée ou un fichier .env |
| 700 | rwx------ | Dossier privé, comme ~/.ssh |
Modifier les droits et le propriétaire
chmod 640 /var/www/example.com/config.php chmod g+w /var/www/example.com/uploads sudo 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 et autres, avec + ou -). chown eigenaar:groep modifie le propriétaire et le groupe ; seul root peut le faire, donc avec sudo.
Pour un dossier entier, chmod -R 644 est une erreur courante : tous les sous-dossiers perdent alors leur x et deviennent inutilisables. Définissez séparément les droits des dossiers et des fichiers avec find :
sudo find /var/www/example.com -type d -exec chmod 755 {} +
sudo find /var/www/example.com -type f -exec chmod 644 {} +
Le serveur web via le groupe
Sous Debian et Ubuntu, nginx et PHP-FPM s'exécutent par défaut sous l'utilisateur www-data. Une organisation propre : vous êtes propriétaire des fichiers, le groupe est www-data. Le serveur web peut alors lire via le groupe, et écrire uniquement dans le dossier où c'est vraiment nécessaire, comme uploads (chmod g+w ou propriétaire www-data sur ce seul dossier). Ne donnez pas au serveur web le droit d'écriture sur vos fichiers PHP.
777. Dans ce cas, n'importe qui sur le serveur peut lire, modifier et exécuter le fichier ou le dossier. Si un seul site web ou service est un jour compromis, l'intrus peut écrire partout où 777 est appliqué. Le vrai problème vient presque toujours du propriétaire ou du groupe : corrigez cela plutôt que de tout ouvrir.Droits pour SSH
Le serveur SSH vérifie les droits de vos clés. Si d'autres utilisateurs peuvent écrire dans votre dossier .ssh ou dans votre dossier personnel, il ignore votre clé et vous demande de nouveau un mot de passe, sans message d'erreur clair. Définissez les droits ainsi :
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
Si vous avez créé le dossier en tant que root pour un autre utilisateur, corrigez également le propriétaire, comme dans Un utilisateur dédié avec sudo. Sous AlmaLinux et Rocky Linux, SELinux peut aussi refuser un fichier qui possède pourtant les bons droits ; pour un dossier .ssh créé manuellement, restorecon -Rv ~/.ssh résout le problème.
s à la place d'un x, comme pour /usr/bin/passwd ? Il s'agit du bit setuid : le programme s'exécute alors avec les droits de son propriétaire. Quelques programmes système en ont besoin, mais ne l'appliquez jamais vous-même à un script. Un fichier setuid inattendu peut indiquer une intrusion, consultez Piraté ? Les premières étapes.Vous souhaitez en savoir plus ? Suivez le cours gratuit VPS et administration de serveurs Linux, leçon 3.1 Utilisateurs, groupes et droits des fichiers.
