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:
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" .
Sitio alojado: módulos, temas, archivos y directorios: site_admin:www-data
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---
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:
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:
Por supuesto este script no lo tienes todavía, pero lo creas al digitar este comando.
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...
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:
Por supuesto tu tienes que modificar estos valores por los que correspondan.
Ejemplo:
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...
Fuente: http://drupalalsur.org/apuntes/como-asignar-correctamente-los-permisos-en-drupal
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 legible |
chmod numerico | permiso obtenido |
---|---|---|
ugo=rwx | 777 | rwxrwxrwx |
u-wx | 470 | r--rwx--- |
o+r | 774 | rwxrwxr-- |
g-wx,o+r | 744 | rwxr--r-- |
u-w,g-wx,o+r | 544 | r-xr--r-- |
g=,o=r | 704 | rwx---r-- |
a-wx | 440 | r--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-dataSitio 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.
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...
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
Ejemplo:
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...
Fuente: http://drupalalsur.org/apuntes/como-asignar-correctamente-los-permisos-en-drupal