Por que $ find -delete não funciona às vezes?

4

Eu acho que estou falando sobre essa parte da página do manual, que é apenas muito indecifrável para mim:

   -delete
      ... It will not attempt to delete a filename with a ''/'' character in its
      pathname relative to ''.'' for security reasons...

Especificamente, o que estou tentando fazer é $ find . -name '.svn' -type d -delete . Eu percebo que posso usar -exec para isso, mas find parece funcionar sem problemas para outros nomes, incluindo diretórios profundos (que obviamente contêm muitos / caracteres em seus nomes de caminho).

Talvez esteja ignorando dotfiles e a documentação esteja errada?

    
por NReilingh 17.02.2012 / 05:39

1 resposta

2

O "motivo de segurança" é que entre o momento em que find está enumerando os arquivos e excluindo-os, pode ser possível que um invasor modifique um componente do caminho de um arquivo, de modo que ele se torne um link simbólico para um diretório inesperado , resultando na exclusão de um arquivo com o mesmo nome de um diretório inesperado. Por exemplo, você pode acabar excluindo /etc/passwd em vez de /tmp/foo/passwd se o invasor puder alterar foo para ser um link simbólico apontando para /etc .

Seção 9.1.5 ("Uma versão mais segura de -exec") do GNU encontra documentação discute este problema em mais detalhes.

    
por 17.02.2012 / 07:37