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

15

Sem usar o sudo, de preferência?

Evan
fonte
2
Deus, raiz, o que é a diferença? ars.userfriendly.org/cartoons/?id=19981111 Por uma questão prática, um arquivo que nem mesmo o root poderia excluir depois seria o sonho dos autores de malware.
Dan Neely
Concordo @DanNeely Além disso, a formatação é uma forma de apagar um arquivo também;)
Rinzwind

Respostas:

3

Experimentar:

chattr +i filename

Isso, porém, tornará o arquivo impossível de excluir, mesmo pelo rootusuário - use com cuidado.

Aditya
fonte
5
ao fazer touch test && chattr +i testisso gera um erro; chattr: Operation not permitted while setting flags on test. Você precisa sudodisso. Além disso: ainda é possível excluir o arquivo: sudo chattr -i test && rm testfunciona.
Rinzwind
23

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

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

  2. sudo chattr +i testpode impedir a exclusão, mas requer sudo. Um simples sudo chattr -i testtorna possível remover o arquivo. Nenhum outro usuário além do administrador pode usarchattr .

E ... simplesmente reiniciar 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 conseguir excluir um arquivo.

Rinzwind
fonte
8

É um pouco grosseiro, mas 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 é necessário sudose 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 arquivo em si, como desejar.

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

Izkata
fonte
Parece exatamente o que o OP queria. (Embora por que eles quisessem, não tenho certeza.) Os usuários podem ler, alterar e executar os arquivos, mas não podem desvinculá-los (removê-los).
Eliah Kagan
8

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

Desde que você conceda permissão de gravação (ou até propriedade) ao arquivo, mas não ao diretório ou aos diretórios aos quais 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 pertence à raiz e que não pode ser gravado por ninguém. Em vez disso, você poderia torná-lo propriedade de você, o que significaria que você e o root poderiam excluí-lo.

Isso ainda permitirá que outros usuários vinculem esse arquivo a outros diretórios e desvinculem-no a partir de então, mas ainda não poderão excluir o arquivo, pois poderão desvinculá-lo do seu próprio diretório.

Observe que, para que isso funcione completamente, a permissão de gravação de cada componente do caminho no arquivo deve ser controlada. Porque, por exemplo, se o arquivo é /a/b/the-filee você /a/bnão pode ser gravado por ninguém, mas todos têm acesso de gravação /a, eles podem renomear /a/bpara outra coisa, recriar o próprio /a/be criar o seu /a/b/the-filelá.

Stéphane Chazelas
fonte