Podría ejecutar el programa incorrecto. Alguien podría hacerte ejecutar su programa.
La -execdiracción ejecuta su comando desde el directorio que contiene los archivos encontrados. Cuando $PATHcontiene rutas relativas, como .o cualquier cosa que no comience/ , no -execdires seguro porque un directorio donde se encuentra un archivo (u otro directorio resuelto en relación con él) también podría contener un ejecutable con el mismo nombre que el que está intentando correr. Ese ejecutable potencialmente no confiable se ejecutaría en su lugar.
Esto podría ser explotado deliberadamente por otro usuario para que ejecute su programa, lo que podría causar daños o vulnerar la seguridad de los datos, en lugar del programa que está intentando ejecutar. O, con menos frecuencia, podría simplemente resultar en la ejecución inadvertida del programa incorrecto, incluso sin que nadie intente solucionar el problema.
Si todo en su PATHvariable de entorno es una ruta absoluta, no debería ocurrir este error, incluso si el directorio que está buscando y -execdiring del que se contenida en PATH. (He comprobado que esto funciona). Si cree que no tiene ningún directorio relativo $PATHpero aún recibe este error, actualice su pregunta con detalles que incluyan la salida de echo "$PATH".
Un ejemplo concreto
Como ejemplo de lo que podría salir mal, suponga:
- Alice tiene
.en ella $PATHporque quiere poder ejecutar programas en cualquier directorio que quiera cd, sin molestarse en anteponer sus nombres ./.
- La enemiga frenemy de Alice ha compartido
/home/eve/sharedcon Alice.
- Alice quiere estadísticas (líneas, palabras, bytes) en los
.carchivos que Eve ha compartido con ella.
Entonces Alice corre:
find ~eve/shared -name \*.c -execdir wc {} \;
Desafortunadamente para Alice, Eve creó su propio script, lo nombró wc, lo configuró como ejecutable ( chmod +x) y lo colocó clandestinamente en uno de los directorios debajo /home/eve/shared. El guión de Eve se ve así:
#!/bin/sh
/usr/bin/wc "$@"
do_evil # Eve replaces this command with whatver evil she wishes to do
Entonces, cuando Alice usa findcon -execdirpara ejecutarse wcen los archivos que Eve ha compartido, y llega a los archivos en el mismo directorio que el wcscript personalizado de Eve, Eve wcejecuta, ¡con todos los privilegios de Alice!
(Siendo astuta, Eve ha hecho que su wcguión actúe como una envoltura para el sistema wc, por lo que Alice ni siquiera sabrá que algo salió mal, es decir, que do_evilse ejecutó. Sin embargo, son posibles variaciones más simples y también más sofisticadas. )
Cómo findpreviene esto.
findevita que ocurra este problema de seguridad al negarse a tomar la -execdiracción cuando $PATHcontiene un directorio relativo.
find ofrece dos mensajes de diagnóstico según la situación específica.
Si .está adentro $PATH, entonces (como has 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)
Probablemente tiene un mensaje especial para el .caso, ya que es especialmente común.
Si .aparece una ruta relativa distinta de - dice, foo- $PATHy usted corre findcon -execdir, 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
Es mejor no tener caminos relativos en $PATHabsoluto.
El riesgo de tener .u otras rutas relativas $PATHse incrementa especialmente cuando se usa una utilidad que cambia automáticamente el directorio, por findlo que no le permitirá usar -execdiren esta situación.
Pero tener caminos relativos, especialmente ., en su $PATHes inherentemente arriesgado y es mejor evitarlo de todos modos. Considere la situación ficticia en el ejemplo anterior. Supongamos que en lugar de correr find, Alice simplemente cdes para ~eve/shared/blahy se ejecuta wc *.c. Si blahcontiene el wcguión de Eve , do_evilcorre como Alice.