文件权限:内核还是文件系统?

文件权限:内核还是文件系统?

当我们说“文件权限”时,我们指的是内核内部的东西,还是文件系统的功能?哪一层决定了这些权限的存储位置。我很困惑文件权限存在于什么级别。有人可以帮助澄清边界吗?

我知道chown chmod从用户角度如何工作,但我不知道它们是如何实现的,或者实际上是什么引发了“权限被拒绝”错误

touch foo
chmod 000 foo
cat foo
cat: foo: Permission denied

有人可以带我了解内核、文件系统、io 和位如何适应上述序列的过程吗?

答案1

这个问题最好的一个词答案是两个都或者

在Unix操作系统设计中,文件系统功能由内核提供。所以文件权限来自内核,并由内核强制执行。

在内核内部,有一个处理文件访问的子系统。权限由该子系统强制执行。子系统没有明确定义的边界,它们是人类为了理解系统结构而构建的。将内核中处理文件访问的部分分成两部分实际上很有用:

  • 虚拟文件系统(VFS),处理来自应用程序的访问并解析路径;
  • 单独的文件系统驱动程序,管理对以特定格式存储信息的特定文件系统的访问。

每个文件系统驱动程序决定它如何存储和检索权限。 VFS 层并不关心:它的工作是将请求分派给正确的驱动程序。磁盘文件的文件系统将权限存储在磁盘上的某个位置(如果它们支持的话)。遵循传统 Unix 设计的磁盘文件文件系统将权限与文件中的其他元数据一起存储索引节点。如果协议支持权限,网络文件系统会询问服务器权限是什么。如果格式或协议不支持 Unix 权限,则由驱动程序进行弥补,例如通过报告所有文件的相同权限。内存文件系统(例如 procfs 和 sysfs)将权限存储在内存中的数据结构中或动态计算它们。保险丝调用程序中实现文件系统的函数,等等。

请注意,VFS 层和文件系统驱动程序都有助于确定是否授予访问请求。如果请求涉及遍历安装点的路径,则请求甚至可能涉及多个文件系统驱动程序(例如,如果/foo/bar是安装点,则对 的访问/foo/bar/qux需要查询一个文件系统以遍历//foo,并查询另一个文件系统以遍历/foo/bar/foo/bar/qux)。分割的细节可能因 Unix 变体而异,但通常 VFS 层将文件权限与调用上下文相关联,并可能应用其他限制(只读挂载、SELinux 等框架)以及单个文件系统可能会应用额外的限制(例如,对于网络文件系统,服务器总是可以拒绝)。

相关内容