¿Cómo uso el comando linux flock para evitar que otro proceso raíz elimine un archivo?

StackOverflow https://stackoverflow.com/questions/1040828

Pregunta

Me gustaría evitar que uno de mis procesos raíz elimine un determinado archivo. Así que me encontré con el comando flock, parece satisfacer mis necesidades, pero no obtuve su sintaxis.

Si solo indico un bloqueo compartido, no funciona:

flock -s "./file.xml"

Si agrego un parámetro de tiempo de espera, todavía no funciona:

flock -s -w5 "./file.xml"

Parece de esa manera, cabe en la forma flock [-sxun] [- w #] fd # . (¿Qué es este parámetro fd # ?)

Entonces, intenté:

flock [-sxon][-w #] file [-c] command

Uso de flock -s -w5 " ./ file.xml " -c " tail -3 ./file.xml" y funcionó, se ejecutó el comando tail en ./file.xml.

Pero me gustaría saber, ¿el bloqueo finaliza después del comando o dura 5 segundos después del final de la ejecución del comando? Mi pregunta principal es, ¿cómo puedo evitar que otro proceso raíz elimine un archivo en Linux?

¿Fue útil?

Solución

No, el rebaño NO impide que nadie haga nada. Los bloqueos de Unix son AVISOS, lo que significa que evitan que otros procesos también llamen al lote (o, en el caso de un bloqueo compartido, evitan que otro proceso use uno exclusivo).

No impide que root, o cualquier otra persona, lea, escriba o elimine el archivo.

En cualquier caso, incluso si fuera un bloqueo obligatorio, no detendría la eliminación del archivo, ya que es el archivo bloqueado, no la entrada del directorio.

Otros consejos

sudo chattr + i ./file.xml

MarkR es correcto chattr'ing el archivo evitará que se elimine:

-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
risk@DockMaster [2135] --> sudo chattr +i junk.txt
[sudo] password for risk: 
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
risk@DockMaster [2136] --> sudo rm ./junk.txt 
rm: cannot remove `./junk.txt': Operation not permitted
zsh: exit 1     sudo rm ./junk.txt
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
risk@DockMaster [2137] --> sudo rm -f ./junk.txt
rm: cannot remove `./junk.txt': Operation not permitted
zsh: exit 1     sudo rm -f ./junk.txt
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
risk@DockMaster [2138] --> 

flock no es la herramienta adecuada para este trabajo. Si tiene un programa que está eliminando archivos, no debe ejecutar ese programa como root. Deberías ejecutarlo como un usuario diferente. Unix tiene muy buen soporte para permisos de archivos, pero root es una cuenta divina. Root puede hacer todo, y no hay permisos para root.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top