Editar un archivo sin permiso de sobrescritura

Editar un archivo sin permiso de sobrescritura

¿Es posible establecer permisos para que el archivo se mantenga editable pero sin permiso para sobrescribirlo?

Me refiero a la posibilidad de editar el archivo con un editor de texto, pero negando cualquier intento de reemplazar el archivo sobrescribiéndolo. El usuario es root. Sé que no es la estructura común de permisos de archivos Unix, pero estoy buscando un enfoque complicado.

Tengo un paquete de archivos, ya que algunos de ellos han sido editados/personalizados desde la versión original. Al actualizar el paquete con una nueva versión, quiero reemplazar cualquier archivo intacto, pero proteger los archivos personalizados (para no perderme las ediciones). Actualmente, debo hacer esto manualmente: escribir qué archivo se ha editado para no reemplazarlo en una nueva actualización.

Respuesta1

Dado que todos los paquetes intentarán anular el archivo de configuración por completo, puede configurar el archivo en modo de solo agregar de la siguiente manera:

chattr +a bb

Por lo tanto, no puede eliminar/truncar el archivo, solo agregarlo.

Pero en ese caso, impedirá que el administrador de paquetes actualice el sistema.

Si simplemente no desea que el administrador de paquetes anule sus archivos personalizados, puede conservar el paquete, en Debian/ubuntu, puede hacer:

echo package-name hold | dpkg --set-selections

De esa manera, este paquete no se actualizará y sus archivos se conservarán.

Respuesta2

Depende de lo que significa exactamente "sobrescribir". Si eso significa cambiar los datos de un archivo existente, entonces no es posible porque el sistema operativo no tiene forma de distinguir una "edición" de una "sobrescritura": ambas están cambiando los datos del archivo. Si esto significa eliminar y crear un nuevo archivo con el mismo nombre (o cambiar el nombre de un nuevo archivo a este nombre), entonces esto se puede lograr eliminando el permiso de escritura del directorio que contiene el archivo. Obviamente, esto se aplicaría a todos los archivos de ese directorio, no a un archivo específico.

Respuesta3

Primero que nada, haga un tar de los archivos importantes del paquete. Luego actualice. Una vez que haya instalado la nueva versión, descomprima el archivo guardado.en otro directorioy diferencie los archivos que editó con los nuevos del paquete. De esa manera, verá si los archivos nuevos no tienen también cosas importantes que agregar/cambiar (es decir, es posible que los desarrolladores también hayan agregado modificaciones a los archivos que editó, y esos cambios también deben conservarse. No puede simplemente reemplace los archivos nuevos del paquete nuevo con sus ediciones anteriores, sin verificar primero si esos archivos nuevos no contienen nueva información importante)

Respuesta4

Como hace la raíz:

chattr +i foo.txt

Entonces intenta:

vim foo.txt

cambie el archivo en vim e intente guardarlo.

Un caso de uso de ejemplo es chattr +i /etc/resolv.conf para que su molesto servicio de administrador de red no lo sobrescriba con algún archivo bum que obtiene de un enrutador doméstico/de oficina mal configurado.

Puedes deshacerlo con:

chattr -i foo.txt

En el modelo de sistema de archivos de Linux, eso es lo mejor que puede hacer. No hay otra solución.

información relacionada