2010-06-12 04:06:50 +0000 2010-06-12 04:06:50 +0000
86
86

¿Cómo hacer que los permisos de los nuevos archivos hereden del directorio principal?

Tengo un directorio llamado data. El robot escribe en el directorio data y actualiza los archivos que hay dentro. La idea es que data esté abierto para que tanto yo como el robot podamos actualizar.

Así que configuro el permiso y el grupo propietario así

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 propietario recursivamente como el directorio padre.

Regularmente subo nuevos archivos al directorio data usando rsync. Desafortunadamente, los nuevos archivos subidos no heredan el permiso del directorio padre como espero. En su lugar, 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 los archivos.

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

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

A menudo me confunde el permiso de archivos de Unix. ¿Acaso tengo un plan correcto? Estoy usando Debian lenny.

Respuestas (4)

53
53
53
2010-06-13 02:10:58 +0000

No quieres cambiar la umask por defecto de tu sistema, eso es un riesgo de seguridad. La opción de sticky bit funcionará hasta cierto punto, pero usar ACL’s es la mejor manera de hacerlo. Esto es más fácil de lo que crees. El problema con las ACL básicas es que no son recursivas por defecto. Si estableces una ACL en un directorio, sólo los archivos dentro de ese directorio heredan la ACL. Si creas un subdirectorio, no recibe la ACL del padre a menos que la ACL esté configurada para recursar.

En primer lugar, asegúrese de que las ACL están activadas para el volumen en el que se encuentra el directorio. Si tiene tune2fs, puede realizar lo siguiente:

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

Si no tiene tune2fs, 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 “defaults” significa que en mi sistema (CentOS 5.5), las ACL están activadas. En caso de duda, déjalo por defecto. Si tratas de poner la ACL y te da error, vuelve y añade la opción acl a /etc/fstab justo después de defaults: defaults,acl.

Por lo que entiendo, quieres que todos los del 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/
32
32
32
2010-06-12 04:13:24 +0000

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

4
4
4
2015-09-03 15:36:56 +0000

Otras respuestas se aplican en un caso general, pero como mencionas que rsync es una fuente del problema, puede que sólo necesites afinar su invocación.

Para empezar, la popular bandera -a hace que rsync copie los permisos; usa -r en lugar de -a o añade -no-p (para no sincronizar permisos) y -no-g (para no sincronizar grupos). También rsync soporta la bandera --chmod para alterar los permisos de los archivos recién creados.

3
3
3
2010-06-12 04:43:45 +0000

Tu umask es incorrecto para los permisos que quieres. Usted quiere un umask de 002. Actualmente tiene un umask de 022. También, el comentario sobre hacer el directorio setgid es correcto, pero no estoy seguro si la propiedad del grupo de archivos es algo que quieres cambiar o no.

Los permisos de archivos de Unix son en realidad un modelo muy simple. Yo mismo encuentro las ACLs completamente confusas. :-)