![使用“。”设置环境变量“PATH”是否有危险?](https://linux22.com/image/684330/%E4%BD%BF%E7%94%A8%E2%80%9C%E3%80%82%E2%80%9D%E8%AE%BE%E7%BD%AE%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E2%80%9CPATH%E2%80%9D%E6%98%AF%E5%90%A6%E6%9C%89%E5%8D%B1%E9%99%A9%EF%BC%9F.png)
我即将参加一次考试,回顾过去几年,他们总是会问类似的问题。基本上,设置以下内容会造成安全漏洞:
PATH=".:/bin:/usr/bin"
我知道当用户调用诸如“ls”之类的命令时,PATH 决定了要搜索可执行文件的绝对目录。我只是不确定上述操作会导致什么行为。
似乎它会首先检查当前目录(基于“.”)是否存在“/bin”目录,如果没有,则转到绝对目录“/usr/bin”。问题是,如果用户调用“ls”,而攻击者在当前目录中创建了“/bin”,则它可能包含一个 ls 版本,例如,它会删除一堆文件。
这是正确的吗,还是我误解了 PATH 符号?
答案1
PATH=".:/bin:/usr/bin"
您误解了符号,冒号是分隔符,因此这将在以下位置进行检查(按顺序)
- “。”当前目录
- “/bin”通常是存储关键二进制文件的地方
- “/usr/bin”通常是存储不太重要的二进制文件的地方
路径上有“/bin”和“/usr/bin”是完全正常的。
路径上有“.”是很危险的,尤其是作为第一个搜索位置时,因为当前目录通常是可以由一个或多个其他用户写入的目录。这些用户可以在目录中创建文件,而您可能会无意中执行这些文件(例如,通过创建名为“ls”的文件),从而使他们的代码能够由您的用户执行。