我正在阅读 Stack Exchange 答案这里关于一个相关主题,部分被接受的答案是这样的:
永远不要将用户可写的
PATH
元素放在只能由root
这是真的吗?由于用户可写,在/usr/local/bin
前面加上 是否危险?/usr/bin
PATH
/usr/local/bin
我之所以问这个问题,是因为我自己的PATH
已经/usr/local/bin
领先了/usr/bin
;原因是我听从了 Homebrew(MacOS 的第三方包管理器)的建议。他们甚至给你一个命令(在这一页)进行此更改全部用户。这样做的目的是 Homebrew 将其二进制文件安装到/usr/local/bin
,因此通过将其放在 的前面/usr/bin
,PATH
它允许您(和其他应用程序)访问通过 Homebrew 安装到 的二进制文件的较新版本/usr/local/bin
,而不是 MacOS 附带的(通常已过时的)默认版本/usr/bin
。
我最初链接到的那个人所指控的具体危险是这样的:
[P] 将 ... 放在前面
/usr/local/bin
会造成安全漏洞,因为 Homebrew 会将该目录的所有权交给您的用户。与 macOS 默认权限的这种变化意味着,即使是极其不成熟的恶意软件也可以利用这个漏洞获取 root 权限。他们所要做的就是在这里添加一些其他常用命令,例如,然后将命令传递给,直到他们看到您已经通过运行,然后他们就会接管。/usr/bin
PATH
ls
/bin/ls
sudo
我尝试找出PATH
MacOS 的默认设置。我想我用 Homebrew 提供的命令更改了我的设置(请点击上面的链接查看)。所以我PATH
在 MacOS 中的新“默认”设置/usr/local/bin
领先于/usr/bin
。但通过搜索,我认为 Apple 提供的设置PATH
确实领先/usr/bin
于/usr/local/bin
;接受的答案是这里第三个答案这里(Mike Taber 的那个)似乎暗示了这一点。从他们的回答来看,默认的 MacOS 似乎PATH
是这样的/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
,我认为这不会受到上述攻击的影响,对吗?
我认为我理解了这种攻击的理论。但如果这是正确的,那么为什么 Homebrew 建议做一些显然很危险的事情呢?
(编辑:我刚刚编辑了这些段落的顺序,因为之前的顺序不合逻辑)
总结
在你的 中拥有像/usr/local/bin
前面这样的用户可写目录是否危险,如果是,为什么 Homebrew(MacOS 的第三方包管理器)推荐它?/usr/bin
PATH
答案1
明显的危险
如果存在这种组合
/usr/local/bin
前/usr/bin
/usr/local/bin
非 root 用户可写入- 由多个用户使用的机器
然后非 root 用户可以有效地将常用的二进制文件(ls
已在评论中提到)插入该区域,从而导致其他用户在不知情的情况下执行他/她的程序。请注意,顺序的差异只会改变其他用户知道并调用的程序的行为。
如果任何非 root 用户可以写入$PATH
其他用户的任何目录,这也是一种安全风险,因为所述非 root 用户可能会添加拼写错误或误导性的二进制名称,并仍然希望其他用户有时可以调用它。
在单用户机器上差别不大,因为用户始终可以自由地根据需要配置路径。
不太明显的危险
/usr/bin
默认情况下存在之前的原因/usr/local/bin
是/usr/bin
系统提供的文件(被认为是值得信赖和稳定的)并且/usr/local/bin
是由本地系统管理员添加的应用程序(可能测试较少,可能会由于没有作为操作系统的一部分保持更新而过时)。
为什么第三方包管理器推荐这些设置
我的理解是,有时人们可能想通过包管理器安装系统中已经存在的包意图例如获取较新的版本。考虑安装 的新版本vi
。如果/usr/bin
出现在 之前,则在终端中/usr/local/bin
调用仍会启动“旧版本”,实际上看起来好像没有安装新版本。在之前的顺序中,来自第三方包管理器的程序优先。vi
/usr/local/bin
/usr/bin