Como posso acrescentar arquivos a um diretório sem permissões de gravação?

4

Eu entendo este primeiro exemplo:

> mkdir foo
> chmod u-w foo
> touch foo/test
touch: cannot touch 'foo/test': Permission denied
> echo "BAD" >> foo/test
bash: foo/test: Permission denied

Isso faz sentido: não tenho permissão de gravação no diretório para não poder gravar nenhuma alteração. Eu não posso tocar nem criar um arquivo que possa ser anexado. Por que isso funciona, no entanto?

> mkdir bar
> touch bar/test
> chmod u-w bar
> echo "BAD" >> bar/test 
> cat bar/test 
BAD
    
por Hooked 16.10.2012 / 17:24

1 resposta

4

Você não tem permissão de gravação no diretório. Isso significa que você não pode modificar o diretório. Criar ou remover um arquivo no diretório (que inclui criar ou excluir um arquivo, bem como mover o arquivo para dentro ou fora do diretório) modifica o diretório. Se você modificar um arquivo dentro do diretório (anexando ou sobrescrevendo-o), isso não modifica o próprio diretório.

Você também pode modificar os metadados do arquivo (datas, permissões, etc.), desde que seja o proprietário do arquivo, independentemente das permissões no diretório e no arquivo. Você pode até mesmo modificar indiretamente o tempo de acesso de um arquivo lendo-o, mesmo que a leitura seja a única permissão que você tenha no arquivo. O acesso aos metadados dos arquivos não é controlado por permissões.

A única permissão no diretório que é relevante para modificar arquivos dentro dela é a permissão de execução. Controla se você pode acessar o arquivo. (A permissão de leitura no diretório controla se você pode listar os arquivos do diretório; com leitura mas não executar, você pode ver os nomes dos arquivos mas não acessar os arquivos; com executar mas não ler, você pode acessar arquivos no diretório, mas somente Se você souber o nome deles.) Contanto que você possa acessar o arquivo, as permissões do diretório não importam mais.

Se você quiser tornar uma árvore de diretórios inteira somente para leitura, você não pode fazê-lo alterando as permissões apenas no diretório, você tem que alterar a permissão de cada arquivo. Como alternativa, cria uma visualização somente leitura .

    
por 17.10.2012 / 00:00