Question

Je prépare à déployer un site Drupal 7 et je ne peux trouver aucune documentation sur ce que le fichier de sécurité conscient recommandées et les autorisations du répertoire doivent être réglés sur.

Plus précisément default/files/ (également les sous-répertoires?), settings.php, .htaccess et tout ce que je devrais être au courant.

Était-ce utile?

La solution

Votre serveur web doit être capable de lire tous les fichiers, mais pas écrire. Si votre site implique fichiers puis télécharger donner la permission du serveur d'écriture à ce dossier un seul.

Plus d'informations sur la façon de mettre en place que, ainsi que certaines choses qui peuvent se produire si vous ne le faites pas, est disponible dans le Drupal docs .

Autres conseils

comme Drupal tant est très long et confus. Mais il contient ce message par Jason, qui a mis le doigt sur la tête:

  

Publié par Vente Jason le 1er Novembre 2010 à 12h40

     

Merci pour écrire cela et tout, mais tout ce que je et 99% des gens qui lisent cette page est vraiment veux une liste de numéros à côté d'une liste des dossiers.

     
      
  • /default sur 755
  •   
  • /default/files y compris tous les sous-dossiers et fichiers sur 744 (ou 755)
  •   
  • /default/themes y compris tous les sous-dossiers et fichiers sur 755
  •   
  • /default/modules y compris tous les sous-dossiers et fichiers sur 755
  •   
  • /default/settings.php et /default/default.settings.php sur 444
  •   

Ma pratique autour de la création d'un nouveau site Drupal sur un serveur est d'avoir un utilisateur qui fait partie du groupe de serveurs (généralement Apache) Web, et ont cet utilisateur possède tous les fichiers Drupal. Sur Ubuntu, ce sont les commandes pour obtenir cette mise en place:

# Create a new example user, setting up /var/www/example as their home dir.
useradd -s /bin/bash -d /var/www/example -m example

# Now add that user to the Apache group. On Ubuntu/Debian this group is usually
# called www-data, on CentOS it's usually apache.
usermod -a -G www-data example

# Set up a password for this user.
passwd example

Une fois que j'ai cet ensemble, je vais vous connecter en tant que utilisateur et installer Drupal dans / var / www / exemple / docroot ou similaire, puis créez le répertoire des fichiers manuellement et copiez le fichier settings.php. Étant donné que nous enregistrons dans notre exemple utilisateur avant de copier dans Drupal, notre propriété des fichiers et les autorisations doivent être automatiquement configurés correctement sur tous les fichiers de base de Drupal et des scripts (y compris les fichiers .htaccess).

su - example
cd docroot
cp sites/default/default.settings.php sites/default/settings.php

# Temporarily give the web server write permissions to settings.php
chgrp www-data sites/default/settings.php
chmod g+w sites/default/settings.php

Maintenant, nous allons mettre en place le répertoire des fichiers.

# Create the directory.
mkdir sites/default/files

# Now set the group to the Apache group. -R means recursive, and -v means 
# verbose mode.
chgrp -Rv www-data sites/default/files

Ensuite, nous allons mettre en place des autorisations pour que le serveur Web peut toujours écrire à tout fichier qui se trouve dans ce répertoire. Nous le faisons en utilisant 2775 dans notre commande chmod. Les 2 signifie que l'ID de groupe sera préservé pour tous les nouveaux fichiers créés dans ce répertoire. Ce que cela signifie est que www - données seront toujours le groupe sur tous les fichiers, assurant ainsi que le serveur web et l'utilisateur auront à la fois toujours les permissions d'écriture à tous les nouveaux fichiers qui sont placés dans ce répertoire. Les 7 premiers moyens que le propriétaire (par exemple) peut R (Lire) W (écriture) et X (Execute) tous les fichiers ici. Les deuxièmes moyens 7 de ce groupe (www-data) peut également R W et X tous les fichiers dans ce répertoire. Enfin, les 5 moyens que les autres utilisateurs peuvent les fichiers R et X, mais pas en écriture.

 chmod 2775 sites/default/files

S'il y a des fichiers existants dans ce répertoire, vérifiez que le serveur Web a perms écrire sur eux.

 chmod g+w -R sites/default/files

Drupal est prêt à être installé. Une fois terminé, il est très important de revenir à settings.php et veiller à ce que tous les utilisateurs ont des autorisations en lecture seule.

 chmod 444 sites/default/settings.php

Ca y est! Cette configuration vous assure d'éviter des situations où soit l'utilisateur qui possède le répertoire ou le serveur Web ne peut pas écrire / modifier / supprimer des fichiers dans le répertoire des fichiers.

Les fichiers Drupal dossier doit être accessible en écriture par le serveur Web. La meilleure façon de le faire est de changer le groupe et le rendre le groupe en écriture, comme ceci:

chgrp www-data sites/default/files
chmod g+w sites/default/files

Le dossier de téléchargement de fichiers côté, le plus sûr est chmod 644 pour tous les fichiers, 755 pour les répertoires.

Cela pourrait se faire comme celui-ci (lorsqu'il est exécuté dans le dossier Drupal site, le . est pour le chemin courant):

find . -type f | xargs chmod 644
find . -type d | xargs chmod 755

Rappelez-vous que vous devrez à nouveau chmod g+w ensemble après l'exécution de la commande ci-dessus, car ceux réinitialisera le chmod sur tous les fichiers et dossiers.

Un conseil à « chmod bla » ou « chown X » n'a pas de sens sans le savoir: ce que l'utilisateur par défaut. Groupe est sur les fichiers et ce que l'utilisateur et les groupes de vos pistes de serveur Web comme

Les autres Drupal Docs ont lié à sont très bons sur le sujet, mais une autre ressource est le examen de la sécurité du module qui permet d'assurer vous avez tout réglé correctement.

Je vais répondre en considérant le cas des fichiers sont créés sur le serveur via FTP, en utilisant les informations d'identification différent de celui sous lequel est celui du serveur Web (normalement, Apache fonctionne comme personne / personne). Cela signifie que l'utilisateur qui possède les fichiers créés manuellement avant d'exécuter le programme d'installation de Drupal (qui comprend également les fichiers téléchargés sur le serveur de l'archive Drupal) n'est pas l'utilisateur utilisé pour exécuter le serveur Web (ni le nom d'utilisateur ou les matches de groupe) . Ce scénario vaut également pour le cas où ces fichiers sont créés en utilisant SSH.

  • Le fichier settings.php doit être accessible en écriture à partir du programme d'installation de Drupal, mais une fois l'installation terminée, il est suggéré de le faire en lecture seule (le programme d'installation suggèrent que, et Drupal vérifie régulièrement si le fichier est vraiment en lecture seule ). Dans le scénario que je décris, l'autorisation de ce fichier doit être au moins 644.
  • Les fichiers .htaccess (qui sont présents dans au moins deux places) doit avoir l'autorisation 644. L'utilisateur qui a créé le fichier doit toujours être en mesure d'écraser le fichier, dans le cas d'une prochaine version de Drupal est livré avec un. fichier htaccess qui a été mis à jour (il est déjà arrivé une fois, quand il a été ajouté une ligne à ce fichier pour éviter un problème de sécurité). Il est également possible de définir les autorisations à 444, mais dans ce cas, les autorisations doivent être modifié pour revenir à 644 lorsque les besoins de fichiers à être mis à jour.
  • Le répertoire contenant les fichiers créés par les modules (le répertoire default/files) doit être (pour l'utilisateur qui est attribué aux processus de serveur web, qui est alors l'utilisateur affecté à des scripts PHP en cours d'exécution sur ce serveur Web):
    • lisible
    • inscriptible
    • traversable (les modules doivent être en mesure d'atteindre default/files/<directory-used-by-the-module>/<sub-directory-used-by-the-module>)

fichier recommandé / autorisations de répertoire:

  • Drupal Webroot doit être lisible du monde (voir: updater.inc ): 0755
  • pour les répertoires de téléchargement publics: 0755 ou 0775
  • pour les répertoires de téléchargement privé: 0750 ou 0770
  • pour les fichiers uploadés publics: 0644 ou 0664
  • pour les fichiers uploadés privés: 0640 ou 0660
  • pour .htaccess dans les répertoires de téléchargement (voir: file_create_htaccess () ): 0444 (par défaut) ou 0644
  • pour settings.php en lecture seule pour tous (et d'autres fichiers confidentiels): 0440
  • pour tous les autres répertoires web: 0755
  • pour tous les autres fichiers web: 0644

Fichier recommandé / propriété de répertoire:

  • propriétaire de tous les répertoires / fichiers envoi doit être à l'utilisateur Apache,
  • propriétaire de tous les répertoires web / sources / fichiers doivent être mis à l'utilisateur non-Apache,
  • (éventuellement) un groupe de toutes les sources doit être réglé sur un groupe Apache,

Voici les variables de contrôle des autorisations par défaut dir / fichier pour les nouveaux éléments:

file_chmod_directory: 0775
file_chmod_file: 0664

Voici un script pour les autorisations de fixation: fix-permissions.sh


En savoir plus:


Voici le script que je suis en utilisant des autorisations de correctifs sur l'hôte distant pour les répertoires publics / privés:

#!/bin/sh -e
# Script to correct public/private directory and files permissions.
[ -z "$1" ] && { echo Usage: $0 @remote.dst; exit 1; }

DST="$1" && shift
GET_HTTP_GROUP='ps axo user,group,comm | egrep "(apache|httpd)" | grep -v ^root | uniq | cut -d\  -f 1'

drush $* $DST ssh 'PUB=$(drush dd %files) && PRIV=$(drush dd %private) && AGROUP=$('"$GET_HTTP_GROUP"') && chgrp -vR $AGROUP $PUB $PRIV && chmod -vR u+rwX,g+rwX,o+rX $PUB $PRIV'

Note:. Code ci-dessus va essayer de récupérer groupe Apache et le mettre à variable GET_HTTP_GROUP

Ce script shell se trouve au bas de cette page: https://www.drupal.org/ node / 244924

Je le lance de temps en temps pour faire en sorte que mes autorisations sont définies correctement.

#!/bin/bash
# Help menu
print_help() {
cat <<-HELP
This script is used to fix permissions of a Drupal installation
you need to provide the following arguments:
1) Path to your Drupal installation.
2) Username of the user that you want to give files/directories ownership.
3) HTTPD group name (defaults to www-data for Apache).
Usage: (sudo) bash ${0##*/} --drupal_path=PATH --drupal_user=USER --httpd_group=GROUP
Example: (sudo) bash ${0##*/} --drupal_path=/usr/local/apache2/htdocs --drupal_user=john --httpd_group=www-data
HELP
exit 0
}
if [ $(id -u) != 0 ]; then
  printf "**************************************\n"
  printf "* Error: You must run this with sudo. *\n"
  printf "**************************************\n"
  print_help
  exit 1
fi
drupal_path=${1%/}
drupal_user=${2}
httpd_group="${3:-www-data}"
# Parse Command Line Arguments
while [ $# -gt 0 ]; do
  case "$1" in
    --drupal_path=*)
      drupal_path="${1#*=}"
      ;;
    --drupal_user=*)
      drupal_user="${1#*=}"
      ;;
    --httpd_group=*)
      httpd_group="${1#*=}"
      ;;
    --help) print_help;;
    *)
      printf "***********************************************************\n"
      printf "* Error: Invalid argument, run --help for valid arguments. *\n"
      printf "***********************************************************\n"
      exit 1
  esac
  shift
done
if [ -z "${drupal_path}" ] || [ ! -d "${drupal_path}/sites" ] || [ ! -f "${drupal_path}/core/modules/system/system.module" ] && [ ! -f "${drupal_path}/modules/system/system.module" ]; then
  printf "*********************************************\n"
  printf "* Error: Please provide a valid Drupal path. *\n"
  printf "*********************************************\n"
  print_help
  exit 1
fi
if [ -z "${drupal_user}" ] || [[ $(id -un "${drupal_user}" 2> /dev/null) != "${drupal_user}" ]]; then
  printf "*************************************\n"
  printf "* Error: Please provide a valid user. *\n"
  printf "*************************************\n"
  print_help
  exit 1
fi
cd $drupal_path
printf "Changing ownership of all contents of "${drupal_path}":\n user => "${drupal_user}" \t group => "${httpd_group}"\n"
chown -R ${drupal_user}:${httpd_group} .
printf "Changing permissions of all directories inside "${drupal_path}" to "rwxr-x---"...\n"
find . -type d -exec chmod u=rwx,g=rx,o= '{}' \;
printf "Changing permissions of all files inside "${drupal_path}" to "rw-r-----"...\n"
find . -type f -exec chmod u=rw,g=r,o= '{}' \;
printf "Changing permissions of "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n"
cd sites
find . -type d -name files -exec chmod ug=rwx,o= '{}' \;
printf "Changing permissions of all files inside all "files" directories in "${drupal_path}/sites" to "rw-rw----"...\n"
printf "Changing permissions of all directories inside all "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n"
for x in ./*/files; do
    find ${x} -type d -exec chmod ug=rwx,o= '{}' \;
    find ${x} -type f -exec chmod ug=rw,o= '{}' \;
done
echo "Done setting proper permissions on files and directories"
Copy the code above to a file, name it "fix-permissions.sh" and run it as follows:
sudo bash fix-permissions.sh --drupal_path=your/drupal/path --drupal_user=your_user_name

Note: The server group name is assumed "www-data", if it differs use the --httpd_group=GROUP argument.

Aussi, si vous utilisez FastCGI, les pistes php en tant qu'utilisateur, et vous aurez accès à tous les fichiers que l'utilisateur a accès à moins que vous essayez délibérément pour éviter cela.

Cela m'a aidé avec mes problèmes d'autorisation OSX. Je l'ai trouvé dans https://www.drupal.org/node/244924#comment- 3741738 par utilisateur protoplasmique. J'étais comme lui avoir des problèmes après une migration.

[root@localhost]cd /path_to_drupal_installation/sites
[root@localhost]find . -type d -name files -exec chmod ug=rwx,o= '{}' \;
[root@localhost]find . -name files -type d -exec find '{}' -type f \; | while read FILE; do chmod ug=rw,o= "$FILE"; done
[root@localhost]find . -name files -type d -exec find '{}' -type d \; | while read DIR; do chmod ug=rwx,o= "$DIR"; done

Il y a un module appelé d'examen de sécurité qui vérifie si votre site est sécurisé ou non. J'ai aussi trouvé un très bon lien pour les autorisations de site définies.

Licencié sous: CC-BY-SA avec attribution
Non affilié à drupal.stackexchange
scroll top