为什么将“。”添加到 PATH 中是不对的?

为什么将“。”添加到 PATH 中是不对的?

我读过一个解释,说它可以允许 cwd 中的恶意可执行文件代替类似名称的内置程序和核心实用程序运行。

如果要造成真正的破坏,这难道不仅适用于 root 吗?而且无论如何,如果将 '.' 附加到 PATH 而不是前面,那么这难道不能避免这种“替换”攻击吗,因为 PATH 的目录是按顺序扫描的?(它们不是按顺序扫描的吗?)

除此以外还有其他问题吗?

答案1

这取决于你对灾难的定义。如果你认为丢失所有个人文件就是灾难,那么我会说是的,即使你有备份。

至于附加,是的,这更安全,但除非你的打字水平比我好很多,否则拼写错误也会导致同样的麻烦。

答案2

是的,路径变量是按顺序处理的,并且您的解决方案将确保已知的可执行文件首先被处理。

但是,您仍然为恶意可执行文件留下了运行空间。例如,如果我将一个 bash 脚本粘贴到某个地方,该脚本运行“rm -fr ~/”或更恶意的脚本,然后将可执行文件命名为“sl”(“ls”的常见拼写错误),您可能会陷入各种麻烦!

不要告诉我你从来没有运行过拼写错误的命令;)

答案3

路径中包含“.”会导致命令神奇地出现和消失。 cd 到某个地方,您的命令开始或停止工作。如果命令是“./doit”,则显然您用完了“.”,如果命令是“doit”,则更是如此。同样的问题也适用于“..”以及任何以“./”或“../”开头的路径以及任何其他相对路径。

对于个人命令,我推荐 $HOME/bin。如果它们足够有用,它们可以从那里迁移到 /usr/local/bin。

编辑:正如已接受的答案中提到的,当前目录中的可执行文件(程序)可能会对您的系统造成可怕的影响。如果它们与常用命令同名,则通过更改包含它们的目录可以相对容易地触发它们。众所周知,恶意的人会编写此类程序以造成伤害。通过将相对路径条目放在 PATH 列表的末尾,可以减轻此类程序的意外执行。以常见命令的常见拼写错误命名的程序仍可能被触发。

答案4

只需输入 ./sl 即可,它非常具体地表明“我想在 CWD 中执行名为“sl”的文件。由于 $PATH,因此不会出错。:-)

相关内容