Permissões de arquivo e salvamento

4

Digamos que você abra um arquivo no qual tenha permissão de gravação. Enquanto isso, você altera as permissões e remove a permissão de gravação enquanto ainda mantém o arquivo aberto em algum editor.

O que acontecerá se você editar e salvar?

    
por lpostula 01.09.2013 / 12:24

2 respostas

5

As permissões de um arquivo são verificadas quando o arquivo é aberto. Alterar as permissões não afeta os processos que já têm o arquivo aberto. Isso é usado às vezes com processos que começam com privilégios adicionais, abrem um arquivo e depois descartam esses privilégios adicionais: eles ainda podem acessar o arquivo, mas podem não ser capazes de reabri-lo.

No entanto, os editores normalmente não mantêm um arquivo aberto. Quando um editor abre um documento, o que acontece sob o capô é que o editor carrega o conteúdo do arquivo na memória e fecha o arquivo. Quando você salva o documento, o editor abre o arquivo e grava o novo conteúdo.

Os editores podem seguir uma das duas estratégias ao salvar um arquivo. Eles podem criar um novo arquivo e depois movê-lo para o lugar. Como alternativa, eles podem abrir o arquivo existente e substituir o conteúdo antigo. A sobregravação tem a vantagem de que a permissão e a propriedade do arquivo não mudam e que ele funciona mesmo em um diretório somente leitura. A principal desvantagem de sobrescrever é que, se o salvamento falhar no meio do caminho (falha do editor, falha do sistema, disco cheio,…), você fica com um documento truncado. Editores diferentes escolhem estratégias diferentes; o bom escreva write-to-new-then-move, se possível, e sobrescreva apenas em um diretório somente leitura (depois de fazer um backup em outro lugar).

Se o editor seguir a estratégia new-then-move, as permissões no arquivo não importam: o editor criará um novo arquivo e precisará apenas de permissão de gravação no diretório para isso. Há duas exceções: se o diretório tiver o bit adesivo , alterando a propriedade do arquivo (mas não a permissão ) pode impossibilitar que o processo mova o novo arquivo para o lugar. Outra exceção é em sistemas que suportam a permissão de exclusão por meio de ACLs (como o OSX): a revogação da permissão de exclusão do arquivo pode fazer o movimento impossível.

Se o editor seguir a estratégia de sobrescrever, a revogação da permissão de gravação tornará a economia impossível. (No entanto, alguns editores que sobrescrevem por padrão podem voltar para o new-then-move.)

No Vim, você pode forçar a estratégia de sobrescrever desativando a backupcopy opção ; veja também por que o valor de inode muda quando editamos em "vi" editor? . No Emacs, você pode forçar a estratégia de sobregravação definindo o backup-by-copying variável para t .

    
por 01.09.2013 / 23:16
2

Você pode fazer todas as edições desejadas, mas quando tentar salvar, o editor reclamará que o arquivo não pode ser gravado. Se o seu editor criar um arquivo de backup, as alterações serão obviamente salvas no arquivo de backup.

Dependendo do seu editor, você poderá substituir isso. Em vim , por exemplo, posso salvar em um arquivo não gravável se eu sou o proprietário do arquivo ou root inserindo o comando :w! (o ! significa forçar a aplicação da ação de gravação). Outros editores, como gedit , por exemplo, não permitem salvar o arquivo e, em vez disso, oferecem a opção Save As... .

Atualizar

Graças ao comentário do msw abaixo, você deve observar que esse comportamento é na verdade, devido à maneira como os editores são projetados: eles usam um arquivo temporário (buffer) para armazenar todas as suas edições até que você realmente decida gravar seu buffer no arquivo.

    
por 01.09.2013 / 12:35