Quiero darles a los usuarios la capacidad de crear archivos de escritura y lectura en otro directorio de usuarios, pero no tener la opción de eliminar el archivo después de creado (un bit no funcionará aquí ...) por ejemplo:
Tengo un usuario manager
con un directorio en el repository
que tengo un usuario worker1
que necesita escribir archivos /manager/repository
pero no puedo eliminar los archivos.
Tengo un usuario en el worker2
que necesito escribir archivos /manager/repository
pero no puedo eliminar los archivos en los
que tengo un usuario worker3
que necesita escribir archivos /manager/repository
pero no puedo eliminar los archivos
pero worker 1-2-3
no puede eliminar los archivos solo después de crearlos manager
y root
puede eliminar los archivos worker 1-2-3
creados.
Intenté algunos chown
y chmod
trucos con la aplicación de la parte adhesiva sin éxito.
fuente
worker*
usuarios escriben en el directorio de cierta manera? Usted mencionó en un comentario que los archivos de registro van aquí, entonces, ¿eso significa que se inicia un determinado ejecutable para crear archivos aquí? Si es así, puede dar permiso alworker
gruposudo
para ejecutar el ejecutable comomanager
. Luego, el ejecutable crearía registros como elmanager
usuario que los trabajadores podrían leer.Respuestas:
A diferencia de Windows, no hay un permiso de eliminación distinto en Unix / Linux. El derecho a eliminar (o crear o renombrar) un archivo está vinculado al directorio que lo contiene. Elimine el permiso de escritura para los trabajadores
/manager/repository/
para negarles a los trabajadores la creación, eliminación y cambio de nombre de archivos.Tenga en cuenta que no es posible permitir la creación de archivos sino negar su eliminación.
fuente
En primer lugar, asegúrese de que ACL esté habilitado en su sistema, luego ejecute este comando
Cómo funciona
Este comando le dará permisos de lectura, escritura y ejecución para el propietario en el directorio
/manager/repository
. Revocará todos los permisos paraworker1
,worker2
yworker3
.Esto le dará a otros usuarios acceso de lectura y escritura, pero negará el acceso de eliminación.
De
man setfacl
:fuente
echo " " > $file
golpearía el contenido del archivo con "", que técnicamente es una escritura, pero elimina efectivamente el contenido. Parece que un repositorio real como svn sería la mejor apuesta aquí.Para hacer eso con permisos, necesitaría un sistema con soporte para ACL similares a las ACL de NFSv4. Por ejemplo, en FreeBSD, si el sistema de archivos está montado con la
nfsv4acls
bandera, puede hacer lo siguiente:Para explícitamente negar el
delete_child
permiso a los miembros delworker-group
grupo.Sin embargo, tenga en cuenta que, dado que los trabajadores serían propietarios de los archivos que crean, aún podrían modificar las ACL en ellos, y al concederse el
delete
permiso, eso prevalecería sobre eldelete_child
permiso del directorio principal y no estoy Seguro que hay una forma de evitarlo (al menos en los sistemas de archivos UFS en FreeBSD). Por ejemplo, podrían hacer:fuente
Para tomar permisos de escritura de la
/manager/repository
carpeta. Por lo tanto, todos los usuarios que no sean root podrán escribir o eliminar de los archivos internos/manager/repository
, pero no eliminar ningún archivo de este directorio.fuente
podemos modificar los archivos y carpetas pero no podemos eliminarlos.
Para eliminar los atributos, ejecute los siguientes comandos:
Para archivos:
Para directorios:
fuente
a
atributo significa solo anexar. ¿Pueden los usuarios editar estos archivos? (2) ¿Cuál es el efecto de establecer ela
atributo en un directorio?