文件权限/属性如何工作?内核级、FS 级还是两者兼而有之?

文件权限/属性如何工作?内核级、FS 级还是两者兼而有之?

我之前想到的一个问题:文件权限/属性是操作系统(因此也是内核)相关的还是文件系统相关的?在我看来,第二种选择更符合逻辑,但我从未听说过reiserfs文件权限,例如:只有“Unix文件权限”。另一方面,引用维基百科文章:

随着新版本 Windows 的推出,微软已将NTFS 文件系统上的可用属性

这似乎表明 Windows 文件属性以某种方式与文件系统相关。

有人可以启发我吗?

答案1

内核和文件系统都发挥着作用。权限存储在文件系统中,因此需要有一个地方以文件系统格式存储信息。权限由内核强制执行并传递给应用程序,因此内核必须实现规则来确定文件系统中存储的信息的含义。

“Unix 文件权限”指的是传统的权限系统其中涉及通过三种角色类型(用户、组、其他)控制的三个操作(读、写、执行)。文件系统的工作是存储 3×3=9 位的信息。内核的工作是将这些位解释为权限;特别是,当进程尝试对文件进行操作时,内核必须根据进程运行时的用户和组、文件的权限位以及请求的操作来确定是否允许该操作。 (“Unix 文件权限”通常还包括setuid 和 setgid 位,严格来说这不是权限。)

现代 UNIX 系统可能支持其他形式的权限。大多数现代 UNIX 系统(Solaris、Linux、*BSD)支持访问控制列表它允许为每个文件的多个用户和多个组分配读/写/执行权限。文件系统必须有空间来存储这些额外信息,并且内核必须包含查找和使用这些信息的代码。 Ext2、reiserfs、btrfs、zfs 和大多数其他现代 UNIX 文件系统格式定义了存储此类 ACL 的位置。 Mac OS X 支持一组不同的 ACL其中包括非传统权限,例如“追加”和“创建子目录”; HFS+ 文件系统格式支持它们。如果您在 Linux 上挂载 HFS+ 卷,则不会强制执行这些 ACL,因为 Linux 内核不支持它们。

相反,有些操作系统和文件系统不支持访问控制。例如,胖的其变体是为单用户操作系统和可移动媒体设计的,其权限仅限于读/读写和隐藏/可见。这些是由以下人员强制执行的权限操作系统。如果您在 DOS 上挂载 ext2 文件系统,它不会强制执行 ext2 权限。相反,如果您访问 Linux 上的 FAT 文件系统,所有文件都将具有相同的权限。

Windows 的后续版本添加了对更多权限类型的支持。 NTFS 文件系统经过扩展可以存储这些额外的权限。如果您在较旧的操作系统上使用较新的权限访问文件系统,操作系统将不会知道这些较新的权限,因此不会强制执行它们。相反,如果您使用较新的操作系统访问较旧的文件系统,它将不包含新权限,并且由操作系统提供合理的后备。

答案2

为了使用某些权利两个都内核文件系统必须支持它们。如果文件系统甚至不支持最基本的访问权限,那么文件系统代码必须伪造它们(例如使用umaskvfat 的挂载选项)。

答案3

我的理解是内核在VFS中实现inode。 inode 包含权限信息(UNIX 和 ACL)以及其他元数据,文件系统可以扩展 inode 以添加功能。如果您有兴趣,请阅读 Linux VFS——如果您不是系统程序员,那这就是血淋淋的东西。

答案4

作为一般规则,文件权限和文件属性是已存储进入 filesistem [确切的方式取决于所讨论的文件系统(ext3/4、riser、NTFS 等...)]用过的由内核,通常是执行某物。

例如,*nix 中的内核(如 sistema)是知道与文件/目录关联的 UID 含义的“事物”。文件 UID 只是文件系统与某个文件一起存储的一个数字,但将这些数字“翻译”到某个用户(以及相应的执行或不执行某些操作的权限)是由内核完成的。

相关内容