您能否解释一下为什么二进制编译文件(例如,/usr/sbin
)具有用户的写权限root
?
对我来说,这是编译的。这意味着直接写入没有用,并且可能会以某种方式使文件面临某些安全问题。
脚本(例如bash
文件)可能是可写的,因为它基本上是一个文本文件,但为什么据我所知,对于实际上不需要写入的已编译文件来说它是相同的?
预先感谢您的反馈。
答案1
/bin
root 是否可写入文件(或保存可执行文件的任何其他标准目录)并不重要。在我使用的 Linux 服务器上,它们可以由 root 写入,但在我的 OpenBSD 机器上则不能。
只要它们不能被组或“其他”写入!
不存在安全问题,例如
-rwxr-xr-x 1 root root 126584 Feb 18 2016 /bin/ls
如果有人想覆盖它,他们必须是 root,如果他们是 root 并且root
覆盖它,那么他们要么是
- 安装新版本,或
- 笨拙,或
- 攻击者已经有root权限。
另一件需要考虑的事情是 root 可以写入该文件,无论该文件是否受到写保护,因为... root。
还要注意,“脚本”与二进制文件一样是可执行文件。脚本不需要可写“因为它是文本文件”。如果有的话,它可能应该与同一目录中的其他可执行文件具有相同的权限。
现在不要去更改所有内容的权限!这可能会造成各种严重破坏,并可能使可能验证权限设置是否正确的包管理器感到困惑。如果您意外地以错误的方式更改了安全关键应用程序的权限,也可能使系统容易受到攻击。
假设可执行文件的权限设置正确,除非您发现一些看起来像真的奇怪的是,在这种情况下,您可能应该联系相关的软件包维护者进行验证,而不是开始更改内容。
来自评论并在聊天中,有人呼吁了解一些历史。
二进制文件权限的历史记录在Linux上这不是我所知道的任何事情。可能推测他们只是继承了目录的权限,或者只是继承了umask
Linux默认的权限,但我真的不知道。
我所知道的是,OpenBSD 默认将二进制文件安装在基本系统1中,权限模式为 555 ( -r-xr-xr-x
)。这是在 Makefile 片段中指定的,/usr/share/mk/bsd.own.mk
其中设置BINMODE
为 555(除非已经设置)。稍后在make build
in期间安装可执行文件时将使用它/usr/src
。
我看了一下此文件的带注释的 CVS 日志,发现文件中的这一行自从 1995 年从 NetBSD 导入以来就没有变化。
在 NetBSD 上,该文件是首先放入CVS1993年,BINMODE
设为555。
FreeBSD 项目似乎使用了与 NetBSD 完全相同的文件至少从 1994 年开始, 和稍后提交在提交消息中添加了一条提示,表明旧文件来自 Berkeley Software Distribution 的 4.4BSD 版本。
除此之外,伯克利的 CSRG将来源保留在SCCS但他们的存储库是在 GitHub 上以 Git 形式提供2 .我们在这里进行法医处理的文件似乎已经承诺经过基思·博斯蒂克(或与他关系密切的人)1990 年。
这就是那个故事。如果你想要为什么,那么我想我们得问问基思了。我有点希望看到一条关于更改的提交消息说“这需要是 555 因为......“, 但不是。
1 BSD 系统比 Linux 更严格地划分为“基础系统”和“第 3 方软件包”(端口/软件包)。基本系统是一个连贯的单元,提供完全的用于运行操作系统的一组设施,而端口或软件包被视为“本地软件”并安装在/usr/local
.
2 更全面的 GitHub 存储库,包含 70 年代以来的 Unix 版本也可用。