¿Hay alguna manera de evitar la eliminación de ciertos archivos del directorio propiedad del usuario?

42

Digamos que el usuario tiene Directory1 y contiene File1 File2 CantBeDeletedFile ¿Cómo hacer para que el usuario nunca pueda eliminar CantBeDeletedFile ?

Si cambio la propiedad de Directory1 y elimino los permisos de escritura, los usuarios no podrán eliminar ningún archivo. Tampoco podrían agregar nuevos archivos, etc.

Solo quiero poder configurar algunos archivos que nunca se eliminarán.

Descripción más específica.

Estoy creando perfiles de usuario. Estoy creando archivos de iniciador de aplicaciones en su escritorio . Por lo tanto, quiero configurar algunos archivos de inicio (.desktop) y hacerlos para que el usuario solo pueda iniciarlos y no puedan cambiar el nombre ni eliminarlos, solo inicie.

Actualmente, si el usuario posee el directorio que contiene cualquier archivo. El puede borrar.

Si no hay una forma genérica para todos * nix, es un FS Linux y ext4.

bakytn
fuente

Respuestas:

40

(No me gusta entrometerse en la casa de los usuarios, creo que se les debe permitir hacer lo que quieran hacer con sus casas ... pero de todos modos ...)

Esto debería funcionar en Linux (al menos). Supongo que userya es miembro del grupo user. Una solución es cambiar la propiedad Directory1y establecer el bit fijo en el directorio:

chown root:user Directory1
chmod 1775 Directory1

Luego use:

chown root Directory1/CantBeDeletedFile

Ahora, userno podrá eliminar este archivo debido al bit pegajoso¹. El usertodavía puede agregar / eliminar sus propios archivos Directory1. Pero tenga en cuenta que no podrán eliminar Directory1porque nunca se vaciará.

-
1. Cuando el bit fijo está habilitado en un directorio, los usuarios (que no sean el propietario) solo pueden eliminar sus propios archivos dentro de un directorio. Esto se usa en directorios como /tmpcuyos permisos son 1777= rwxrwxrwt.

Stéphane Gimenez
fuente
Tampoco me gusta, pero los usuarios son novatos en el mundo de Linux. SI eliminan un lanzador por coincidencia, comienzan a
enviar
Gracias funciona! No estoy seguro de cómo procederé. Con chattr o de esta manera. Si lo haces en tu camino. Todavía puedo eliminar el directorio como root. Con la solución superior (chattr), incluso la raíz no puede eliminar la carpeta.
bakytn
@bakytn: ¿es solo una precaución o realmente recibió la llamada de soporte? Debido a que la mayoría de los novatos probablemente tendrán demasiado miedo para meterse con archivos que no conocen.
Lie Ryan
@Lie Ryan 100% seguro de que pedirían ayuda. Pero sí, actualmente es solo una precaución.
bakytn
Tarde o temprano, las ruedas de entrenamiento deben desprenderse ... y si no han aprendido a andar en bicicleta, el accidente será algo digno de contemplar. Estoy de acuerdo con la respuesta, probablemente, complementado withcopious ayuda en línea y el correo basura enlatada "Si 'accidentalmente' borrado ThisDesktopFile, vaya primero a la pared más cercana y golpear su cabeza con fuerza contra ella 3 veces (por suerte), y luego hacerlo cp /here/is/the/master/ThisDesktopFile $HOME. Firmado : BOfH "
vonbrand
63

Haga que el archivo sea inmutable con el iatributo.

chattr +i file.desktop

ver man chattrpara más información.

Keith
fuente
8
Agregué esta nota porque no pude deducirla de la página de manual mencionada: chattrsolo funciona en los sistemas de archivos ext2 / ext3 / ext4.
manatwork
¡Esto es genial! ¡Funcionó! ¡Gracias Señor! Solución elegante, pero una limitación. Incluso la raíz no puede eliminar esos archivos sin primero hacerlos mutables. Pero esto es genial en realidad. No estaba seguro de qué respuesta aceptar. Aceptado de manera más genérica pero menos rápido
bakytn 05 de
@manatwork también funciona en XFS al menos, supongo que algunos otros sistemas de archivos también admiten estos atributos.
Ruslan
Para 'deshacer' este comando, solo hazlochattr -i file.desktop
GreenRaccoon23
1
Acabo de probar esto en zfs en Linux y funcionó. Quería evitar la eliminación de un archivo utilizado para indicarle al programa de respaldo baculaque ignore la carpeta.
drescherjm
2

No creo que haya una manera de evitar la eliminación de un archivo individual con permisos de archivo Unix, pero puedo pensar en una solución alternativa: escribir un demonio que lo reemplace cuando se elimine. inotify-toolses perfecto para este tipo de cosas si estás en Linux.

Hay algunas maneras de reemplazar el elemento eliminado: copie uno nuevo en su lugar o mantenga el archivo real en un lugar seguro y simplemente copie un enlace en el directorio del usuario. Para el enlace, puede usar un enlace simbólico o un enlace duro. Comenzaría con un enlace simbólico, pero algunos (muy pocos) programas no manejan enlaces simbólicos correctamente. Si encuentra que el usuario encuentra un programa como este, use un enlace duro en su lugar.

Shawn J. Goff
fuente
0

Un simple

chmod -i filename

"protegerá" un poco ese archivo de la eliminación.

rm filename
rm: remove write-protected regular file 'filename'?

Todavía puede eliminarlo, pero al menos debe estar lo suficientemente seguro de lo que está haciendo.

fiatjaf
fuente