文件权限/属性如何工作?内核级别,FS级别还是两者?


8

早些时候我想到的一个问题是:文件权限/属性是OS(因此是内核)相关的还是文件系统相关的?在我看来,第二种选择更合乎逻辑,但我从未听说过reiserfs文件许可权,例如:仅“ Unix文件许可权”。另一方面,引用维基百科的文章

随着新版本Windows的出现,Microsoft已将NTFS文件系统上可用属性的清单添加到清单中。

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

有人可以启发我吗?

Answers:


7

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

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

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

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

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


“内核的工作是将这些位解释为权限;特别是,当进程尝试对文件进行操作时,内核必须确定[...]”。这并不意味着理论上可以将内核更改为忽略所有这些并继续读取数据?(一种直接的磁盘访问)还是有其他方法可以防止这种情况发生?
忘了

@Overmind当然。内核代码可以访问所有内容。磁盘对进程,用户或权限一无所知。内核告诉磁盘“给我块232876”,然后磁盘用该块的内容答复。确定哪些进程可以访问哪些块(或块的哪些部分)是内核的工作。
吉尔斯(Gillles)“所以-不要再邪恶了”

4

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


3

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


1

作为一般规则,文件权限和文件属性被存储到filesistem [确切方式取决于有问题的文件系统(EXT3 / 4,立管,NTFS等)],但使用的内核,通常要执行的东西。

例如,* nix中的像sistema这样的内核是“事物”,它知道与文件/目录关联的UID的含义。文件UID只是文件系统与certan文件一起存储的数字,但是该数字对特定用户的“翻译”(以及相应的执行某项操作的权利)是由内核完成的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.