Answers:
内核和文件系统都起着作用。权限存储在文件系统中,因此需要在某个位置以文件系统格式存储信息。权限是由内核强制执行并传达给应用程序的,因此内核必须实现规则来确定文件系统中存储的信息的含义。
“ 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文件系统已扩展为存储这些额外的权限。如果您在较旧的操作系统上以较新的权限访问文件系统,则操作系统将不知道这些较新的权限,因此不会强制执行。相反,如果您使用较新的操作系统访问较旧的文件系统,则该文件系统将不包含新的权限,并且操作系统应提供合理的后备。
为了用户的某些权利都内核和文件系统必须支持他们。如果文件系统甚至不支持最基本的访问权限,则文件系统代码必须伪造它们(例如,使用umask
vfat 的mount选项)。