Come posso usare il comando flock di linux per evitare che un altro processo di root elimini un file?

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

Domanda

Vorrei impedire a uno dei miei processi di root di eliminare un determinato file. Quindi mi sono imbattuto nel comando flock, sembra adattarsi alle mie necessità, ma non ho avuto la sua sintassi.

Se indico solo un blocco condiviso, non funziona:

flock -s "./file.xml"

Se aggiungo un parametro di timeout, non funziona ancora:

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

Sembra in questo modo, si adatta in flock [-sxun] [- w #] fd # . (Che cos'è questo parametro fd # ?)

Quindi, ho provato:

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

Usando flock -s -w5 " ./ file.xml " -c " tail -3 ./file.xml" e ha funzionato, il comando tail su ./file.xml è stato eseguito.

Ma vorrei sapere, il blocco termina dopo il comando o dura 5 secondi dopo la fine dell'esecuzione del comando? La mia domanda principale è: come posso evitare che un altro processo di root elimini un file in Linux?

È stato utile?

Soluzione

No, il gregge NON impedisce a nessuno di fare nulla. I blocchi Unix sono ADVISORY, il che significa che impediscono ad altri processi anche di chiamare flock (o, nel caso di un blocco condiviso, impedire un altro processo usando uno esclusivo).

Non impedisce a root, né a chiunque altro, di leggere, scrivere o eliminare il file.

In ogni caso, anche se fosse un blocco obbligatorio, non fermerebbe l'eliminazione del file, in quanto è il file bloccato non la voce della directory.

Altri suggerimenti

sudo chattr + i ./file.xml

MarkR è corretto per chattare sul file impedirà che venga eliminato:

-(~)-------------------------------------------------------------------------------------------------------(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 non è lo strumento giusto per questo lavoro. Se si dispone di un programma che sta eliminando i file, non è necessario eseguirlo come root. Dovresti eseguirlo come un altro utente. Unix ha un ottimo supporto per i permessi dei file, ma root è un account god. Il root può fare tutto e non ci sono permessi per il root.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top