添加安全吗?到我的路径?怎么会?


49

我看到人们在其他 答案中提到在环境变量中包含当前工作目录(' .')是一个坏主意$PATH,但是还没有找到专门解决该问题的问题。

那么,为什么我不应该添加.我的路径呢?如果尽管我发出了所有警告,我仍然要注意什么?将其添加到末尾比开始更安全吗?


Answers:


39

如果您是计算机上的唯一用户,那么只要知道您在做什么就可以。通常要担心的是,通过将当前目录放在中PATH,您将看不到命令​​作为常量列表。如果需要从当前目录运行脚本/程序,则始终可以通过./在其名称前添加前缀来明确运行它(您告诉系统“我想从当前目录运行此文件”)。

假设现在您的文件系统中都包含所有这些小脚本;有一天,您肯定会犯错。因此,将您PATH的静态路径作为预定义列表仅与顺序有关,并且可以避免潜在的问题。

但是,如果要添加.到中PATH,建议将其添加到列表(export PATH=$PATH:.)的末尾。至少您不会以这种方式覆盖系统范围的二进制文件。

如果你的系统上的根,并有系统暴露给其他用户的账户,其.PATH是一个巨大的安全隐患:你可以cd到一些用户的目录,并无意中运行恶意脚本也只是因为输入错误的事情或脚本与系统范围的二进制文件具有相同的名称。


1
+接受基础理论,并提及即使您是系统上的唯一用户,问题仍然存在。这两个答案都带来了优异的成绩。我要补充一点,无论何时与根用户共享目录,都会增加风险。
Jander

6
即使是机器上的唯一用户:每次提取不受信任的tar时,它都可以将放置ls在当前目录中。接下来,您ls需要检查提取的文件,并且您已经运行了恶意代码。
lesmana '17

35

风险是有人将恶意可执行文件放到了您当前所在的目录中。

最坏的情况发生在以下情况:

  • 您以root用户身份登录,因为恶意命令具有无限的破坏力
  • .在PATH的开头,因为您可以在不注意标准命令的情况下覆盖标准命令(通常该命令可以将ls其自身从列表中隐藏起来)。

如果您以常规用户身份登录并且.PATH末尾有,但风险仍然低得多:

  • 有人可能会发现您经常输入错误的命令并安装匹配的命令
  • 有人可能会安装名称未安装的伪造命令。

请注意,无论如何,即使您是机器的唯一用户,风险仍然存在。例如,如果您恰巧提取了从受感染站点下载的存档,则将安装恶意软件。


15
安装sl以查看第3点发生的频率。
jordanm

alias l=`ls`
2014年

它不一定是恶意的。我希望ls得到一个目录列表,但是我下载的某些项目可能ls在其根项目文件夹中有一个脚本,作为其他内容的快捷方式。ls这可能是一个不好的例子,但我当然可以想象e用于编辑,d调试,m制造,b构建。我在全球范围内都有一些自己。如果键入,m我希望make启动(我的快捷方式),而不是调用某些本地脚本m来执行。
gman

@gman对。非恶意命令的确可能会不经意间产生不利影响。请注意,自从Unix诞生以来,单字母命令/别名就被人们迷惑了,因为它们存在很大的错误风险。罕见的标准是w[
jlliagre

3

即使你总是很小心你键入的内容,把.你的PATH,即使到了最后,仍然是不安全的,因为某些程序改变当前目录/tmp(这是世界上可写的),也可能尝试执行一个实际未安装实用程序,因此默认为in /tmp。如果发生这种情况,这是攻击的媒介。

还要注意,避免使用.in 并没有太多缺点PATH,因为./它易于键入(特别是在QWERTY这样的键盘上,其中这些字符位于连续键上,并且不需要Shift),并且使用./还将有助于完成操作,从而潜在地节省了击键次数在末尾。

如果您确实希望能够从当前目录中键入命令,那么现代外壳程序(如zsh,带有其command_not_found_handler)可以提供安全地执行此操作的功能,即允许您在处理程序之前添加所需的所有安全检查。命令被执行。

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.