![为什么将“。”添加到 PATH 中是不对的?](https://linux22.com/image/1248680/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%B0%86%E2%80%9C%E3%80%82%E2%80%9D%E6%B7%BB%E5%8A%A0%E5%88%B0%20PATH%20%E4%B8%AD%E6%98%AF%E4%B8%8D%E5%AF%B9%E7%9A%84%EF%BC%9F.png)
我读过一个解释,说它可以允许 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,因此不会出错。:-)