Acesso de arquivo alterado para somente leitura, mas ainda posso gravar no arquivo. Por quê?

1

Estou executando um pequeno sistema embarcado construído usando o buildroot. Eu me deparei com esse comportamento estranho ao tentar configurar minhas permissões de arquivo no dispositivo de destino. Para ilustrar o que me confunde, tentei o seguinte exemplo mais simples

# cd /mydir
# touch tmp.txt
# echo "rubbish" > tmp.txt
# cat tmp.txt
rubbish

# chmod 0444 .
# chmod 0444 tmp.txt
# echo "new-rubbish" > tmp.txt
# cat tmp.txt
new-rubbish

Estou muito confuso com isso. Como posso definir o arquivo e o diretório para serem somente leitura e ainda assim poder modificar o conteúdo deste arquivo? Eu tenho um executável no mesmo diretório e quando eu tento executá-lo eu recebo isso

# chmod 0444 my_binary
# ./my_binary
-sh: ./my_binary: Permission denied

que se comporta como eu esperaria. É evidente que eu tenho um mal-entendido fundamental sobre como o modelo de acesso a arquivos funciona no Linux. Alguém pode explicar por que eu sou capaz de escrever no arquivo que defini para ser somente leitura?

    
por mathematician1975 06.06.2013 / 12:10

1 resposta

3

Como você parece estar fazendo isso como root , isso explica que você tem direitos para escrever no diretório. root também pode anexar ao arquivo, mesmo se as permissões forem -r--r--r-- .

O

echo "new-rubbish" > tmp.txt

trunca o arquivo (como JoelDavis apontou), então ele não o remove e grava novamente (usando bash ).

    
por 06.06.2013 / 12:18