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这里的目的是什么?
这个 3 位 ACL 系统起源于 TRUSIX。其他 ACL 系统,例如 FreeBSD、MacOS、AIX、Illumos 和 Solaris 中的 NFS4 样式的系统,工作方式不同,并且不存在掩码访问控制条目的概念。
该面具是,正如其名字所示,应用于口罩,遮住通过为用户和组访问控制项授予的权限。它是任何访问控制条目(文件所有者或“其他”条目除外)可以授予的最大权限。它and的 3 位与这些其他条目的3 位一起编辑。
因此,例如,如果用户被rw-访问控制条目授予,但掩码为r--,则该用户实际上只有r--访问权限。相反,如果用户只--x被访问控制条目授予,掩码rwx不会授予额外的权限,用户只有--x访问权限。
父目录上的默认掩码是应用于在其中创建的事物的掩码设置。它是一种继承形式。
遗憾的是 IEEE 1003.1e 从未成为标准并于 1998 年被撤销。实际上,19 年过去了,它是一个适用于各种操作系统的标准——从Linux到FreeBSD再到Solaris(以及 NFS4 风格的 ACL)后一种情况)——实际执行。
IEEE 1003.1e 工作草案 #17 读起来很有趣,我推荐它。在附录 B § 23.3 中,工作组为 POSIX ACL 相对于旧S_IRWXG组权限标志的工作方式有些复杂,提供了一个详细的 8 页基本原理。(值得注意的是,TRUSIX 的人在十年前提供了大致相同的分析。)这涵盖了面具存在的理由,我将在这里只做简要说明。
chmod(…,000)。在存在 ACL 的情况下,如果有掩码并且旧映射到它,这只会关闭所有用户和组权限S_IRWXG。如果没有这个,将旧文件权限设置为000不会影响任何非所有者user或group条目,令人惊讶的是,其他用户仍然可以访问该对象。暂时将文件的权限位更改为无访问权限,chmod 000然后再将它们更改回来是一种旧的文件锁定机制,在 Unix 获得咨询锁定机制之前使用,正如您所见,人们甚至在 21 世纪仍在使用。(从setlock1990 年代后期开始,通过可移植的知名工具可以轻松地从脚本中使用建议锁定。)
chmod go-rwx并最终只有对象的所有者能够访问该对象。同样,除非有掩码并且旧S_IRWXG权限映射到它,否则这不起作用;否则该chmod命令不会关闭任何非所有者user或group访问控制项,导致比业主和非所属组保留访问的东西,其他用户预计可访问只给业主。再一次——如你所见——chmod十二年后,这种命令仍然是公认的智慧。道理依然成立。
and与 ACL分开并与 ACL分开的替代系统将需要文件权限标志rwxrwxrwx,这会使许多 Unix 应用程序感到困惑,这些应用程序在看到他们认为的世界时会抱怨-可写的东西。or与 ACL分开并与 ACL分开,否则 会chmod(…,000)出现前面提到的问题。因此有一个带有掩码的 ACL 系统。