2011-09-22 43 views

回答

5

由于默认情况下当前目录未进入PATH环境变量,并且仅在PATH指定的目录内搜索没有路径限定条件的可执行文件。您可以通过在PATH的末尾添加.来改变这种行为,但这种做法并不常见,您只需习惯这种UNIX主义。

这样做的想法是,如果在当前目录内首先搜索到可执行文件,恶意用户可以在其主目录中放入名为例如lsgrep或其他常用命令,欺骗管理员使用它,也许以超级用户的权力。另一方面,如果您将.放在PATH的末尾,则不会感觉到此问题,因为在这种情况下,系统目录会先搜索。

但是:我们的恶意用户仍然可以创建他的危险脚本,这些脚本被命名为常用命令的常见拼写错误,例如, slls(protip:将其绑定到Steam Locomotive,并且不会被欺骗:D)。

所以你会发现,如果你输入一个没有路径限定的可执行文件名,你肯定会从系统目录中运行一些东西(因此应该是安全的)。

+0

你知道为什么不搜索它吗?为什么我不想在默认情况下搜索它(假设这是可能的)? –

+0

已更新回答。 –

+0

@dan:因为不然的话,它会让你很容易意外地运行错误的东西(想象一下你会创建一个名为'ls'的脚本) –

5

由于当前目录通常不包含在默认PATH中,出于安全原因:通过不查看当前目录,种植恶意程序可能会导致由合法实用程序名称造成的恶意程序避免。举个例子,假设有人设法在您的目录中植入一个名为ls的脚本,该脚本执行rm *

如果您希望将当前目录包含在路径中,并且您将bash用作默认shell,则可以通过您的~/.bashrc文件添加路径。

export PATH=$PATH:. 

基于上述解释,通过流氓程序所带来的风险是由在寻找.去年减少,因此所有众所周知的合法程序将被发现之前。被检查。

可能也通过/etc/profile修改系统范围的设置,但这可能不是一个好主意。

+0

如何找出当前路径? –

+0

'echo $ PATH' in your shell(意思是打印出名为PATH的环境变量。 – fvu

1

因为当前目录不在PATH中(与Windows中的cmd不同)。这是一项安全功能,因此当前目录中的恶意脚本不会意外运行。

虽然不建议,但为了满足好奇心,您可以将.添加到PATH,然后您会看到x.sh将起作用。

1

如果您没有明确指定一个目录,那么shell会搜索您的$PATH中列出的目录中的命名可执行文件。如果您的$PATH不包括.,则不搜索当前目录。

$ echo $PATH 
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin 

这是故意的。如果搜索了当前目录,那么您键入的命令可能会根据您所在的目录进行更改。这将允许恶意用户将名为lscp的二进制文件放入您经常使用的目录中,并诱使您运行其他程序。

$ cat /tmp/ls 
rm -rf ~/* 
$ cd /tmp 
$ ls 
*kaboom* 

我强烈建议你添加.$PATH。你会很快习惯于打字./,这没什么大不了的。

+0

另外:即使你把'.'放在默认的搜索路径之后,你仍然容易受到拼写错误的影响(例如'la','cdd','bim' ...) – duskwuff

0

由于目前的工作目录不在您的$ PATH中,因此您无法通过键入 x.sh 来执行您的文件。要查看您当前的工作目录,键入

$ pwd 

要查看你的$ PATH,类型

$ echo $PATH 

到当前目录添加到您的$ PATH本次会议,类型

$ PATH=$PATH:. 

要永久添加它,请编辑主目录中的文件.profile

+0

将'.'加入'PATH'是安全智能的一个坏主意,不要这样做。 – pvoosten

相关问题