Mi pregunta es similar a Cómo establecer los permisos de archivo predeterminados en TODOS los archivos recién creados en Linux , pero difiere en formas importantes:
Quiero que todos los archivos creados (o copiados o movidos a) un determinado directorio hereden un conjunto de permisos predeterminados que es diferente del predeterminado del sistema.
Justificación: El directorio en cuestión es la "tolva de admisión" para una aplicación. Los usuarios en un grupo colocan los archivos en el directorio, y la aplicación (que se ejecuta con otra identificación de usuario en el mismo grupo) los toma y los procesa. El problema es que el propietario de cada archivo colocado en el directorio es el usuario que lo colocó allí, y los permisos están predeterminados en "rw-r - r--"; Quiero cambiar eso a "rw-rw ----". La aplicación que realiza la admisión no puede hacer eso explícitamente, porque el ID de usuario con el que se ejecuta la aplicación no posee el archivo en cuestión, ¡y los permisos predeterminados no permiten que la aplicación chmod en el archivo! Obviamente, el usuario podría hacer un chmod después de colocar el archivo allí, pero quiero mantener la "caída" del usuario lo más simple posible. (Estas personas no son alfabetizadas en Linux,
umask parece demasiado poderoso: no quiero establecer permisos predeterminados para cada archivo creado en cualquier lugar por estos usuarios, solo aquellos creados en (o colocados en) este directorio.
¡Por favor asesóreme, gracias!
acl
como una opción almount
comando cuando lo haya agregado/etc/fstab
. Será redundante y cuando ejecutes elmount
comando en tu respuesta, obtendrás una salida como esta:/dev/vda1 on / type ext4 (rw,errors=remount-ro,acl,acl)
(veracl,acl
al final). Por favor corríjalo si no estoy equivocado.Puedo ofrecer una solución alternativa: haga un directorio "drop" separado, ejecute un minijob por separado que corrija los permisos y luego mueva los archivos al directorio de datos de la aplicación. Puede usar incron para eso para que prácticamente no haya un retraso de tiempo notable.
fuente
Puedo pensar en cuatro posibles métodos para hacer esto:
find $HOME/intake -type f -exec chmod 660 {} \;
, diferentes sistemas tienen mejoras de rendimiento en esto (como la-exec+
opción)PROMPT_COMMAND='test -s $PWD/.umask && umask $(cat $PWD/.umask)'";$PROMPT_COMMAND"
sería lo más simple.fuente