众所周知,大多数 Linux 系统都有某种文件权限。但是什么负责定义它们呢?操作系统、文件系统还是其他东西?
首先,我认为是文件系统(ext3、NTFS等)。这是这样建议的维基百科的文章,因为使用了诸如“文件系统权限”之类的短语。但令人惊讶的是,文章中还提到:
类 Unix 和其他 POSIX 兼容系统,包括基于 Linux 的系统和所有 macOS 版本,都有一个用于管理单个文件权限的简单系统,在本文中称为“传统 Unix 权限”。
这表明权限是由操作系统管理的(至少是符合 POSIX 的系统,无论这到底意味着什么)。这也是建议的有关文件权限的 linfo 文章。
更何况,这个有关 ACL 的红帽文档告诉我们:
红帽企业 Linux 内核为 ext3 文件系统和 NFS 导出的文件系统提供 ACL 支持。通过 Samba 访问的 ext3 文件系统也可以识别 ACL。
这表明 ACL(即一种文件权限)在 Linux 内核中以某种方式定义。
我对此感到困惑。
答案1
简要地:
让我们首先介绍一下传统的权限。在类似和后继的文件系统中ext2
,以及在原始的 Unix 文件系统中,有一个称为 inode 的结构。它由许多字节组成,描述文件的属性,例如文件的位置、大小等。表示权限的字节具有与所有者、组和其他人的权限相对应的位集。世界。您可以在 中看到这一点ls -l
,其中最低位直接对应于rwxr-xr-x
您看到的等(因此这将是位模式111101101
)。您还可以在命令中看到它,例如chmod
在八进制中使用此二进制数(因此三位组中的每组对应于一位数字)。
权限字节由内核中的文件系统驱动程序解释(基本上,内核使用一些与 inode 数据结构匹配的 C 数据结构)。
因此,从这个意义上说,您可以说“权限由内核管理”和“权限存储在文件系统中”。
ACL 的工作原理类似,只是它们更灵活,并且使用更困难的表示形式和更困难的内核 API。