从技术上讲,ACL 数据存储在哪里?

从技术上讲,ACL 数据存储在哪里?

我正在研究 ACL,但对这些信息在技术上的位置感到困惑。从技术上讲,这只是来自 inode 的元数据吗?

答案1

确切的细节可能取决于文件系统,但从概念上讲,是的,ACL 是存储在文件 inode 中的元数据,就像传统的权限、日期等一样。

由于 ACL 的大小可能会有所不同,因此它们最终可能会存储在单独的块中。然而,只有当您设计文件系统或编写文件系统驱动程序时,细节才重要。

答案2

对于 Ext4:

https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Extended_Attributes

“扩展属性 (xattrs) 通常存储在磁盘上的单独数据块中,并通过 inode.i_file_acl* 从 inode 引用。”

答案3

看看扩展属性本文的部分,标题为:Linux 上的 POSIX 访问控制列表

摘抄

ACL 是与文件系统对象关联的可变长度的信息片段。可以设计在文件系统上存储 ACL 的专用策略,就像 Solaris 在 UFS 文件系统上所做的那样 [13]。 UFS 文件系统上的每个 inode 都有一个名为 i_shadow 的字段。如果 inode 有 ACL,则该字段指向影子 inode。在文件系统上,影子 inode 的使用方式与常规文件类似。每个影子 inode 在其数据块中存储一个 ACL。具有相同 ACL 的多个文件可能指向相同的影子 inode。

由于除了 ACL 之外,其他内核和用户空间扩展也受益于能够将信息片段与文件关联起来,因此 Linux 和大多数其他类 UNIX 操作系统实现了一种更通用的机制,称为扩展属性 (EA)。在这些系统上,ACL 被实现为 EA。

之后扩展属性第一部分详细介绍了各种文件系统、ext2/ext3、JFS 等如何实现 EA。

相关内容