É possível criar um arquivo que tenha permissões completas para todos, mas é impossível excluir?

15

Sem usar o sudo, de preferência?

    
por Evan 25.02.2013 / 18:52

4 respostas

3

Tente:

chattr +i filename

Fazendo isso, o arquivo poderá ser recuperado até mesmo pelo usuário root - use com cuidado.

    
por user135564 25.02.2013 / 19:28
23

Não, isso não é possível. Impossível para usuários normais excluir um arquivo: claro.

  1. Você precisará de sudo para impedir que os usuários excluam arquivos. Seu administrador sempre poderá excluir um arquivo.

  2. sudo chattr +i test pode impedir a exclusão, mas exige sudo . Um simples sudo chattr -i test torna possível remover o arquivo. Nenhum outro usuário além de administrador pode usar chattr .

E ... simplesmente reinicializar e entrar no modo de recuperação permitirá que essa pessoa possa excluir esse arquivo. Seria um risco de segurança se houvesse um método para nunca excluir um arquivo.

    
por Rinzwind 25.02.2013 / 19:58
8

É um pouco grosseiro, mas isso está próximo - se você remover o acesso de gravação no diretório, os arquivos dentro dele não poderão ser excluídos. E não requer sudo se você é o proprietário:

=^_^= izkata@izein:~$ mkdir test
=^_^= izkata@izein:~$ touch test/delme
=^_^= izkata@izein:~$ chmod a-w test
=^_^= izkata@izein:~$ echo 'Hello' > test/delme 
=^_^= izkata@izein:~$ cat test/delme 
Hello
=^_^= izkata@izein:~$ rm test/delme 
rm: cannot remove 'test/delme': Permission denied

Assim, você pode definir permissões no próprio arquivo da maneira que quiser.

Além disso, como afirma o @Rinzwind, certamente há muitas maneiras de contornar isso.

    
por Izkata 25.02.2013 / 23:43
8

Para excluir um arquivo, você precisa de permissão de gravação para todos os diretórios aos quais o arquivo está vinculado. Para desvinculá-lo de um diretório, você precisa de permissão de escrita para esse diretório.

Portanto, contanto que você dê permissão de escrita (ou mesmo propriedade) ao arquivo , mas não ao diretório ou diretórios ao qual o arquivo está vinculado, esse arquivo não poderá ser excluído.

A melhor maneira de conseguir isso seria vincular esse arquivo a um diretório que seja de propriedade de root e que não seja gravável por ninguém. Você poderia torná-lo possuído por você, o que significaria que você e o root poderiam excluí-lo.

Isso ainda permitiria que outros usuários vinculassem esse arquivo a outros diretórios e o desvinculassem dali em diante, mas eles ainda não conseguiriam excluir o arquivo, já que eles poderiam desvinculá-lo do seu próprio diretório.

Observe que, para que isso funcione totalmente, a permissão de gravação de cada componente do caminho para o arquivo teria que ser controlada. Porque, por exemplo, se o arquivo for /a/b/the-file e você tiver /a/b não gravável por ninguém, mas todos tiverem acesso de gravação a /a , eles poderão renomear /a/b para outra coisa e recriar seus próprios /a/b e criar seus possui /a/b/the-file ai.

    
por Stéphane Chazelas 25.02.2013 / 23:57