Conceder permisos de escritura al grupo www-data


27

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

Mi script php no puede 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 dueño de este directorio, pero parece que tendría más sentido transferir la propiedad del directorio / var / www y todo lo que está dentro al usuario www-data (¿o debería ser un grupo?) Y agregarme a El grupo www-data. ¿Es la siguiente la forma correcta de hacer esto?

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

Entonces, ¿esto significa que cualquier persona en el grupo www-data ahora puede leer, escribir y ejecutar en / var / www?

Respuestas:


53

Primero, useraddcrea un nuevo usuario. Como usted (iain) ya existe, desea llamar en su usermodlugar. Entonces eso sería:

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

(tenga -aen cuenta los servidores basados ​​en Debian (incluido Ubuntu) que lo agregarán a ese grupo y mantendrán su membresía en otros grupos. Olvídelo y pertenecerá únicamente al grupo www-data - podría ser una mala experiencia si uno de eran rueda. En los servidores tipo SUSE, la opción es en -Alugar de -aGleer man usermodcuidadosamente para hacerlo bien).

En segundo lugar, no desea que apache tenga acceso completo a rw /var/www: esto es potencialmente una violación de seguridad importante. Como regla general, permita solo lo que necesita y nada más ( principio de mínimo privilegio ). En este caso, necesita apache ( www-data) y usted ( www-datagrupo) para escribir (y leer) /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

Editar : para responder a su pregunta original, sí, cualquier miembro de www-dataahora puede leer y ejecutar /var/www(porque el último bit de sus permisos es 5 = leer + exec). Pero debido a que no ha utilizado el -Rinterruptor, eso se aplica solo a /var/www, y no a los archivos y subdirectorios que contiene. Ahora, si pueden escribir es otro asunto, y depende del grupo de /var/www, que no ha establecido. Supongo que es típicamente root:root, así que no, ellos (probablemente) no pueden escribir.

Editar el 22-06-2014 : se agregó una nota de que la -aGopción es válida en los servidores basados ​​en Debian. Aparentemente varía con la distribución, así que lea mancuidadosamente antes de ejecutar.


OK veo. El grupo de / var / www es de hecho root: root. Gracias por el enlace. Parece más sensato tener el hábito de otorgar lo que se requiere en lugar de ir por conveniencia. Gracias por la orientación
duff

2
De acuerdo, acabo de intentar escribir en /var/www/example.com/public_html con cp -r php /var/www/example.com/public_htmly me deniegan el permiso. Estoy en el grupo www-data que tiene rwxrwx --- permisos para este directorio. ¿Por qué es esto?
duff

Podría haber muchas cosas aquí. Por ejemplo, no podría tener permiso para leer algunas cosas en php, o no cerró la sesión y entró después de usermod (actualicé mi respuesta en ese punto con addgroup para evitar esto, y precisé dónde usar sudo).
Calimo

De todas las respuestas relacionadas www-data:www-data, esta resolvió el problema con la falta de permisos. Gracias.
Eugene
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.