总结

总结

我正在阅读 Stack Exchange 答案这里关于一个相关主题,部分被接受的答案是这样的:

永远不要将用户可写的PATH元素放在只能由root

这是真的吗?由于用户可写,在/usr/local/bin前面加上 是否危险?/usr/binPATH/usr/local/bin

我之所以问这个问题,是因为我自己的PATH已经/usr/local/bin领先了/usr/bin;原因是我听从了 Homebrew(MacOS 的第三方包管理器)的建议。他们甚至给你一个命令(在这一页)进行此更改全部用户。这样做的目的是 Homebrew 将其二进制文件安装到/usr/local/bin,因此通过将其放在 的前面/usr/binPATH它允许您(和其他应用程序)访问通过 Homebrew 安装到 的二进制文件的较新版本/usr/local/bin,而不是 MacOS 附带的(通常已过时的)默认版本/usr/bin

我最初链接到的那个人所指控的具体危险是这样的:

[P] 将 ... 放在前面/usr/local/bin会造成安全漏洞,因为 Homebrew 会将该目录的所有权交给您的用户。与 macOS 默认权限的这种变化意味着,即使是极其不成熟的恶意软件也可以利用这个漏洞获取 root 权限。他们所要做的就是在这里添加一些其他常用命令,例如,然后将命令传递给,直到他们看到您已经通过运行,然后他们就会接管。/usr/binPATHls/bin/lssudo

我尝试找出PATHMacOS 的默认设置。我想我用 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/binPATH

答案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

相关内容