Como faço para usar o comando linux rebanho para evitar outro processo raiz de excluir um arquivo?

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

Pergunta

Gostaria de evitar que um dos meus processos de raiz de excluir um determinado arquivo. Então me deparei com o comando rebanho, parece caber minha necessidade, mas eu não recebi sua sintaxe.

Se eu só indicar um bloqueio compartilhado, ele não funciona:

flock -s "./file.xml"

Se eu adicionar um parâmetro de tempo limite, ele ainda não funciona:

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

Parece que maneira, ele se encaixa na maneira flock [-sxun][-w #] fd#. (O que é este parâmetro fd#?)

Então, eu tentei:

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

Usando flock -s -w5 "./file.xml" -c "tail -3 ./file.xml" e funcionou, comando tail no ./file.xml foi executado.

Mas eu gostaria de saber, é que o fim da trava após o comando ou ele últimos 5 segundos após o término da execução do comando? A minha pergunta principal é, como posso impedir que outro processo de raiz de excluir um arquivo no linux?

Foi útil?

Solução

Não, rebanho não impede ninguém de fazer qualquer coisa. Unix fechaduras são Consultivo, o que significa que eles impedir que outros processos também chamar rebanho (ou, no caso de um bloqueio compartilhado, evitar outro processo utilizando um exclusivo).

Ele não pára de raiz, ou qualquer outra pessoa, de ler, escrever ou apagar o arquivo.

Em qualquer caso, mesmo que fosse um bloqueio obrigatório, ele não iria parar o arquivo a ser excluído, como é o arquivo que está sendo não bloqueado a entrada de diretório.

Outras dicas

sudo chattr +i ./file.xml

MarkR está correto chattr'ing o arquivo vai impedir que ele seja excluído:

-(~)-------------------------------------------------------------------------------------------------------(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] --> 

rebanho não é a ferramenta certa para este trabalho. Se você tem um programa que é a exclusão de arquivos, você não deve executar esse programa como root. Você deve executá-lo como um usuário diferente. Unix tem muito bom suporte para permissões de arquivo, mas raiz é uma conta de Deus. Root pode fazer tudo, e não há permissões para raiz.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top