我试图了解fstab
在 ext4 作为正在使用的文件系统的情况下,在安装磁盘时设置的权限选项的优先级和组合,以及与磁盘上每个文件关联的权限选项。
进一步来说:
- exec 和可执行标志
- suid 和 suid 标志
- 开发者
- 默认与什么都不做
例如,rw
这是否fstab
意味着文件在安装时将具有读写权限?如果他们只读取与该文件关联的内容会发生什么?挂载选项是否会影响存储在磁盘上的挂载文件的权限?或者他们是否以某种方式过滤掉它们,只保留两者中允许的内容?在安装的磁盘上新创建的文件会发生什么情况?
有很多关于 Linux 权限特定主题的不同文章,但我偶然发现的这些文章都没有完整地解决这个问题。
如果有人有这样一篇文章的链接,那么分享它会非常高兴!
答案1
挂载选项不会更改文件的模式。但可以删除一个权限。例如,noexec 停止文件文件(而不是目录)的执行,nosuid 使 setuid 位的效果无效,nodev 停止 dev 文件工作,readonly 停止写入。安装选项适用于整个安装。并且永远不要添加权限。
“只保留两者允许的内容”——从你的问题来看,这句话总结了这一点。
我认为 @steves 的答案比我的更好,除了:
或者他们以某种方式将它们过滤掉,只保留两者允许的内容?
是的,它是两者的最小子集。
在安装的磁盘上新创建的文件会发生什么情况?
如果您有写权限和 rw 挂载选项,则文件会正常写入。即使安装了nodev,您仍然可以创建设备文件。只是它们不能作为设备文件使用。 setuid、exec 等也是如此。
答案2
例如fstab中的rw是否意味着文件在挂载时将具有读写权限?
这意味着文件系统将以读/写方式挂载,之后访问受文件权限限制。如果以只读方式挂载,则无论权限如何,绝对没有任何内容可以写入文件。
如果他们只读取与该文件关联的内容会发生什么? mount > 选项是否会影响存储在磁盘上的已安装文件的权限?
如果用户只有读取权限,他们将只能获得读取访问权限。无论您挂载为只读还是读写。
或者他们是否以某种方式过滤掉它们,只保留两者中允许的内容?
首先应用安装选项,然后应用文件权限。
在安装的磁盘上新创建的文件会发生什么情况?
如果您以只读方式安装了文件系统,则任何用户都无法在其中创建文件。
如果您安装了读写文件系统,则用户可以在其中创建受权限限制的文件。
答案3
挂载选项不会影响存储的权限位,但会影响有效权限。例如,可能有一个具有执行权限的文件(即已chmod a+x myfile
成功,ls -l
显示该文件具有执行权限等),但如果使用该选项挂载文件系统noexec
,则尝试执行该文件会导致“权限被拒绝” “ 错误。同样,该ro
选项会导致任何写入尝试失败,该nodev
选项会导致任何访问设备的尝试失败(即使可以创建设备),并且该nosuid
选项会导致执行文件的任何尝试忽略 setuid 和 setgid 位。
另一种说法是,决定是否允许文件操作的算法如下所示:
- 如果需要写权限并且文件系统已挂载
ro
,请立即拒绝。 - 如果需要执行权限并且文件系统已挂载
noexec
,请立即拒绝。 - 如果文件是设备并且文件系统已挂载
nodev
,请立即拒绝。 - 如果文件的用户是尝试访问的进程组之一,则根据文件系统中存储的用户权限位允许或拒绝。
- 如果文件的组是尝试访问的进程组之一,则根据文件系统中存储的用户权限位允许或拒绝。
- 根据文件系统中存储的“其他”权限位允许或拒绝。
(我简化为仅显示对于我们的目的来说最重要的部分。其他考虑因素包括访问控制列表,扩展属性例如不可变和仅附加,以及安全模块例如 SELinux 和 AppArmor。最终完整且准确(但不易阅读)的参考资料将是源代码,例如may_open
Linux 内核中的函数。)
如果文件系统已挂载,则不会完成 setuid/setgid 确定(不考虑文件元数据中的 setuid/setgid 位)nosuid
。