文件系统 ACL 中“掩码”的确切用途是什么?

ari*_*rif 6 linux acl permissions umask

当我在目录中应用默认 ACL 时,我看到default:mask或仅mask在以下两种情况下。

场景一

-bash-4.2$ ls -ld test/
 drwxr-x---. 2 test test 4096 Oct 15 19:12 test/

-bash-4.2$ setfacl -d -m u:arif:rwx test/

-bash-4.2$ getfacl --omit-header test
 user::rwx
 group::r-x
 other::---
 default:user::rwx
 default:user:arif:rwx
 default:group::r-x
 default:mask::rwx
 default:other::---
Run Code Online (Sandbox Code Playgroud)

场景二

-bash-4.2$ ls -dl dir/
 drwxr-x---. 2 test test 4096 Oct 15 18:17 dir/

-bash-4.2$ getfacl dir
 # file: dir
 # owner: test
 # group: test
 user::rwx
 group::r-x
 other::---

-bash-4.2$ setfacl -m user:arif:rwx dir

-bash-4.2$ getfacl --omit-header dir
 user::rwx
 user:arif:rwx
 group::r-x
 mask::rwx
 other::---
Run Code Online (Sandbox Code Playgroud)

那么来mask这里的目的是什么?

Jde*_*eBP 9

什么

这个 3 位 ACL 系统起源于 TRUSIX。其他 ACL 系统,例如 FreeBSD、MacOS、AIX、Illumos 和 Solaris 中的 NFS4 样式的系统,工作方式不同,并且不存在掩码访问控制条目的概念。

面具是,正如其名字所示,应用于口罩,遮住通过为用户和组访问控制项授予的权限。它是任何访问控制条目(文件所有者或“其他”条目除外)可以授予的最大权限。它and的 3 位与这些其他条目的3 位一起编辑。

因此,例如,如果用户被rw-访问控制条目授予,但掩码为r--,则该用户实际上只有r--访问权限。相反,如果用户只--x被访问控制条目授予,掩码rwx不会授予额外的权限,用户只有--x访问权限。

父目录上的默认掩码是应用于在其中创建的事物的掩码设置。它是一种继承形式。

为什么

遗憾的是 IEEE 1003.1e 从未成为标准并于 1998 年被撤销。实际上,19 年过去了,它是一个适用于各种操作系统的标准——从LinuxFreeBSD再到Solaris(以及 NFS4 风格的 ACL)后一种情况)——实际执行。

IEEE 1003.1e 工作草案 #17 读起来很有趣,我推荐它。在附录 B § 23.3 中,工作组为 POSIX ACL 相对于旧S_IRWXG组权限标志的工作方式有些复杂,提供了一个详细的 8 页基本原理。(值得注意的是,TRUSIX 的人在十年前提供了大致相同的分析。)这涵盖了面具存在的理由,我将在这里只做简要说明。

  • 传统的 Unix 应用程序希望能够拒绝对文件、命名管道、设备或目录的所有访问chmod(…,000)。在存在 ACL 的情况下,如果有掩码并且旧映射到它,这只会关闭所有用户和组权限S_IRWXG。如果没有这个,将旧文件权限设置为000不会影响任何非所有者usergroup条目,令人惊讶的是,其他用户仍然可以访问该对象。

    暂时将文件的权限位更改为无访问权限,chmod 000然后再将它们更改回来是一种旧的文件锁定机制,在 Unix 获得咨询锁定机制之前使用,正如您所见,人们甚至在 21 世纪仍在使用。(从setlock1990 年代后期开始,通过可移植的知名工具可以轻松地从脚本中使用建议锁定。)

  • 传统的 Unix 脚本希望能够运行chmod go-rwx并最终只有对象的所有者能够访问该对象。同样,除非有掩码并且旧S_IRWXG权限映射到它,否则这不起作用;否则该chmod命令不会关闭任何非所有者usergroup访问控制项,导致比业主和非所属组保留访问的东西,其他用户预计可访问给业主。

    再一次——如你所见——chmod十二年后,这种命令仍然是公认的智慧。道理依然成立。

  • 其他没有掩码机制的方法有缺陷。
    • 在大多数情况下,权限位and与 ACL分开并与 ACL分开的替代系统将需要文件权限标志rwxrwxrwx,这会使许多 Unix 应用程序感到困惑,这些应用程序在看到他们认为的世界时会抱怨-可写的东西。
    • 另一个系统,其中权限位or与 ACL分开并与 ACL分开,否则 会chmod(…,000)出现前面提到的问题。

因此有一个带有掩码的 ACL 系统。

进一步阅读

  • 我认为面具的更新方式本身就值得进行问答。 (2认同)