¿Cómo fuerzo el grupo y los permisos para los archivos creados dentro de un directorio específico?

27

Para los archivos creados desde la cuenta de testuser en el directorio / var / www, necesito que tengan g + rwx como permisos y www-data como grupo.

¿Cómo puedo conseguir esto?

Estoy creando los archivos a través de SSH.

Mr.Gando
fuente
1
¿Cómo está creando su usuario los archivos? Vía FTP stor/ appe? ¿Vía HTTP PUT? ¿A través de una cuenta shell? Estos detalles son importantes, porque afectan en gran medida las posibles respuestas y deben estar en su pregunta.
JdeBP
Gracias por la entrada :), estoy creando todo a través de SSH.
Mr.Gando

Respuestas:

53

Para configurar el grupo, proporcione /var/wwwel bit setgid :

chgrp www-data /var/www
chmod g+s /var/www

Para ajustar también subdirectorios: find /var/www -type d -exec chmod g+s {} +

Esto hará que todos los archivos recién creados hereden el grupo del directorio principal, en lugar del usuario.


Para establecer los permisos de grupo predeterminados, deberá usar ACL . Establezca una ACL "predeterminada":

setfacl -m "default:group::rwx" /var/www

Para ajustar también subdirectorios: find /var/www -type d -exec setfacl -m d:g::rwx {} +

Nota: El sistema de archivos debe tener habilitado el soporte de ACL. A veces está activado por defecto; en ext3 o ext4 puede obtener "Operación no admitida", en cuyo caso debe habilitarse manualmente:

  • Para un sistema de archivos montado actualmente: mount -o remount,acl /

  • Permanentemente: uno de los siguientes métodos:

    • en el nivel fstab: editar /etc/fstabpara tener aclen el campo de opciones

    • a nivel de sistema de archivos: tune2fs -o acl /dev/diskname

Gravedad
fuente
¿no puedes obtener los subdirectorios con chmod -R g + s / var / www? No parece que deba necesitar el comando find.
bobpaul
44
@bobpaul: No, porque chmodtambién obtendría todos los archivos.
Grawity
Tenga en cuenta que algunos comandos, en particular install, de alguna manera logran evitar las ACL predeterminadas del directorio.
Ulrich Schwarz
@grawity Esta es una gran respuesta y estoy seguro de que hay una solución para mi problema, pero no puedo resolverlo. Tengo una /var/www/html/projectscarpeta y cuando www-data crea un archivo, tiene rw-rw-rpermisos, pero cuando hago algo en la consola, crea un archivo con rw-r--r. ¿Cómo puedo forzar que los nuevos archivos creados tengan siempre rw-rw-rpermisos?
lewis4u
@ lewis4u: ¿Globalmente o por directorio? Los permisos predeterminados globales (bueno, por proceso) están controlados por umask. Los permisos predeterminados por directorio se pueden cambiar usando setfaclcomo en la publicación principal.
Grawity
3

Esto podría haber atrapado a algunas personas con la respuesta 'gravity' en setgid, si el grupo de la carpeta es diferente al suyo, es posible que deba ejecutar chmod como root, pero no obtendrá ningún error que indique que necesita hacer esto.

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir

$ chmod g+s dir                                    #no errors

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #but nothing changed

$ touch dir/nosudo && ls -l dir/
-rw-rw-r-- 1 luke luke 0 Mar  9 10:51 nosudo       #and the group is still wrong


$ sudo chmod g+s dir

$ ls -ld dir
drwxrwsr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #the setgid bit is now on

$ touch dir/withsudo && ls -l dir/
-rw-rw-r-- 1 luke luke      0 Mar  9 10:51 nosudo
-rw-rw-r-- 1 luke testgroup 0 Mar  9 10:51 withsudo #and group is set
LukePH
fuente
Me estaba arrancando el pelo antes de toparme con esto. Gracias.
AndrewStevens
0

El grupo de archivos que está creando un usuario es el grupo de ese usuario (en / etc / group). Los permisos están controlados por el parámetro UMASK, vea esto

DrNoone
fuente