Configurar de manera segura los permisos del directorio 'files' de Drupal

En una instalación de Drupal hay directorios que suelen crear algún problema de escritura porque son propiedad del usuario que los copia, el que se utiliza para la instalación, y la aplicación de Drupal también tiene que escribir en ellos para su correcto funcionamiento. Los más habituales son el /files, o el ctools/css. Si los directorios tienen los permisos por defecto, y se copian con un usuario 'instalador', lo normal será que si Drupal se ejecuta con Apache, el usuario de sistema de Apache no pueda escribir en ellos, y en el informe de estado de Drupal se pueda ver el aviso.

Lo que no hay que hacer en este caso es utilizar un chmod 777 para dar acceso de escritura al usuario de Apache. Parece la solucion más sencilla, pero hay que evitarla porque supone un problema de seguridad, ya que también se está permitiendo la escritura en el directorio a cualquier usuario.

A nivel de permisos, lo que se puede hacer es que el usuario 'Instalador' y el usuario de Apache pertenezcan al mismo grupo, y permitir la escritura sobre estos directorios al propietario y a los usuarios de su mismo grupo con un chmod 775, con lo que los usuarios que no pertenezcan a este grupo ya no podrán escribir en estos directorios. Se puede conseguir en pocos pasos:

Asignar el usuario 'instalador' al grupo de Apache:

# usermod -a -G apache instalador

Asignar el grupo Apache a los directorios compartidos donde ha de escribir Drupal:

# chgrp –Rv apache sites/default/files

Asignar a los directorios compartidos permisos para escribir los usuarios del grupo (el 2 indica que los permisos se conservarán así también para nuevos ficheros):

# chmod 2775 sites/default/files

Asignar permisos de escritura recursivos al directorio:

# chmod g+w –R sites/default/files

 

Y ya que estamos con temas de permisos, se puede aprovechar para quitar permisos de escritura a settings.php:

# chmod 444 sites/default/settings.php

 

De esta manera, los directorios en los que ha de escribir Drupal con el usuario de Apache quedan protegidos, y tanto este usuario como el que utilizamos para crear la instalación tienen permisos de escritura.

 

Una opción que evita este problema es que el usuario que ejecute el código PHP y que, por tanto, escriba en los directorios files, css o xmlsitemaps sea el propietario de los directorios, el usuario que hemos llamado 'instalador'. Esto pasa si el servidor esta configurado para utilizar PHP con aplicaciones CGI, o aplicaciones FastCGI, así que si se puede elegir, utilizar FastCGI puede ser una buena opción (CGI tiene peor rendimiento). De todas maneras, decidir si utilizar Apache o FastCGI para ejecutar el código PHP debería depender de más factores. Enlazo un post en el que se explican bastante bien las diferencias entre los modos de PHP Apache, CGI y FASTCGI de cara a seleccionar el modo más adecuado para cada instalación.