您可能运行了错误的程序。有人可以让您运行他们的程序。
该-execdir
操作从包含找到的文件的目录中运行命令。当$PATH
含有相对路径,如.
或任何不下手/
,-execdir
是不安全,因为其中的文件时发现一个目录(或其他目录解析相对于它)还可以包含一个可执行文件同名,你正在尝试的一个跑步。然后,该可能不受信任的可执行文件将开始运行。
另一个用户可能有意利用此漏洞,导致您运行他们的程序,而不是您尝试运行的程序,这可能会损害或破坏数据安全性。或者,即使没有任何人试图使问题发生,它也可能导致无意中运行错误的程序,这种情况很少见。
如果一切都在你的PATH
环境变量是一个绝对路径,应该不会出现这种错误,即使目录你要搜索并-execdir
从荷兰国际集团被包含在PATH
。(我检查过是否可行。)如果您认为自己没有任何相对目录,$PATH
但仍收到此错误,请使用包括的输出在内的详细信息更新您的问题echo "$PATH"
。
一个具体的例子。
作为可能出问题的示例,假设:
- 爱丽丝有
.
她的$PATH
,因为她希望能够运行在她的任何目录项目cd
“d来,而不打扰与前面加上自己的名字./
。
- 爱丽丝的疯狂夏娃已经
/home/eve/shared
与爱丽丝分享了。
- 爱丽丝希望得到
.c
夏娃与她共享的文件的统计信息(行,单词,字节)。
因此,爱丽丝跑了:
find ~eve/shared -name \*.c -execdir wc {} \;
对于爱丽丝,不幸的是,夏娃创建了自己的脚本,对其进行了命名wc
,将其设置为可执行文件(chmod +x
),然后秘密地将其放置在的目录之一中/home/eve/shared
。夏娃的脚本如下所示:
#!/bin/sh
/usr/bin/wc "$@"
do_evil # Eve replaces this command with whatver evil she wishes to do
因此,当Alice使用find
with与Eve共享的文件-execdir
一起运行wc
,并且到达与Eve的自定义wc
脚本位于同一目录中的文件时,Eve就会wc
运行-具有Alice的所有特权!
(wc
出于谨慎,Eve使她的脚本充当了系统的包装器wc
,因此Alice甚至都不知道出了什么问题,即do_evil
运行了该错误。但是,更简单甚至更复杂的变化都是可能的。 )
如何find
防止这种情况。
find
通过-execdir
在$PATH
包含相对目录时拒绝执行操作来防止发生此安全问题。
find
根据具体情况提供两种诊断消息。
如果.
位于中$PATH
,则(如您所见)它说:
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)
对于这种.
情况,它可能很特别,因为它非常常见。
如果比其他相对路径.
--say,foo
在--appears $PATH
并运行find
与-execdir
,它说:
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
最好不要有相对路径$PATH
。
使用自动更改目录的实用程序时,拥有.
或其他相对路径的风险$PATH
特别高,这就是为什么find
不允许您-execdir
在这种情况下使用的风险。
但是,尤其是.
在您中拥有相对路径具有$PATH
固有的风险,无论如何,实际上最好避免这样做。考虑上面示例中的虚构情况。假设find
Alice 不用运行,而只是运行cd
S ~eve/shared/blah
并运行wc *.c
。如果blah
包含Eve的wc
脚本,do_evil
则作为Alice运行。