我对在 Linux(即 CentOS 6)上强制继承权限有疑问/困惑
设置:
1 个 CentOS 文件服务器
2 个 CentOS NFS 客户端
许多 Windows Samba 客户端
文件共享为/srv/share,与Samba和NFS本地共享权限如下:h
drwxrwx---. 2 root sharegroup 4.0K Oct 22 14:41 share
所有 UID/GID 通过 Active Directory 统一,所有用户的主要组是“sharegroup”。
NFS 客户端在 fstab 中挂载为:
tst-lnx03:/srv/share /mnt/share nfs defaults 0 0
Windows 框通过 UNC 路径:
\\tst-lnx03\share
我想做的:
/srv/share 文件夹中写入/创建的任何内容,无论是通过 NFS 还是 Samba 传入,都可以是 770 根共享组。
我尝试过的:
我曾尝试使用 ACL:
setfacl -m d:u:root:rwx,d:g:"sharegroup":rwx,d:other:--- share
结果是:
ls -lah
-rwxrwx---+ 1 testuser11 sharegroup 0 Oct 22 14:25 tu12-smb-win
-rw-rw----+ 1 testuser2 sharegroup 0 Oct 22 14:23 tu2-local-local
-rw-r-----+ 1 testuser4 sharegroup 0 Oct 22 14:24 tu4-NFS-lnx04
我曾尝试使用粘性位:
chmod 2770 share
结果是:
ls -lah
-rwxr--r-- 1 testuser11 k8 sharegroup 0 Oct 22 14:38 tu12-smb-win
-rw-r--r-- 1 testuser2 k8 sharegroup 0 Oct 22 14:38 tu2-local-local
-rw-r--r-- 1 testuser4 k8 sharegroup 0 Oct 22 14:38 tu4-NFS-lnx04
困惑
看起来 setfacl 是赢家,但是对输出有点困惑,为什么粘滞位版本会添加随机的其他读取并剥离注销组?
我认为 NFS 创建的文件不同是由于默认的 umask 为 0022,而不是其他更改。我原本希望 Windows 创建的文件和本地创建的文件的权限也匹配。
有人能解释一下每种情况是怎么回事吗?我有点困惑。如果您需要我提供更多信息,请告诉我,我会提供。
答案1
所以你做到了
setfacl -m d:u:root:rwx,d:g:"sharegroup":rwx,d:other:--- share
您所做的任何操作setfacl d:
(称为“默认 ACL”)都不会影响所有权,只会影响可访问性。因此,您可以决定“谁可以访问”,但不能决定“谁拥有”。您刚刚使测试文件对拥有用户和 root 具有 rwx 访问权限;对拥有组和“共享组”具有 rwx 访问权限。但拥有用户和拥有组的确定方式与没有 setfacl 时完全相同。
文件的权限是意想不到的,因为使用 setfacl 的文件,umask 不再被考虑。每个文件都有其“自己的 umask”,简称为掩码(参见getfacl
)。
你做到了
chmod 2770 share
又错了。2770 不是粘性的,这是 setgid 位。粘性的应该是 1770。setgid 更改了新文件的所有者组,但丝毫不影响其权限。权限照例考虑了 umask(请参阅umask
) 以及创建文件的应用程序建议的模式。
我不知道如何用你现有的工具正确实现你所需要的东西。Linux 中没有实现“目录的 setuid”。