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