Necesito hacer que un archivo no se pueda eliminar, pero permitir que sea modificable y renombrable

Necesito hacer que un archivo no se pueda eliminar, pero permitir que sea modificable y renombrable

Tengo una secuencia de comandos que verifica la presencia de un archivo y, si existe, lee una lista de direcciones de correo electrónico para enviar notificaciones. Cuando no necesito que me notifiquen, por ejemplo, cuando estoy en el trabajo monitoreando el resultado, le cambiaré el nombre. Simplemente no quiero que otros administradores lo eliminen.

chattr +ique el archivo será inmutable, pero solo quiero evitar que se elimine. Me imagino que el programa chattr usaría el número de inodo para rastrear atributos y no el nombre del archivo.

¿Existe alguna utilidad que pueda hacer que esto suceda?

Respuesta1

Ese comentario sobre "otros administradores" da a entender que tienesrootprivilegio en el sistema donde desea almacenar el archivo. Cualquier cosa que pueda configurar en cuanto a permisos puede ser deshacer por alguien con los mismos privilegios.

Si eso no es una preocupación y nadie tiene privilegios extendidos, entonces simplemente puede colocar el archivo en /tmpo /var/tmp, que generalmente tiene el bit t configurado (evitando otrosnousuarios privilegiados deeliminandoél. Puede modificar el archivo para que sea escribible en grupo (y modificable por otros en el mismo grupo).

Respuesta2

¿Los "otros administradores" son maliciosos? ¿Están ahí para atraparte? En caso afirmativo, probablemente no haya nada que puedas hacer.

De lo contrario, quizás la solución más sencilla sea cambiar el script para colocar el archivo en su directorio de inicio. Una variación de esto es crear vínculos físicos al archivo en diferentes directores; siempre y cuando no eliminen (desvinculen)todolos enlaces, el archivo seguirá intacto. (Debe escribir otro script para revisar todas las ubicaciones de los enlaces, encontrar uno que aún exista y luego volver a vincular todos los que se han eliminado). Tenga en cuenta que algunos editores rompen los enlaces (es decir, si edita el archivo).

Esto podría resolver el problema incluso si los "otros administradores" son malintencionados y/o quieren atraparlo, si no tienen experiencia y no son minuciosos.

O haga que el archivo sea inmutable y cambie la secuencia de comandos para utilizar alguna otra prueba para determinar si se deben enviar los correos electrónicos.

Respuesta3

Hasta el punto planteado en algunas de las otras respuestas, podría utilizar la mvutilidad para sugerir una barrera social:

mv yourfile THIS_IS_user38537_FILE_PLEASE_DO_NOT_REMOVE

Respuesta4

[Reemplazo de la respuesta anterior]

Simplemente podría crear un enlace físico al archivo:

ln email_file hard_link

Luego, si se elimina, todavía existe y se puede restaurar fácilmente.


[Respuesta antigua, basada en una mala comprensión del problema]

Una solución sería hacer que el script sea inmutable con chattr, pero activarlo y desactivarlo, no cambiándole el nombre, sino con la presencia o ausencia de un archivo vacío que pueda permitirse perder. Llámalo, digamos, snoozebutton. Si existe, el script no notifica. Si no está allí, el script lo notifica. Hacerlo de esa manera no es seguro si alguien lo elimina accidentalmente: recibes tus notificaciones y también se te notifica que algo sucedió snoozebutton.

Por supuesto, esto supone que no es necesario modificar el script con frecuencia. Si lo hace, querrá ejecutar un pequeño script de utilidad chattr, luego ejecutar el editor y luego ejecutarlo chattrpara bloquearlo nuevamente.

información relacionada