2013-09-16 13:33:11 +0000 2013-09-16 13:33:11 +0000
27
27

Conceder permisos de escritura al grupo www-data

Estoy creando un sitio web y parte de la función es escribir los datos generados por el usuario con php. Estoy usando nginx en Ubuntu 13.04. De momento sólo estoy haciendo pruebas y todo se sirve a través de nginx en locahost.

Mi script php falla al escribir el archivo de texto (aunque puedo hacerlo manualmente) y creo que es un problema de permisos para escribir en mi directorio /var/www/example.com/public\html.

En este momento yo (iain) soy el dueño de este directorio pero parece que tendría más sentido transferir la propiedad del directorio /var/www y todo lo que hay dentro de él al usuario www-data (¿o debería ser grupo?) y añadirme al grupo www-data. ¿Es la siguiente manera de hacer esto?

useradd -G www-data iain
chown -R www-data:www-data /var/www/example.com
chmod 775 /var/www

¿Significa esto que cualquiera en el grupo www-data puede ahora leer, escribir y ejecutar en /var/www?

Respuestas (1)

53
53
53
2013-09-16 13:53:44 +0000

Primero, useradd crea un nuevo usuario. Como tú (iain) ya existes, quieres llamar a usermod en su lugar. Así que eso sería:

sudo usermod -aG www-data iain
addgroup www-data

(nótese el -a en los servidores basados en Debian (Ubuntu incluido) que te añadirá a ese grupo, y mantendrá tu pertenencia a otros grupos. Olvídalo y sólo pertenecerás al grupo www-data - podría ser una mala experiencia si uno de ellos fuera la rueda. En los servidores de tipo SUSE la opción es -A en lugar de -aG así que lee cuidadosamente man usermod para hacerlo bien).

En segundo lugar, no querrá que apache tenga acceso rw completo a /var/www: esto es potencialmente una gran brecha de seguridad. Como regla general, permita sólo lo que necesite, y nada más principio de mínimo privilegio). En este caso, necesitas que apache (www-data) y tú (grupo www-data) escriban (y lean) en /var/www/example.com/public_html, así que

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 770 /var/www/example.com/public_html
  • *

Edición : para responder a tu pregunta original, sí, cualquier miembro de www-data puede ahora leer y ejecutar /var/www (porque el último bit de tus permisos es 5 = read + exec). Pero como no has usado el switch -R, eso se aplica sólo a /var/www, y no a los archivos y subdirectorios que contiene. Ahora, que puedan escribir es otra cosa, y depende del grupo de /var/www, que no has puesto. Supongo que es el típico root:root, así que no, (probablemente) no pueden escribir.

Edición en 2014-06-22 : se ha añadido una nota de que la opción -aG es válida en servidores basados en Debian. Aparentemente varía con la distribución, así que lea cuidadosamente man antes de ejecutar.