Hacer propietario de los archivos y carpetas recién creados www-data en lugar de superusuario / administrador

13

He estado luchando con los permisos hasta ahora, y publiqué otra pregunta pero identifiqué cuál era el problema, sin ninguna forma de solucionarlo todavía.

Mi configuración:

  • Escritorio Ubuntu con pila LAMP
  • 5 "usuarios" Creé usuarios que creé en el servidor ubuntu usando sudo useradd -r -s /bin/false USERNAMEy que se usan para acceder a las carpetas compartidas de la red local, es decir, para que las computadoras de mi red se conecten a la carpeta / var / www, compartida usando Samba.
  • EDITAR: El propósito es crear una especie de "host local maestro" donde todas las computadoras de mi red local puedan trabajar en el mismo sitio web, localmente (NO tengo una dirección IP estática, por lo que no se puede acceder al servidor desde otro lugar) .

Mi problema:

Actualmente, cuando creo una nueva carpeta en /var/www/html(por ejemplo: Crear la carpeta / var / www / html / testsite1) usando cualquier computadora de la red, esta carpeta es propiedad automática de boris:www-data("boris" es el usuario administrador principal en mi instalación de escritorio ubuntu , y muestra de hecho boris: www-data cuando se ejecuta ls -len la carpeta recién creada), lo que está causando problemas con mi configuración actual (usando principalmente Duplicator Plugin para wordpress por LifeInTheGrid). Sin embargo, tanto mi /var/wwwcomo mi/var/www/html son propiedad dewww-data:www-data

Por lo tanto, me gustaría saber cómo puedo:

  • Cambie la propiedad a www-data: www-data de todos los archivos Y directorios a continuación / var / www y / var / www / html

  • Asegúrese de que cualquier archivo o carpeta que cree con cualquiera de los usuarios de mi red pertenezca automáticamente a www-data: www-data (eso incluye archivos creados automáticamente por scripts php, ya que es lo que hace el plugin Duplicator si estoy No esta mal).

¿Hay una manera de hacer eso?

Nota: Soy un super novato con cosas relacionadas con Linux y líneas de comando, pero me pongo al día rápidamente.

Nota 2: umask ya está configurado como 0002

EDITAR:

Probé esto:

sudo chown -R www-data:www-data /var/www/

Y luego establezca los bits setuid y setgid haciendo esto:

sudo chmod u+s /var/www/html
sudo chmod g+s /var/www/html

Luego cerré la sesión, reinicié Apache e intenté crear una nueva carpeta usando una Mac conectada a mi servidor a través de la red IP (IP local, no estática).

Corrí

ls -l on /var/www/html

La salida sigue siendo:

drwxr-sr-x 2 boris   www-data  testsite1

Nota:

Ya revisé mi configuración de apache antes y envvars, ya está configurado en:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

EDITAR: Lo intenté al revés, por ejemplo, configurando todo para que sea propiedad de boris: www-data y configuré mi configuración de apache de envvars en boris: www-data. ¡FUNCIONÓ!

Aquí esta lo que hice:

Cambió envvars a

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Corrió

sudo chown -R boris:www-data /var/www/

¡Reinicié Apachem, creé una nueva carpeta, agregué mis archivos, ejecuté el complemento, ahora dice que es bueno!

Boris Chevreau
fuente
Es una mala idea para la seguridad establecer que los archivos sean propiedad del usuario o grupo www-data, aunque en casos excepcionales puede ser necesario para ciertos archivos a los que el servidor web necesita acceso de escritura. ¿Qué es lo que estás tratando de lograr?
thomasrutter

Respuestas:

11

Respuesta a la pregunta 1: recursivachown

Un recursivo chownle permitirá establecer la propiedad y el grupo para lo que desea /var/www/.... Este es el comando que debes usar:

sudo chown -R www-data:www-data /var/www/

Con eso, cada archivo y carpeta se configurará como tal dentro de esos permisos de propiedad.


Media respuesta a la pregunta # 2: setgid bit

Si desea la propiedad predeterminada del grupo en los archivos, establezca el setgidbit en la /var/www/htmlcarpeta. Los nuevos archivos se deben crear con ese grupo como se indica en la carpeta.

sudo chmod g+s /var/www/html

Sin embargo, deberá establecer permisos de escritura si algún usuario que NO sea el que www-dataestá escribiendo en los directorios, y hacerlo puede abrirlo a un agujero de seguridad o dos si no tiene cuidado.

Terminas con permisos siendo $USER:www-data; para cambiar el propietario, utilice un chownmétodo indicado en el método n. ° 1 (dicho esto, en una configuración adecuada, debe confiar en los permisos de grupo, no en los permisos de propietario del usuario, para acceder a los archivos web).


Problema del duplicador de Wordpress PHP

El problema con los permisos es el usuario / grupo que PHP ejecuta, ya que necesita escribir y leer y probablemente +x en el directorio para editar la estructura de directorios y tal.

PHP se ejecuta como www-data predeterminado en las instalaciones de Ubuntu que usan las configuraciones predeterminadas. Idealmente, sus pasos anteriores solucionarían el problema, ya que está atascado con el Duplicator Plugin como un complemento de PHP.

Idealmente, también debe consultar la documentación del Duplicator Plugin para verificar qué permisos necesita para funcionar y funcionar.

Thomas Ward
fuente
Me gusta el método setuid :)
Rinzwind
¡¡¡¡Esto es exactamente lo que estaba buscando!!!! El único problema: no funcionó :-( Creé una carpeta en mi Mac (es decir, NO con la computadora de escritorio ubuntu) accediendo a mi servidor a través de su IP local. Cuando ejecuté ls -l, aún propiedad de boris: www- datos: - /
Boris Chevreau
¿Es porque configuro la propiedad del usuario en los archivos pero no en las carpetas? ¿Es solo porque la carpeta que creo NO PUEDE ser propiedad automática de www-data: www-data?
Boris Chevreau
Mac es diferente a Linux, y si eres realmente desafortunado, este método no funcionará y terminarás teniendo que meterte con mucho más que simples permisos (como ACL y otras cosas) para configurar archivos predeterminados . Además, 'no funcionó' es ambiguo. definir no funcionó e incluir resultados como ediciones de la pregunta.
Thomas Ward
1
setuid aplicado a directorios siempre se ignora en Linux, iirc
muru
6

Para asegurarse de que cualquier archivo o carpeta que cree en /var/www/html sea ​​propiedad de www-data automáticamente, puede usarinotify , es como cron pero monitorea las carpetas / archivos en busca de cambios en los atributos, creaciones de archivos, modificaciones y mucho más.

Primero instálalo con:

$ sudo apt-get install incron

Permita que la raíz se use incronabriendo /etc/incron.allowcon:

$ sudo vim /etc/incron.allow

y añadir root al archivo, luego guarde y salga.

Edite su incrontab con:

$ sudo incrontab -u root -e

y agregue la siguiente línea:

/var/www/html IN_CREATE /bin/chown -R www-data:www-data /var/www/html/

guardar y Salir.

Ahora, tan pronto como se cree un archivo en el /var/www/htmldirectorio, automáticamente establecerá la respuesta enwww-data:www-data .

Explicación de la línea en incrontab:

/var/www/html es el directorio que será monitoreado.

IN_CREATEbuscará los archivos creados. Es la máscara de cambio de archivo .

/bin/chown -R www-data:www-data /var/www/html/ es el comando / acción a ejecutar.

krt
fuente
Pueden lograr algo como esto sin inotify y setgid: la propiedad del usuario probablemente no debería cambiar a menudo y pueden restablecer la propiedad del usuario ellos mismos ... o usar ACL que pueden ser un dolor
Thomas Ward
Todo el propósito de este servidor es que lo usemos como un "host local maestro", por ejemplo, cree sitios web localeshost y pueda editar / reemplazar / mover y crear sitios de prueba sobre la marcha muy fácilmente. Si tengo que restablecer todo manualmente, mata todo el propósito: - /
Boris Chevreau
¿Es esta forma "incron" la única manera? No entiendo por qué tiene que ser tan complicado. Lo que estoy buscando es una manera simple para que todas mis computadoras en la red creen un sitio web en este servidor. En última instancia, como no tengo una IP estática (por lo tanto, la seguridad no es un problema), ¿hay otro cambio que tenga en cuenta?
Boris Chevreau
gracias, funciona como un encanto!
Trurl
3

Cambie la propiedad a www-data: www-data de todos los archivos Y directorios a continuación / var / www y / var / www / html

cd /var/www/
chown -R  www-data:www-data /var/www/
  • ./html está implícito aquí (como parte de / var / www /)
  • -Rlo hace recursivo (por lo que atravesará todos los directorios /var/www/).

Asegúrese de que cualquier archivo o carpeta que cree con cualquiera de los usuarios de mi red pertenezca automáticamente a www-data: www-data

  • ¿Dentro de / var / www / html / supongo?

Establezca su configuración de apache en www-data. Ver/etc/apache2/envvars

# envvars - default environment variables for apache2ctl

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Debe reiniciar Apache después de editar esto ( sudo service apache restart).

Eso incluye archivos creados automáticamente por scripts php, ya que es lo que hace el plugin Duplicator si no me equivoco).

El problema aquí probablemente no es el complemento sino php. El usuario debe ser el mismo proceso que ejecuta PHP. Por lo tanto, es probable que también necesite establecer eso en www-data si ese es su usuario y grupo ( /etc/php5/apache2/php.ini).

Rinzwind
fuente
Los valores predeterminados de Ubuntu ejecutan procesos / trabajadores PHP como www-data, al igual que Debian, creo.
Thomas Ward
Además, el problema /var/www/htmltambién es la propiedad del grupo y los privilegios de lectura / escritura. El otro problema es que quieren que tenga cualquier archivo creado por un usuario www-data:www-data, y supongo que son usuarios de la red , no usuarios de Wordpress, por lo que debe buscar los permisos de los archivos de Linux.
Thomas Ward
Esos son usuarios de la red, son usuarios que he creado en el servidor de ubuntu usando sudo useradd -r -s / bin / false USERNAME y que se utilizan para acceder a las carpetas compartidas de la red local
Boris Chevreau
¿Qué sucede si cambio la propiedad y los permisos de escritura de todas las carpetas y archivos a boris: www-data, luego cambio los envvars para que apache sea boris: www-data? ¿Eso tal vez solucionaría el problema ya que cada vez que creo un nuevo archivo se establece como propietario boris: www-data?
Boris Chevreau
2

Lo solucioné! Todavía creo que fue un problema de Apache envvars, pero no estoy seguro de si eso es lo que resolvió el problema ... De todos modos, esto es lo que hice:

Cambió envvars a

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Corrió

sudo chown -R boris:www-data /var/www/

Ahora está funcionando hasta ahora. Probará más ...

Boris Chevreau
fuente