Podría ejecutar el programa incorrecto. Alguien podría hacerte ejecutar su programa.
La -execdir
acción ejecuta su comando desde el directorio que contiene los archivos encontrados. Cuando $PATH
contiene rutas relativas, como .
o cualquier cosa que no comience/
, no -execdir
es 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 PATH
variable de entorno es una ruta absoluta, no debería ocurrir este error, incluso si el directorio que está buscando y -execdir
ing del que se contenida en PATH
. (He comprobado que esto funciona). Si cree que no tiene ningún directorio relativo $PATH
pero 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 $PATH
porque 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/shared
con Alice.
- Alice quiere estadísticas (líneas, palabras, bytes) en los
.c
archivos 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 find
con -execdir
para ejecutarse wc
en los archivos que Eve ha compartido, y llega a los archivos en el mismo directorio que el wc
script personalizado de Eve, Eve wc
ejecuta, ¡con todos los privilegios de Alice!
(Siendo astuta, Eve ha hecho que su wc
guió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_evil
se ejecutó. Sin embargo, son posibles variaciones más simples y también más sofisticadas. )
Cómo find
previene esto.
find
evita que ocurra este problema de seguridad al negarse a tomar la -execdir
acción cuando $PATH
contiene 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
- $PATH
y usted corre find
con -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 $PATH
absoluto.
El riesgo de tener .
u otras rutas relativas $PATH
se incrementa especialmente cuando se usa una utilidad que cambia automáticamente el directorio, por find
lo que no le permitirá usar -execdir
en esta situación.
Pero tener caminos relativos, especialmente .
, en su $PATH
es 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 cd
es para ~eve/shared/blah
y se ejecuta wc *.c
. Si blah
contiene el wc
guión de Eve , do_evil
corre como Alice.