¿Qué ocurre si en los directorios de Drupal tenemos permisos de escritura para le usuario de Apache? Pues que Apache va a poder sobreescribir los ficheros de Drupal a su antojo, y eso es un agujero de seguridad muy grande.
Los permisos de acceso en todo Drupal tienen que ser:
drwxrwx--- 7 www-data greg-group 4096 2008-01-18 11:02 files/ drwxr-x--- 32 greg-user www-data 4096 2008-01-18 11:48 modules/ -rw-r----- 1 greg-user www-data 873 2007-11-13 15:35 index.php
siendo el usuario, el usuario propio con el que vamos a modificar los ficheros con git, ftp, ..., en mi caso hola; y siendo el grupo, el grupo del usuario de apache, en mi caso www-data.
Como se puede ver, el apache sólo podrá leer ficheros y ejecutar directorios para entrar en ellos. Nada más.
¿Yo había entendido que el usuario y grupo tenía que ser siempre el usuario de apache?
Error, y muy grave. Yo levanto la mano el primero, y gracias a una conversación con NITEMAN, empecé a analizarlo bien.
¿Cómo cambio los permisos a los ficheros?
Como los permisos no son todos iguales y para los mismos campos, encontré un script que te hace el grueso del cambio de ficheros de forma automática. Aquí os lo dejo:
#!/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 or root*\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"
Para ejecutarlo, hay que llamarlo de la siguiente forma:
sudo bash fix-permissions.sh --drupal_path=your/drupal/path --drupal_user=your_user_name
Toda esta información la he obtenido de un nodo de drupal.org: https://www.drupal.org/node/244924. Ahí está toda la información mucho más detallada.
Add new comment