Chaque « permission refusée » a une bonne réponse et une réponse dangereuse. La dangereuse est 777 : elle marche toujours, et elle signifie que n'importe quel processus du serveur peut réécrire votre code.
Ce que sont les trois chiffres
Le propriétaire, le groupe, tous les autres. Lire vaut 4, écrire 2, exécuter 1, et ils s'additionnent : 6, c'est lire et écrire ; 7, c'est les trois.
- 644 sur un fichier — le propriétaire écrit, tout le monde lit.
- 755 sur un répertoire — le propriétaire écrit, tout le monde peut entrer et lister.
- 600 sur un secret — le propriétaire, et absolument personne d'autre.
Ce dont un site a besoin
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod 600 wp-config.php
Les répertoires ont besoin du droit d'exécution pour être traversés ; les fichiers n'en ont aucun besoin. Un fichier PHP en 755 n'est pas plus exécutable — le serveur web le lit, il ne le lance pas comme un programme.
C'est le propriétaire qui est généralement faux
L'erreur ne vient souvent pas des droits mais du propriétaire. Si PHP tourne sous un utilisateur et que les fichiers appartiennent à un autre, aucun mode inférieur à 777 n'y fera rien — et la bonne correction, c'est le propriétaire.
ps aux | grep php-fpm | head -2
chown -R youruser:youruser /path/to/site
Empêchez les envois de s'exécuter
location ~* /uploads/.*\.php$ {
deny all;
}