为什么通过 Samba 创建的文件根据客户端操作系统获得不同的 ACL(掩码)权限?

为什么通过 Samba 创建的文件根据客户端操作系统获得不同的 ACL(掩码)权限?

我在全新安装的 Debian Jessie 上测试了这一点,但在其他机器上也遇到了这个问题(例如:Ubuntu 12.04)。除了基本安装之外,我还安装了sudosambacifs-utils

具有默认 ACL 的共享目录

我在根文件系统上启用了 ACL 并创建了一个共享目录:

sudo mount -o remount,acl /
mkdir -p /home/ryan/shared
setfacl -d -m u:ryan:rwx /home/ryan/shared

桑巴配置

我保留了所有默认值/etc/samba/smb.conf并添加了一个共享:

[shared]
    comment =
    path = /home/ryan/shared
    writable = yes
    valid users = ryan

添加 Samba 用户

然后我将自己添加为 Samba 用户并重新启动服务:

sudo smbpasswd -a ryan
sudo systemctl restart smbd

Linux客户端

接下来,我为 Samba 共享创建了一个挂载点,挂载它,并创建了一个空文本文件:

mkdir -p /home/ryan/mnt/shared
sudo mount -t cifs -o user=ryan //127.0.0.1/shared /home/ryan/mnt/shared
touch /home/ryan/mnt/shared/linux.txt

Windows客户端

我还从 Windows 8 计算机进行连接并创建了一个名为windows.txt.

共享目录列表

之后,目录列表/home/ryan/shared如下所示:

-rw-r--r--+ 1 ryan ryan 0 Jun 20 23:45 linux.txt
-rwxrwxr--+ 1 ryan ryan 0 Jun 20 23:46 windows.txt

文件 ACL

ACL 看起来linux.txt像这样:

# file: linux.txt
# owner: ryan
# group: ryan
user::rw-
user:ryan:rwx           #effective:r--
group::r-x              #effective:r--
mask::r--
other::r--

ACL 看起来windows.txt像这样:

# file: windows.txt
# owner: ryan
# group: ryan
user::rwx
user:ryan:rwx
group::r-x
mask::rwx
other::r--

问题

Linux 客户端的行为正是我所期望的。为什么使用 Windows 客户端时会有所不同?如何让Windows客户端设置与Linux客户端相同的权限?

答案1

您可以让 Samba 标准化客户端发送的所有内容,man smb.conf例如:

create mask = 0775
force create mode = 0660
directory mask = 2775
force directory mode = 2771

答案2

首先,只有这些权限就不需要 ACL。 ACL 比用户、组和其他权限更细粒度。

但为了回答你的问题,我的猜测是,Linux 创建的文件从你的用户 umask 设置中获取其权限,可能与在任何其他目录中创建文件时获得的权限相同。

Windows环境没有umask之类的东西,它不知道unix组的概念。在 Windows 中创建的文件从 smb.conf 中的设置获取权限。即使您自己没有输入任何此类设置,它们也具有默认值。您可以使用命令查看这些值testparm -s -v smb.conf | grep mask。 smb.conf 中的掩码与相同的 umask 相比具有相反的值。也就是说,要获取权限为 -rw-r--r-- 的文件,您需要 umask 022,但 samba create mask 为 644。

相关内容