为什么是 。默认不在路径中?


63

多年来,在类似UNIX的系统上(对我而言,最相关的是Linux),我注意到默认情况下,.(当前目录)从来没有在其中$PATH。为什么是这样?

我记得几年前曾读过这是一个安全问题,但我读过的文章并未解释到底是什么问题。是因为有人可能将恶意版本ls或恶意软件保留cp在目录中,而我最终在没有意识到它存在的情况下运行它?


6
对于交互式用户保护,它不如对运行其他程序的其他程序(和脚本)有效。即使是一些精明的用户也喜欢知道,当他们位于一个随机目录中时,该目录ls将是/usr/bin/ls./ls不是。还有一个障碍是,如果您知道如何添加.到路径的尽头,您可能会知道自己在做什么。根应该永远不会.路径,许多系统甚至不让root身份登录了。
msw

Answers:


41

您正确回答了自己的问题,这就是为什么点不在路径中的原因:
防止幼稚的病毒或诚实的错误。

当然,这是一个非常la脚且无用的防病毒措施,没有什么可以阻止您自己在路径中添加点。


13
不过,很有趣的是,您受到了保护,但没有受到-rf目录中唯一文件的保护(rm *很有趣);-)
Joey

Unix答案:为什么首先要命名文件-rf?;)
msw

2
@msw:另一个Unix的答案是,对于管理员帐户,路径中的点通常会被皱眉,但对于非管理员来说,可以。
harrymc 2010年

如果当前路径是最后一条路径,是否可以大大降低风险,以便首先检查程序的所有正常位置?
Jon z

1
@Jonz:不是。但是,如果您的计算机没有病毒,则风险很小。而且,如果计算机被感染了,那么对于现代病毒而言,这就是您的后顾之忧。
哈里克

4

是。如果输入“。” 在路径中,您最终将向当前目录中的文件发送大量命令调用。

即使最后,也仍然存在飞行员错误。例如,Solaris 10缺少“顶部”。我整天在系统上键入“ top”,因为我认为我所在的系统具有“ top”。


1

抱歉,我想以对所选答案的评论形式提出这个问题,但是我还没有超级用户的代表。

安全答案很有意义,但是如果您输入“。” 在您的PATH中,最后,外壳程序在搜索可执行文件时不应该在当前目录中查找最后一个,从而降低安全风险吗?如果确实按顺序搜索$ PATH,它将在找到./ls之前找到/ bin / ls。

因此,我输入“”是多么不安全。在$ PATH环境变量的末尾?

正如我建议的那样。这是我的测试方式:

首先,添加“。” 到PATH环境变量的末尾。

然后,将以下文件放在某个目录中,例如〜/ dir1 / dir2 / test_which.rb:

#!/your/path/to/ruby

puts "this file is from the current directory"

并将此文件放在/usr/bin/test_which.rb

#!/your/path/to/ruby

puts "this file is at /usr/bin/test_which.rb"

确保chmod + x这些文件,以便它们是可执行的。

现在,如果将目录更改为〜/ dir1 / dir2并执行test_which.rb,您将获得输出

this file is at /usr/bin/test_which.rb

确实,如果您在任何地方运行“哪个test_which.rb”,它都应报告

/usr/bin/test_which.rb

您仍然可以通过键入以下命令在当前目录中执行文件:

./test_which.rb

8
没有人打过错字(例如dcor或slor sduo在外壳中),并且被“找不到命令”保存。曾经
丹尼尔·贝克

1
同意Daniel:您可能有一个以拼写错误的命令命名的恶意脚本。另请参阅此答案
ignis 2013年

@DanielBeck,您应该尝试使用别名进行错误提示。我的首选配置ls(颜色输出及其他)别名l完全消除了错别字。
Karl Damgaard Asmussen

1
@KarlDamgaardAsmussen kl
deworde

我个人不添加“。” 到我的路。键入./run或我想在本地目录中执行的操作并不难。它使我免于拾起意料之外的事情。番茄番茄。
Michael Mathews

1

具有“。”不只是安全风险。在PATH中,几乎不可能确保确保任何命令的执行均符合预期。考虑在巨大的目录中运行像“ zip”之类的命令,其中包含成千上万个具有随机名称的文件。其中一个被实际命名为“ zip”的可能性不可忽略,并且会导致很难理解的错误(实际上该文件应该是可执行的,但是可能会发生)。

在编写保留用户的PATH变量的脚本时,尤其如此。一个好的书面脚本应该处理所有极端情况(例如,文件名中带有空格或以“-”开头)。但是要阻止执行当前目录中的文件而不是系统命令是不切实际的...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.