![在“$PATH”中使用以下类型的路径名是否安全?](https://linux22.com/image/134801/%E5%9C%A8%E2%80%9C%24PATH%E2%80%9D%E4%B8%AD%E4%BD%BF%E7%94%A8%E4%BB%A5%E4%B8%8B%E7%B1%BB%E5%9E%8B%E7%9A%84%E8%B7%AF%E5%BE%84%E5%90%8D%E6%98%AF%E5%90%A6%E5%AE%89%E5%85%A8%EF%BC%9F.png)
使用以下类型的路径名是$PATH
一种安全且良好的做法:
空路径名。
findutils 手册说如果
$PATH
包含空路径名,它是不安全的,我想知道为什么?空路径名是绝对路径名还是相对路径名?
包含波形符或文件名扩展的路径名。
用户能否在类似的 shell
$PATH
中始终理解并执行波形符或文件名扩展?$PATH
PATH
如果我在 shell 启动脚本(例如 )中设置 的值~/.profile
,那么考虑到 shell 执行启动文件,这有什么关系吗?我发现了一个与波形符扩展相关的https://unix.stackexchange.com/a/154290/674
当前工作目录。看添加 . 是否安全?我的路径?怎么会?
谢谢。
答案1
PATH
如果this引用中有空元素'.'
,可以视为不安全。
如果 末尾的点或空元素PATH
,这并不是高度不安全,因为只有当有人将二进制文件放入使用拼写错误的系统二进制文件名称的目录中时才会命中。
因为CDPATH
反之亦然:如果您没有点或空元素,cd
则不会在当前目录中找到子目录。
字符串内的波浪号PATH
无法理解。这就是为什么 POSIX 标准要求在分配 shell 宏时扩展命令行中冒号后的波浪号序列。
关于我回答后添加到问题中的文本:这些波浪号字符在执行命令之前会展开。
答案2
只是为了让其他人知道他们是否通过谷歌找到了这个。
如果您输入.
路径,攻击者会创建一个ls
在您当前工作目录中调用的文件,如果该文件出现在 /bin/ls 之前,则该文件可能会被执行。该假 ls 可能是rm -rf
其中包含的shell 脚本,如果.
首先出现在路径中,那么当您发出命令并销毁文件时,您可能会在不知不觉中运行该 ls 。