permisos de www-data?

108

Así que tengo un directorio en / var / www (llamado cake) y necesito permitir que www-data escriba en él, pero también quiero escribir en él (sin tener que usar sudo). Tengo miedo de cambiar los permisos a 777 en caso de que algún otro usuario de mi máquina (o un pirata informático) intente modificar archivos en ese directorio. ¿Cómo permito el acceso solo para mí y para los datos www de Apache?

q3d
fuente

Respuestas:

168
sudo chown -R yourname:www-data cake

luego

sudo chmod -R g+s cake

El primer comando cambia de propietario y grupo.

El segundo comando agrega el atributo s que mantendrá los nuevos archivos y directorios dentro de la torta con los mismos permisos de grupo.

James L.
fuente
3
¿Por qué chmod g + s es recursivo?
Ben Rogmans
no sabía nada de g + s. muy muy práctico!
FRAGA
1
¿Qué puede hacer el usuario con los archivos creados por www-data en cake mismo y los archivos creados por www-data en un directorio creado por www-data? por ejemplo, sobre las operaciones de editar, renombrar, borrar? Según tengo entendido, el cambio de nombre y la eliminación no son posibles dentro del directorio creado por www-data, y la edición de archivos creados por www-data no es posible para el usuario en absoluto.
qdinar
49

Como se indica en un artículo de Slicehost :

Configuración de usuario

Entonces, comencemos agregando el usuario principal al grupo de usuarios de Apache:

sudo usermod -a -G www-data demo

Eso agrega la 'demostración' del usuario al grupo 'www-data'. Asegúrese de utilizar las opciones -a y -G con el comando usermod que se muestra arriba.

Deberá cerrar la sesión y volver a iniciarla para habilitar el cambio de grupo.

Consulta los grupos ahora:

groups
...
# demo www-data

Así que ahora soy miembro de dos grupos: el mío (demo) y el grupo Apache (www-data).

Configuración de carpeta

Ahora debemos asegurarnos de que la carpeta public_html es propiedad del usuario principal (demo) y es parte del grupo Apache (www-data).

Vamos a configurar eso:

sudo chgrp -R www-data /home/demo/public_html

Como estamos hablando de permisos, agregaré una nota rápida con respecto al comando sudo: es un buen hábito usar rutas absolutas (/ home / demo / public_html) como se muestra arriba en lugar de rutas relativas (~ / public_html). Asegura que sudo se esté utilizando en la ubicación correcta.

Si tiene una carpeta public_html con enlaces simbólicos en su lugar, tenga cuidado con ese comando, ya que seguirá los enlaces simbólicos. En los casos de una carpeta public_html en funcionamiento, cambie cada carpeta a mano.

Setgid

Bien hasta ahora, pero recuerde que el comando que acabamos de dar solo afecta a las carpetas existentes. ¿Qué pasa con algo nuevo?

Podemos establecer la propiedad para que cualquier cosa nueva también esté en el grupo 'www-data'.

El primer comando cambiará los permisos del directorio public_html para incluir el bit "setgid":

sudo chmod 2750 /home/demo/public_html

Eso asegurará que cualquier archivo nuevo reciba el grupo 'www-data'. Si tiene subdirectorios, querrá ejecutar ese comando para cada subdirectorio (este tipo de permiso no funciona con '-R'). Afortunadamente, se crearán nuevos subdirectorios con el bit 'setgid' configurado automáticamente.

Si necesitamos permitir el acceso de escritura a Apache, a un directorio de cargas, por ejemplo, entonces configure los permisos para ese directorio así:

sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads

Los permisos solo deben establecerse una vez, ya que a los archivos nuevos se les asignará automáticamente la propiedad correcta.

Kwadz
fuente
Esta solución me funciona. Antes de eso, siempre ejecuto el servidor desde la terminal usando el usuario root. Con esta solución, puedo subir un archivo al directorio que tiene el permiso 770. Esto es asombroso, porque antes de eso solo puedo subir un archivo con el permiso 777.
Ifan Iqbal