嗨,我有个问题,但似乎找不到相关的答案。情况是,我设置了 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 行为。