Você pode executar o programa errado. Alguém poderia fazer você executar o programa deles.
A -execdiração executa seu comando no diretório que contém os arquivos encontrados. Quando $PATHcontém caminhos relativos, como .ou qualquer coisa que não comece/ , -execdiré inseguro porque um diretório em que um arquivo é encontrado (ou outro diretório resolvido em relação a ele) também pode conter um executável com o mesmo nome que você está tentando para correr. Esse executável potencialmente não confiável seria executado.
Isso pode ser deliberadamente explorado por outro usuário para fazer com que você execute o programa dele, o que pode causar danos ou violar a segurança dos dados, em vez do programa que você está tentando executar. Ou, com menos frequência, isso pode resultar simplesmente na execução inadvertida do programa errado, mesmo sem que ninguém tente fazer o problema acontecer.
Se tudo em sua PATHvariável de ambiente é um caminho absoluto, este erro não deve ocorrer, mesmo que o diretório que você está pesquisando e -execdiring de está contido no PATH. (Verifiquei se isso funciona.) Se você acredita que não possui nenhum diretório relativo, $PATHmas ainda está recebendo esse erro, atualize sua pergunta com detalhes, incluindo a saída de echo "$PATH".
Um exemplo concreto.
Como um exemplo do que poderia dar errado, suponha:
- Alice tem
.nela $PATHporque quer ser capaz de executar programas em qualquer diretório que deseje cd, sem se preocupar em acrescentar seus nomes ./.
- Eve frenemy de Alice compartilhou
/home/eve/sharedcom Alice.
- Alice deseja estatísticas (linhas, palavras, bytes) nos
.carquivos que Eve compartilhou com ela.
Então Alice corre:
find ~eve/shared -name \*.c -execdir wc {} \;
Infelizmente para Alice, Eve criou seu próprio script, nomeou-o wc, definiu-o como executável ( chmod +x) e o colocou clandestinamente em um dos diretórios abaixo /home/eve/shared. O script de Eve é assim:
#!/bin/sh
/usr/bin/wc "$@"
do_evil # Eve replaces this command with whatver evil she wishes to do
Então, quando Alice usa findcom -execdirpara executar wcnos arquivos que Eve compartilhou, e chega aos arquivos no mesmo diretório que o wcscript personalizado de Eve, ela é wcexecutada - com todos os privilégios de Alice!
(Sendo esperta, Eve fez seu wcscript atuar como um invólucro para o sistema wc, para que Alice nem saiba que algo deu errado, isto é, do_evilfoi executado. No entanto, variações mais simples - e também mais sofisticadas - são possíveis. )
Como findevita isso.
findevita que esse problema de segurança ocorra ao recusar a -execdiração quando $PATHcontém um diretório relativo.
find oferece duas mensagens de diagnóstico, dependendo da situação específica.
Se .estiver dentro $PATH, então (como você viu) diz:
find: The current directory is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove the current directory from your $PATH (that is, remove "." or leading or trailing colons)
Provavelmente tem uma mensagem especial para o .caso, pois é especialmente comum.
Se um caminho relativo que não .--say, foo--appears em $PATHe você corre findcom -execdir, ele diz:
find: The relative path `foo' is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove that entry from $PATH
É melhor não ter caminhos relativos $PATH.
O risco de ter .ou outros caminhos relativos $PATHé especialmente aumentado ao usar um utilitário que altera automaticamente o diretório, e é por isso findque não o deixa usar -execdirnessa situação.
Mas ter caminhos relativos, especialmente .no seu, $PATHé inerentemente arriscado e é realmente melhor evitado de qualquer maneira. Considere a situação fictícia no exemplo acima. Suponha que, em vez de correr find, Alice simplesmente cdvá ~eve/shared/blahe corra wc *.c. Se blahcontém o wcscript de Eve , do_evilé executado como Alice.