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
777 sur un répertoire d'envois, plus un serveur qui y exécute PHP : voilà comment on prend un site. Quelqu'un dépose un fichier puis demande au serveur de le lancer. Les envois ne doivent jamais s'exécuter.

Empêchez les envois de s'exécuter

location ~* /uploads/.*\.php$ {
    deny all;
}
Si une extension exige 777 pour fonctionner, c'est un renseignement sur l'extension. Donnez-lui 775 avec le bon groupe, et adressez-vous à son auteur.