嗨,我有一个问题,我似乎没有找到相关的答案。情况是我设置了 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
Run Code Online (Sandbox Code Playgroud)
从我所做的许多实验中,我了解到在从 windows samba 创建条目(文件或目录)时,会根据来自 windows 机器的默认掩码和权限执行逻辑 AND。通过使用创建掩码和强制创建模式(以及另一个用于 dirs 的设置),此行为或多或少会受到影响 - 按预期工作,完全没有问题。
我发现缺少 0011 的问题仍然存在,使用创建掩码 755 - x 位仍然从文件中删除。唯一的选择是使用强制创建模式 755。在那之后位保持不变或广告它们。
我测试了其他创建掩码选项,似乎每次都从文件中删除 0011。755, 777, 333 ... 所以看起来它可能是某种保护机制从组中删除 x 和其他阻止脚本被执行的人?
但我的问题是关于上面的确切例子。为什么有 d755 但结果是 -744。失去 0011 的魔力究竟发生在哪里?
非常感谢您的任何提示。
丢失 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
Run Code Online (Sandbox Code Playgroud)
此外,正如您所说,要更改此行为,您必须明确定义自己的掩码。现在,“创建”和“强制创建”之间的主要区别在于:
create mask
取消权限(AND 掩码)force create mode
在此之后添加它们(OR 掩码)也create mask
无法处理组和其他人的 x 位。
因此,您可能需要同时处理这两个指令才能达到某些目标。
让我们尝试一些示例:
1)如果您只想要组和其他人的 x 位,您将不得不结合:
create mask = 0700 #Remove r bit from group and others
force create mode = 0711 #Add x bit only to group and others
Run Code Online (Sandbox Code Playgroud)
结果 : -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
Run Code Online (Sandbox Code Playgroud)
结果 : -rwxr-xr-x 1 kris kris 0 Dec 21 14:17 file.txt
等等...
希望它可以帮助您了解 Samba 行为。
归档时间: |
|
查看次数: |
46190 次 |
最近记录: |