Potresti eseguire il programma sbagliato. Qualcuno potrebbe farti eseguire il loro programma.
L' -execdirazione esegue il comando dalla directory che contiene i file trovati. Quando $PATHcontiene percorsi relativi, come .o tutto ciò che non inizia/ , -execdirè insicuro perché una directory in cui viene trovato un file (o un'altra directory risolta rispetto ad esso) potrebbe contenere anche un eseguibile con lo stesso nome di quello che stai provando correre. L'eseguibile potenzialmente non attendibile verrebbe invece eseguito.
Questo potrebbe essere deliberatamente sfruttato da un altro utente per farti eseguire il suo programma, il che potrebbe causare danni o violare la sicurezza dei dati, invece del programma che stai tentando di eseguire. O, meno spesso, potrebbe semplicemente comportare l'esecuzione involontaria del programma sbagliato, anche senza che nessuno provi a far accadere il problema.
Se tutto nella PATHvariabile di ambiente è un percorso assoluto, questo errore non dovrebbe verificarsi, anche se la directory da cui stai cercando e -execdirin cui è contenuta è contenuta PATH. (Ho verificato che funzioni.) Se ritieni di non avere alcuna directory relativa $PATHma stai ancora riscontrando questo errore, aggiorna la tua domanda con i dettagli, incluso l'output di echo "$PATH".
Un esempio concreto.
Come esempio di cosa potrebbe andare storto, supponiamo:
- Alice ha
.in lei $PATHperché vuole essere in grado di eseguire programmi in qualunque directory si trovi cd, senza preoccuparsi di anteporre i loro nomi ./.
- La frenetica Eva
/home/eve/shareddi Alice ha condiviso con Alice.
- Alice vuole statistiche (righe, parole, byte) sui
.cfile che Eva ha condiviso con lei.
Quindi Alice corre:
find ~eve/shared -name \*.c -execdir wc {} \;
Sfortunatamente per Alice, Eva ha creato la sua sceneggiatura, l'ha nominata wc, l'ha impostata come eseguibile ( chmod +x) e l'ha collocata clandestinamente in una delle directory sotto /home/eve/shared. La sceneggiatura di Eva appare così:
#!/bin/sh
/usr/bin/wc "$@"
do_evil # Eve replaces this command with whatver evil she wishes to do
Quindi, quando Alice usa findcon -execdirper essere eseguita wcsui file che Eva ha condiviso e arriva ai file nella stessa directory dello wcscript personalizzato di Eva, Eva wccorre, con tutti i privilegi di Alice!
(Essendo furbo, Eva ha fatto in modo che la sua wcsceneggiatura agisca come un involucro per il sistema wc, quindi Alice non saprà nemmeno che qualcosa è andato storto, cioè che è do_evilstato eseguito. Tuttavia, sono possibili variazioni più semplici - e anche più sofisticate. )
Come findimpedisce questo.
findimpedisce che si verifichi questo problema di sicurezza rifiutando di eseguire l' -execdirazione quando $PATHcontiene una directory relativa.
find offre due messaggi diagnostici a seconda della situazione specifica.
Se .è dentro $PATH, allora (come hai visto) dice:
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)
Probabilmente ha un messaggio speciale per il .caso in quanto è particolarmente comune.
Se un percorso relativo diverso .--say, foo--appears in $PATHe si esegue findcon -execdir, si dice:
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
È meglio non avere affatto percorsi relativi $PATH.
Il rischio di avere .o altri percorsi relativi $PATHè particolarmente accentuato quando si utilizza un'utilità che modifica automaticamente la directory, motivo findper cui non è possibile utilizzarlo -execdirin questa situazione.
Ma avere percorsi relativi, in particolare ., nel tuo $PATHè intrinsecamente rischioso ed è comunque davvero meglio evitarlo. Considera la situazione immaginaria nell'esempio sopra. Supponiamo che invece di correre find, Alice semplicemente cdS per ~eve/shared/blahe corre wc *.c. Se blahcontiene la wcsceneggiatura di Eva , do_evilfunziona come Alice.