Samba 默认文件创建掩码计算

Samba 默认文件创建掩码计算

嗨,我有个问题,但似乎找不到相关的答案。情况是,我设置了 Samba 服务器并尝试从 Windows 机器创建文件和文件夹。一切按预期工作,但有一个小问题,即 Samba 从组和文件上的其他位置删除了 x 位。一个简单的示例代码:

drwx--x--x.   4 root root  4096 Dec 13 20:01 smb
drwxrwx--x. 2 root amikon 4096 Dec 15 22:17 pokus

[pokus]
path = /smb/pokus
public = no
writable = yes
valid users = @amikon

[root@wserver pokus]# ls -l
drwxr-xr-x. 2 vanek amikon 4096 Dec 21 10:14 dir
-rwxr--r--. 1 vanek amikon    0 Dec 21 10:14 file.txt

通过多次实验,我了解到,从 Windows Samba 创建条目(文件或目录)时,会根据来自 Windows 计算机的默认掩码和权限执行逻辑与运算。使用创建掩码和强制创建模式(以及目录的其他设置)可能会或多或少地影响此行为 - 完全按预期工作,没有任何问题。

我发现,无论使用创建掩码 755,丢失 0011 的问题仍然存在 - x 位仍会从文件中删除。唯一的选择是使用强制创建模式 755。之后位会保留,因为 OR 会添加它们。

我已经测试了其他创建掩码选项,似乎每次都会从文件中删除 0011。755、777、333......所以看起来可能是某种保护机制从组中删除 x 并阻止脚本被除所有者之外的任何人执行???

但我的问题是关于上述确切的例子。为什么结果是 d755 但结果却是 -744。丢失 0011 的魔力究竟在哪里发生?

非常感谢任何提示。

答案1

丢失 0011 的魔力之所以发生,是因为这是默认的 Samba 行为。

从文档中提取:

创建掩码:此参数的默认值从 UNIX 模式中删除组和其他写入和执行位

默认值:创建掩码 = 0744

链接在这里 :http://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html

搜索create mask (S)

在此文档中,Samba 团队并未解释他们为何选择实现此默认行为,但对我来说,很容易想到一种安全机制(正如您所提到的)。

您可以使用inherit permissions = yes指令使新文件继承其父文件夹权限,但这不会影响 x 位。因此,在您的情况下,这将呈现:

-rwxrw-r--. 1 vanek amikon    0 Dec 21 10:14 file.txt

另外,正如您所说,要改变这种行为,您必须明确定义自己的掩码。现在,“创建”和“强制创建”之间的主要区别在于:

  • create mask取消权限(AND 掩码)
  • force create mode之后添加它们(或掩码)

create mask无法处理组和其他人的 x 位。

因此,您可能需要处理这两个指令才能实现某些目标。


让我们尝试一些样本:

1)如果您只想要 group 和其他人的 x 位,则必须组合:

create mask = 0700 #Remove r bit from group and others 
force create mode = 0711 #Add x bit only to group and others

结果 : -rwx--x--x 1 kris kris 0 Dec 21 14:20 file.txt


2)如果您想要组和其他人的 r 和 x 位,请删除create mask指令(因为默认值已经是 0744)并添加:

    ;create mask = 0700 #remove r bit from group and others (commented)
    force create mode = 0711 #Add x bit only to group and others

结果 : -rwxr-xr-x 1 kris kris 0 Dec 21 14:17 file.txt


等等...

希望它能帮助您了解 Samba 行为。

相关内容