为什么不使用-execdir
find动作组合-exec
却不安全呢?
当我运行以下命令时,我收到以下提示消息:
/path/to/currentDir/$ find . -type f -name 'partOfFileNames*' -execdir rm -- {} +
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)
是什么导致此提示出现?
该-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身份运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句