我看到人们在其他 答案中提到将当前工作目录 (' .') 包含在您的$PATH环境变量中是一个坏主意,但无法找到专门解决该问题的问题。
那么,为什么我不应该添加.到我的路径中?如果不顾一切警告我仍然这样做,我需要注意什么?将它添加到末尾是否比添加到开头更安全?
小智 44
如果您是机器上的唯一用户,那没关系,只要您知道自己在做什么。一般担心的是,通过将当前目录放在 中PATH,您无法将命令视为常量列表。如果您需要从当前目录运行脚本/程序,您始终可以通过./在其名称前加上它的名称来显式运行它(您告诉系统“我想从当前目录运行此文件”)。
比如说,现在你的文件系统中已经有了所有这些小脚本;总有一天你肯定会跑错。因此,将您PATH作为静态路径的预定义列表完全是为了顺序和避免潜在问题。
但是,如果您要添加.到您的PATH,我建议将其附加到列表的末尾 ( export PATH=$PATH:.)。至少你不会以这种方式覆盖系统范围的二进制文件。
如果您是系统上的根用户,并且系统已暴露给其他用户的帐户,那么.进入PATH会带来巨大的安全风险:您可以cd访问某个用户的目录,并无意中在那里运行恶意脚本,因为您输入错误的内容或脚本与系统范围的二进制文件同名。
jll*_*gre 37
风险是有人将恶意可执行文件放入您当前的目录中。
最坏的情况发生在:
.位于 PATH 的开头,因为标准命令可以在您不注意的情况下被覆盖(通常是ls可以将其从列表中隐藏的)。如果您以普通用户身份登录并且.在 PATH 末尾有 ,但它仍然存在,则风险要低得多:
请注意,无论如何,即使您是机器的唯一用户,风险仍然存在。例如,如果您碰巧提取了从受感染站点下载的存档,则会安装恶意软件。
即使您总是非常小心输入的内容,即使在最后,放入.您的,仍然是不安全的,因为某些程序将当前目录更改为(全局可写),并且还可能尝试执行实际上未安装的实用程序,因此默认为 中的内容。如果发生这种情况,这就是攻击的媒介。PATH/tmp/tmp
.另请注意,避免使用in 并没有太多缺点PATH,因为./它很容易键入(特别是在 QWERTY 等键盘上,这些字符位于连续的键上,不需要 Shift)并且使用也./将有助于完成,从而可能节省击键次数在最后。
如果您确实希望能够从当前目录键入命令,那么现代 shell(例如 zsh 及其command_not_found_handler)可能会提供安全地执行此操作的功能,即允许您在处理程序中添加所需的所有安全检查,然后再执行命令被执行。
| 归档时间: |
|
| 查看次数: |
26480 次 |
| 最近记录: |