添加 . 到我的路径?怎么来的?

Jan*_*der 52 path

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

那么,为什么我不应该添加.到我的路径中?如果不顾一切警告我仍然这样做,我需要注意什么?将它添加到末尾是否比添加到开头更安全?

小智 44

如果您是机器上的唯一用户,那没关系,只要您知道自己在做什么。一般担心的是,通过将当前目录放在 中PATH,您无法将命令视为常量列表。如果您需要从当前目录运行脚本/程序,您始终可以通过./在其名称前加上它的名称来显式运行它(您告诉系统“我想从当前目录运行此文件”)。

比如说,现在你的文件系统中已经有了所有这些小脚本;总有一天你肯定会跑错。因此,将您PATH作为静态路径的预定义列表完全是为了顺序和避免潜在问题。

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

如果您是系统上的根用户,并且系统已暴露给其他用户的帐户,那么.进入PATH会带来巨大的安全风险:您可以cd访问某个用户的目录,并无意中在那里运行恶意脚本,因为您输入错误的内容或脚本与系统范围的二进制文件同名。

  • 即使作为机器上的唯一用户:每次提取不受信任的 tar 时,它都可以在当前目录中放置一个 `ls`。接下来你运行`ls`来检查提取的文件并且你已经运行了恶意代码。 (7认同)

jll*_*gre 37

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

最坏的情况发生在:

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

如果您以普通用户身份登录并且.在 PATH 末尾有 ,但它仍然存在,则风险要低得多:

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

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

  • 安装 `sl` 以查看第 3 点发生的频率。 (18认同)

vin*_*c17 6

即使您总是非常小心输入的内容,即使在最后,放入.您的,仍然是不安全的,因为某些程序将当前目录更改为(全局可写),并且还可能尝试执行实际上未安装的实用程序,因此默认为 中的内容。如果发生这种情况,这就是攻击的媒介。PATH/tmp/tmp

.另请注意,避免使用in 并没有太多缺点PATH,因为./它很容易键入(特别是在 QWERTY 等键盘上,这些字符位于连续的键上,不需要 Shift)并且使用也./将有助于完成,从而可能节省击键次数在最后。

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