Je pose cette question parce que je n'ai toujours pas trouvé de méthode uniforme qui me passionne particulièrement. Idéalement, cette combinaison de structure de répertoire et d'autorisations devrait convenir à tout serveur Web (ne supposons pas Apache). Je devrais également mentionner que je ne concerne que les serveurs * nix.
Je recherche principalement:
Pour information, la pile actuelle sur laquelle je travaille est Ubuntu 11.04 + Nginx + php-fpm + Wordpress, bien que la solution idéale devrait fonctionner pour tout site Web.
Des autorisations peuvent être accordées sur le propriétaire, le groupe et d'autres.
Tout d'abord, décidez quelles autorisations sont nécessaires et quels utilisateurs sont impliqués:
www-data
(groupe www-data
): en lecture seulewww-data
(groupe www-data
): lecture et écriturechmod
, vous devez exécuter php-fpm
en tant qu'utilisateur SFTP. Attention: si quelqu'un peut exécuter une commande sur votre serveur à partir de PHP, il/elle sera capable de modifier vos fichiers aussi, comme .bashrc
!)Seul le propriétaire d'un fichier/répertoire peut modifier les autorisations et il est préférable d'octroyer ce droit à l'utilisateur SSH. Pourquoi? Parce que c’est idiot que vous ne puissiez pas modifier vos propres fichiers dans la racine Web et tout faire en tant que root est une mauvaise idée.
Les utilisateurs normaux ne peuvent pas changer le groupe d’un fichier/répertoire, seul root peut le faire. Un bit SETGID spécial fait en sorte que chaque fichier et répertoire d'un répertoire hérite du groupe. Avec les autorisations appropriées définies, php-fpm et l'utilisateur SSH peuvent modifier les fichiers.
www-data
info coreutils 'file permissions'
pour obtenir plus d'informations sur ce bitumask 007
afin que le propriétaire et le groupe puissent écrire dans des fichiers/répertoires sans que les autres utilisateurs obtiennent des autorisations.En supposant que votre racine Web se trouve à l'adresse /var/www/website1
, modifiez le propriétaire/groupe et les autorisations en exécutant:
Sudo chown -R your_ssh_user_here:www-data /var/www/website1
Sudo find /var/www/website1 -type f -exec chmod 660 {} \;
Sudo find /var/www/website1 -type d -exec chmod 2770 {} \;
Ajoutez-vous au groupe www-data
:
Sudo usermod -a -G www-data your_ssh_user_here
Vous devez vous reconnecter pour devenir membre du groupe.
Une configuration supplémentaire est nécessaire pour garantir que les sites Web ne peuvent pas accéder à d'autres fichiers si php-fpm
est exécuté en tant que même utilisateur.