Como asignar correctamente los permisos en Drupal

Es común que muchas veces nuestro sitio no funcione como es de esperar, muchas veces esto no es más que un síntoma de que hemos asignado mal los permisos.
Esto es mas común en entornos Unix, como Linux y también en Mac, donde estos sistemas son mucho más estrictos con el tema de los permisos que por ejemplo el sistema Windows.

Si en Linux no asignas permiso de escritura a un directorio, será prácticamente imposible que por ejemplo Drupal descargue una actualización y haga alguna modificación, porque son los permisos lo que se lo impiden.

Por supuesto tampoco es cuestión de asignar todos los permisos a todos nuestros directorios y archivos, esto puede parecer bien en tu propia PC, pero cuando muevas el sitio a un servidor vivo,
si este no esta muy bien configurado, suele heredar los permisos de los archivos y directorios que tu le subes, lo cual desde el punto de vista de la seguridad, estas regalado.

La regla de oro de los permisos dice lo siguiente:

Todo los directorios dentro de tu sitio menos el directorio sites, deben ser 750.
Todos los archivos dentro de tu sitio menos en sites, deben ser 640.
Todos los directorios dentro se site deben ser 770
Todos los archivos dentro de site deben ser 660

Pero de que es lo que se esta hablando aquí?

Son términos Geek, y para no darle mucha vuelta básicamente se refiere a esto:

Significado de los signos:
"+" = agrega un permiso a los que ya existen.
"-" = quita el permiso otorgado manteniendo los anteriores.
"=" = ignora los que tiene el mismo y los remplaza por los nuevos.
"u" = usuario.
"g" = grupo.
"o" = otros.
"a" = todo el mundo (usuarios, grupo y otros).

Para archivos:
"r" = read (leer).
"w" = write (escribir).
"x" = execute (ejecutar).

Para directorios:
"r" = list (lee el contenido de los directorios)
"w" = write (escribir)
"x" = puede acceder al directorio, por otra parte si no contiene una "x" no se puede hacer "cd" (cambiar directorio) en el mismo.

Utilizando chmod sin valores numéricos hace que sea más legible. Aquí algunos ejemplos de cómo usarlo:

chmod legiblechmod numericopermiso obtenido
ugo=rwx777rwxrwxrwx
u-wx470r--rwx---
o+r774rwxrwxr--
g-wx,o+r744rwxr--r--
u-w,g-wx,o+r544r-xr--r--
g=,o=r704rwx---r--
a-wx440r--r-----

Consideraciones especiales para el archivo settings.php

Este archivo contiene la contraseña de nuestra base de datos como también nuestro nombre de usuario.
Una vez instalado el sitio, debería ajustarse los permisos para que solo los apropiados usuarios puedan leerlo.
Esto significa quitar los permisos de lectura para los usuarios "otros" .

Resumiendo los permisos

  • Drupal Admin: el usuario que administra Drupal en el servidor, no necesariamente es el usuario Root.
  • Administrador del Sitio: es el dueño del sitio alojado (puede ser un cliente).

Propietario

Son los módulos del core, los themes, archivos y directorios: drupal_admin:www-data
Sitio alojado: módulos, temas, archivos y directorios: site_admin:www-data

Permisos

Módulos del core, y directorios de los temas: rwxr-x---
Módulos del core y archivos de los temas: rw-r---
Directorios del servidor, como módulos y temas: rwxr-x---
Archivos del servidor como módulos y temas: rw-r-----
Directorio "files": rwxrwx---
Archivos dentro de "files": rw-rw----
Directorios dentro de "files": rwxrwx---

Script para cambiar los permisos de forma automática

Si necesitas reparar los permisos, puedes utilizar el siguiente script.
Esta basado en estos principios comentados más arriba.
Comprueba bien como se ejecuta para no modificar otros archivos y/o directorios ajenos a Drupal que puedas tener en tu sitio:

#!/bin/bash

path=${1%/}
user=${2}
group="www-data"
help="\nHelp: Este script es utilizado para reparar los permisos en una instalación de un sitio Drupal\necesitas proveer la siguiente información:\n\t 1) Ruta de tu instalación de drupal\n\t 2) Nombre del usuario al que quieres otorgar los permisos de propiedad para archivos/directorios\nNote: "www-data" (apache default) is assumed as the group the server is belonging to, if this is different you need to modify it manually by editing this script\n\nUsage: (sudo) bash ${0##*/} drupal_path user_name\n"

if [ -z "${path}" ] || [ ! -d "${path}/sites" ] || [ ! -f "${path}/modules/system/system.module" ]; then
echo "Por favor ingresa una ruta válida de Drupal"
echo -e $help
exit
fi

if [ -z "${user}" ] || [ "`id -un ${user} 2> /dev/null`" != "${user}" ]; then
echo "Por favor ingresa un usuario válido"
echo -e $help
exit
fi

cd $path;

echo -e "Cambiando los permisos de propiedad a todo el contenido de "${path}" :\n user => "${user}" \t group => "${group}"\n"
chown -R ${user}:${group} .
echo "Cambiando los permisos de todos los directorios dentro de "${path}" to "750"..."
find . -type d -exec chmod u=rwx,g=rx,o= {} \;
echo -e "Cambiando los permisos de todos los archivos dentro de "${path}" to "640"...\n"
find . -type f -exec chmod u=rw,g=r,o= {} \;

cd $path/sites;

echo "Changing permissions of "files" directories in "${path}/sites" to "770"..."
find . -type d -name files -exec chmod ug=rwx,o= '{}' \;
echo "Changing permissions of all files inside all "files" directories in "${path}/sites" to "660"..."
find . -name files -type d -exec find '{}' -type f \; | while read FILE; do chmod ug=rw,o= "$FILE"; done
echo "Changing permissions of all directories inside all "files" directories in "${path}/sites" to "770"..."
find . -name files -type d -exec find '{}' -type d \; | while read DIR; do chmod ug=rwx,o= "$DIR"; done

Todavía me falta traducirlo más, pero creo yo que te haces ya una idea de lo que hace el mismo.

Como lo ejecutas? bien fácil, en tu directorio de usuario /home/user inicia una consola y pon el siguiente comando:

sudo nano reparar-permisos.sh

Por supuesto este script no lo tienes todavía, pero lo creas al digitar este comando.

creando el script

Dentro de la ventana copia el nuevo script que se encuentra más arriba y pegarlo en la consola, lo puedes hacer con ctrl + shift + insert, o botón derecho, pegar...

completando el script

Ahora guardas el mismo, puedes utilizar F2 o ctrl + O enter y luego salir con ctrl + x, muchos más rápido con F2, pero si cobras por hora, utiliza el 2do. método.

Listo eso es todo, ahora en tu directorio tienes el script llamado reparar-permisos.sh, como lo ejecutas?

Es muy sencillo, supón que tu sitio se encuentra en home/charly/www/sitio1

El script esta en /home/charly
Púes en la consola estando en /home/charly, hago:

sudo bash reparar-permisos.sh www/sitio1 charly

Por supuesto tu tienes que modificar estos valores por los que correspondan.

Ejemplo:

completando el scrip

Ahora ya puedes tener tu sitio con los permisos correctos.

A tener en cuenta:

Es importante que esto lo hagas luego de instalar el sitio y no antes.
Para un sitio vivo, necesitas tener acceso por consola al mismo, pero si cambias los permisos en local y luego subes el sitio, este subirá con los permisos correctos.

Continua...

Calificar: 
0

Comentarios

Menuda la que he líado al aplicar tus permisos de LA REGLA DE ORO: Me he cargado mi web!!! contentísimo estoy, mira que siempre me han gustado tus tutoriales, pero con este he destrozado mi web
Imagen de charly

Lamento escuchar esto. Intenta modificar 750 por 755 y 640 por 644. Mira que el settings.php tenga los permisos 444 o 555 luego. Cualquier cosa comenta. Salu2.

A Marioro y otros lectores: la explicación escrita es correcta y funciona a la perfección en Drupal 7. Prestar atención y entender bien que hacéis y porque. Gracias Charly por estos apuntes.

Hola Charly, No sé si he cometido un error al crear los permisos (creo que no) pero me ha pasado lo mismo que al otro usuario. HE actualizado los permisos como dices y se me ha desparramado toda la página. He puesto los otros que le dices al otro usuario en tu respuesta y ya no hay manera de hacerlo funcionar. Estoy restaurando la web entera para solucionarlo: Creo que en algunos casos concretos "la regla de oro" falla, no sé por qué. Por lo menos a mí me la ha liado. Si encuentro el porqué de esto te lo comunicaré. Gracias de todos modos por la ayuda que siempre aportas. Un saludo
Imagen de charly

Cambia 750 por 775 y 640 por 644 y me dices. Saludos.

Disculpa pero no vi esto hasta ahora. Lo primero gracias por tu respuesta. Ya probé eso que es lo que le comentaste al otro usuario, pero no me sirvió. No sé qué ocurrió pero ya no hubo manera de arreglarlo. Tenía backup y la restauré entera. No sé, como te digo a saber qué fue. Lo mismo hice yo algo mal. Muchas gracias de nuevo por todo. Un cordial saludo desde Madrid. ;)

Premium

Landing Page con Bootstrap

Landing Page con Bootstrap y Gulp

En Youtube

Suscríbete a mi canal

Suscríbete a las noticias

* requerido

Inicio de sesión

Recursos