¿Cómo le doy a los archivos y directorios creados por FTP los permisos correctos para que Apache los lea y los escriba?

8

Soy más una persona de Windows, así que disculpe mi ignorancia con esta pregunta básica de Linux.

Estoy cuidando un servidor Linux (Debian) que solo tiene Apache2 y vsftp instalados.

Lo que está sucediendo es que estoy teniendo una batalla constante con quién posee los archivos y las carpetas y parece que no puedo hacerlo bien.

Este es mi entendimiento hasta ahora:

  • El usuario de www-data necesita la propiedad de carpetas y archivos, ya que todos los archivos en / var / www / html ejecutan scripts que requieren que escriban en su carpeta. Y, por supuesto, debe poder servir las páginas a través de http.
  • Mi usuario ftp (llamémoslo ftpuser ) también requiere permiso para escribir en la carpeta / var / www / html (recursiva) ya que necesito poder cargar nuevos archivos.

Con esto en mente, he creado un grupo llamado ftpandwww y he incorporado todas las carpetas y archivos a este grupo. Esto ha funcionado hasta cierto punto ...

Estoy casi en el lugar correcto, excepto por el hecho de que las carpetas nuevas creadas con mi cliente FTP tienen los permisos incorrectos (que puedo corregir cambiándolos en el cliente FTP), pero luego www-data no puede escribirles porque son propiedad de ftpuser y termino teniendo que usar SSH y ejecutar un chown para ftpandwww group para que ambos estén contentos.

¿Cómo hago para que todas las carpetas nuevas que creo bajo FTP tengan los permisos correctos (774) y sean propiedad del grupo ftpandwww automáticamente para que pueda cargar y servir a través de la web (con permisos de escritura) sin tener que entrar y compartir todas las nuevas carpetas y archivos cada vez?

omega1
fuente

Respuestas:

10

Use los permisos SetGID en el directorio raíz web y propaguelos a los hijos.

Cuando aplique SetGID en un directorio, todos los elementos nuevos en ese directorio se crearán con el mismo grupo que tiene su padre, independientemente de la membresía de grupo predeterminada del usuario.

Para aplicar SetGID a un objeto del sistema de archivos, utilícelo chmodcon un 2 delante del código de permiso.
(por ejemplo: 740 => 2740).

Utilizo SetGID en muchos de mis recursos compartidos de Samba, de modo que los archivos siempre tienen el ownergroup Usersy cualquier miembro del grupo puede leer los archivos (generalmente uso 2750para que solo el usuario propietario pueda escribir en el archivo).

En su caso, ejecute algo como esto (reemplace XXX con sus permisos deseados):

sudo chown -R  root:ftpandwww /var/www
sudo chmod -R 2XXX /var/www 

Luego, nuevos archivos y carpetas saldrán con propiedad como ftpuser:ftpandwww.

Editar:

Dependiendo de su caso de uso, es probable que SetGID resuelva su problema, pero si tiene problemas continuos en los que se le niega la escritura a uno u otro usuario, debido a un permiso de grupo incorrecto (pero la propiedad es correcta), entonces su mejor opción es establecer un UMASK personalizado para el usuario que crea los archivos .

Si tiene dificultades para configurar el UMASK para el usuario (porque es un demonio), verifique este hilo en las opciones para configurar el UMASK de un usuario del demonio .

Recomendaría la máscara 007si desea que los miembros del grupo puedan escribir y eliminar archivos, y sin privilegios para los no propietarios.

Frank Thomas
fuente
Gracias, intentaré esto cuando mencione que todos los archivos y carpetas tendrán esta propiedad ftpuser: ftpandwww ¿www-data los seguirá sirviendo y también tendrá permisos (a través de script) para escribir en las carpetas? Gracias de nuevo.
omega1
El usuario propietario real probablemente será el usuario que ejecute el proceso, a menos que use autenticación local (pero eso depende completamente de la aplicación). De cualquier manera, la respuesta a su pregunta depende del XXX que elija usar. Como tanto wwwdata como ftpdata están en el mismo grupo, si le das 770, entonces sí, ambas cuentas podrán escribir en los objetos. sin embargo, si le dio 740, solo el usuario propietario podría escribir, pero cualquier miembro de ftpandwww podría leer. El punto es que está utilizando permisos de grupo en lugar de permisos de usuario para estas operaciones.
Frank Thomas