¿Cómo hacer que el nuevo permiso de archivo herede del directorio principal?

85

Tengo un directorio llamado data. Luego estoy ejecutando un script con la identificación de usuario 'robot'. El robot escribe en el datadirectorio y actualiza los archivos que contiene. La idea está dataabierta tanto para mí como para el robot para actualizar.

Así que configuré el permiso y el grupo de propietarios como este

drwxrwxr-x  2 me robot-grp 4096 Jun 11 20:50 data

donde tanto yo como el robot pertenecemos al 'robot-grp'. Cambio el permiso y el grupo de propietarios de forma recursiva, como el directorio principal.

Regularmente subo nuevos archivos al datadirectorio usando rsync. Desafortunadamente, los nuevos archivos cargados no heredan el permiso del directorio principal como espero. En cambio, se ve así

-rw-r--r-- 1 me users       6 Jun 11 20:50 new-file.txt

Cuando el robot intenta actualizar new-file.txt, falla debido a la falta de permiso de archivo.

No estoy seguro si configurar umask ayuda. En cualquier caso, los nuevos archivos realmente no lo siguen.

$ umask -S
u=rwx,g=rx,o=rx

A menudo me confunde el permiso de archivo de Unix. ¿Tengo siquiera un plan correcto? Estoy usando Debian Lenny.

Wai Yip Tung
fuente

Respuestas:

53

No desea cambiar la máscara de usuario predeterminada de su sistema, eso es un riesgo de seguridad. La opción de bit pegajoso funcionará hasta cierto punto, pero usar ACL es la mejor opción. Esto es más fácil de lo que piensas. El problema con las ACL básicas es que no son recursivas por defecto. Si configura una ACL en un directorio, solo los archivos dentro de ese directorio heredan la ACL. Si crea un subdirectorio, no obtendrá la ACL principal a menos que la ACL esté configurada para repetirse.

Primero, asegúrese de que las ACL estén habilitadas para el volumen en el que se encuentra el directorio. Si es así tune2fs, puede realizar lo siguiente:

# tune2fs -l /dev/sda1 | grep acl
Default mount options:    user_xattr acl

Si no tiene tune2fs, entonces examine fstabs:

# cat /etc/fstab 
/dev/system/root        /                       ext3    defaults        1 1
/dev/system/home        /home                   ext3    defaults        1 2
/dev/storage/data       /data                   ext3    defaults        1 2
LABEL=/boot             /boot                   ext3    defaults        1 2

La cuarta columna que dice "valores predeterminados" significa en mi sistema (CentOS 5.5), las ACL están activadas. En caso de duda, déjelo como predeterminado. Si se intenta establecer la ACL y él los errores hacia fuera, volver atrás y añadir la opción acl a / etc / fstab justo después defecto: defaults,acl.

Por lo que entiendo, desea que todos en el grupo de usuarios tengan acceso de escritura al directorio de datos. Eso se logra con lo siguiente:

setfacl -Rm g:users:rwX,d:g:users:rwX data/
churnd
fuente
Usé este comando pero no solucionó mi problema, ¿cómo puedo deshacer este comando por favor?
Itai Ganot
Hizo el truco en ubuntu con sudo setfacl -Rm g:users:rwX,d:g:users:rwX /var/www/logs_or_something. Tuve problemas con las pruebas de PHPUnit. Después de crear archivos de registro de las pruebas en ejecución, el usuario de apache www-datano pudo escribirlos / leerlos.
s3m3n
2
@Itai Ganot: de acuerdo con la setfaclpágina de manual , -bo --remove-allelimina las ACL extendidas.
jww
Entonces, ¿simplemente agregarías setfacl -Rm g:users:rwX,d:g:users:rwX data/al final de /etc/fstab?
425nesp
@ piña no. el único cambio que realiza en / etc / fstab es cambiar defaultsa defaults,acl. setfacles un comando que debe ejecutar desde la terminal. data/debe reemplazarse por la ruta al directorio que desea cambiar.
Segfault
32

Marcar un directorio setgid ( g+s) hará que los archivos nuevos hereden la propiedad del grupo del directorio, pero la -gopción de rsync intentará anular esto.

Ignacio Vazquez-Abrams
fuente
11
El bit setgid solo hace que los archivos creados hereden el grupo / if / la persona que crea el nuevo archivo es miembro de ese grupo; si el usuario creador es el propietario pero no es miembro del grupo, o si el directorio es de escritura mundial, el bit setgid no hará nada. Y la umask para todos los usuarios que crean archivos aún debe configurarse para permitir el acceso apropiado al grupo.
dannysauer
1
@dannysauer "si el usuario creador es el propietario pero no un miembro del grupo ... el bit setgid no hará nada" - gracias. Ahora tiene sentido, pero sin comentarios de rsync, me preguntaba por qué no estaba funcionando.
usuario12345
4

Otras respuestas se aplican en un caso general, pero como usted menciona que rsync es una fuente del problema, es posible que solo necesite ajustar su invocación.

Para empezar, la -abandera popular hace permisos de copia rsync; use en -rlugar de -ao agregue -no-p(para la sincronización sin permiso) y -no-g(para la sincronización sin grupo). Además, rsync admite marcas --chmodpara alterar los permisos en los archivos recién creados.

mbq
fuente
3

Su umask está equivocado para los permisos que desea. Desea una umask de 002. Actualmente tiene una umask de 022. Además, el comentario acerca de cómo configurar el directorio setgid es correcto, pero no estoy seguro de si la propiedad del grupo de archivos es algo que desea cambiar o no.

Los permisos de archivos Unix son en realidad un modelo muy simple. Encuentro que las ACL me confunden por completo. :-)

De todo género
fuente
44
"Los permisos de archivos Unix son en realidad un modelo muy simple. Las ACL me parecen completamente confusas". - Siento lo contrario (pero de todos modos +1). Las ACL (y ACE Permitir / Denegar) son simples, y los permisos de Unix no tienen sentido. Pero eso proviene de un tipo que sufre una instalación de Postfix / Dovecot / Clam / SpamAssassin.
jww