![请帮助我理解结合 umask、ACL 和 Samba create mask 对文件权限的影响](https://linux22.com/image/1186676/%E8%AF%B7%E5%B8%AE%E5%8A%A9%E6%88%91%E7%90%86%E8%A7%A3%E7%BB%93%E5%90%88%20umask%E3%80%81ACL%20%E5%92%8C%20Samba%20create%20mask%20%E5%AF%B9%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90%E7%9A%84%E5%BD%B1%E5%93%8D.png)
我在 /media/4TB1 中设置了一个 ACL
我的目的是强调以下两点:
- /media/4TB1 的所有子目录都将具有权限:
drwxrwxr-x
即:chmod 775 - 所有文件都将获得权限:
-rw-rw-r--
即:chmod 664
这是 ACL:
sudo setfacl -dRm u::rwx,g::rwx,o::r-x /media/4TB1
我已经觉得我的理解是错误的。
我的 ACL 是否对文件权限实施了任何操作?还是它只影响目录?
在我的 Ubuntu 20.04 中,umask 是0022
。
我还有一个指向 /media/4TB1 的 Samba 共享,
当我在共享定义中有此行时create mask = 664
文件创建如下:-rw-rw-r--
当我在共享定义中有此行时create mask = 777
文件创建如下:-rwxrw-r--
但我希望文件具有以下权限:777-022 = 755[-rwxr-xr-x]
有人可以解释一下吗?
此外,Samba“创建掩码”是否会覆盖 ACL?
我在其他地方读到“创建掩码”是一个 AND 掩码,“强制创建模式”是一个 OR 掩码,但我现在完全糊涂了。
任何帮助都非常感谢!
柔性
答案1
我无法回答您问题的 ACL 部分,因为我已经很长时间没有使用它们了,而且我不知道它们如何与基本的 samba 文件创建过程交互。
新创建的 samba 文件的权限为 766 而不是 666,因为另一个参数 (map archive) 启用了文件所有者的执行位。它的二进制表示是 111 110 110。
将“创建掩码”值 664 转换为二进制格式,然后对 766 执行逻辑与。在逻辑与中,如果两个数字都是 1,则答案为 1。如果一个数字为 0,则答案为 0。所以我们得到的是:
111110110>766
110110100>664
===========
110 110 100 即八进制 664
让我们使用 777 的创建掩码来做同样的事情:
111110110>766
111 111 111 > 777
===========
111 110 110 即八进制 766
让我们使用“强制创建模式 = 0777”来代替“创建掩码”。此处,“模式”与原始权限进行逻辑或运算。在逻辑或运算中,如果任何数字为 1,则答案为 1:
111110110>766
111 111 111 > 777
===========
111 111 111 即八进制 777
注意:samba 中的默认掩码设置为 744:
111 110 110 即 766
111 100 100 即 744
===========
111 100 100 即 744
这就是为什么在 smb.conf 中没有任何其他参数时,新创建的文件将为所有者设置执行设置。
我创建了一个测试共享并通过不同的设置来说明结果:
tester@vub2004:~$ ls -l Shared
total 0
-rw-rw-r-- 1 tester tester 0 Apr 27 12:28 fromLinux-cm0664.txt
-rwxrw-rw- 1 tester tester 0 Apr 27 12:31 fromLinux-cm0777.txt
-rwxrwxrwx 1 tester tester 0 Apr 27 12:37 fromLinux-fcm0777.txt
-rwxr--r-- 1 tester tester 0 Apr 27 12:25 fromLinux-default.txt