web-dev-qa-db-fra.com

Lors de la création d'un site Web, quelles autorisations et structure de répertoires?

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:

  • Meilleure combinaison de uid/gid/other (noms et octets)
  • Relativement sécurisé (ne doit pas nécessairement être trop paranoïaque)
  • Facile à utiliser/à entretenir (les CMS peuvent se mettre à jour automatiquement, aucun problème de permission)

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.

6
Dan Simmons

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:

  • Nginx s'exécutant en tant que www-data (groupe www-data): en lecture seule
  • php-fpm s'exécutant en tant que www-data (groupe www-data): lecture et écriture
    (si vous souhaitez autoriser des opérations comme chmod, 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!)
  • sftp/SSH: autorisations complètes
  • Autres utilisateurs: pas d'autorisations de lecture et d'écriture

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.

  • Propriétaire: votre utilisateur SSH
  • Groupe: www-data
  • Autorisations pour les fichiers: rw-rw ---- (0660)
  • Autorisations pour les répertoires: rwxrwx --- (2770) Le bit d'exécution (2) est nécessaire pour descendre dans un répertoire. Exécutez info coreutils 'file permissions' pour obtenir plus d'informations sur ce bit
  • umask 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.

4
Lekensteyn