![为什么smb.conf中存在“强制创建模式”和“强制目录模式”参数?](https://linux22.com/image/230246/%E4%B8%BA%E4%BB%80%E4%B9%88smb.conf%E4%B8%AD%E5%AD%98%E5%9C%A8%E2%80%9C%E5%BC%BA%E5%88%B6%E5%88%9B%E5%BB%BA%E6%A8%A1%E5%BC%8F%E2%80%9D%E5%92%8C%E2%80%9C%E5%BC%BA%E5%88%B6%E7%9B%AE%E5%BD%95%E6%A8%A1%E5%BC%8F%E2%80%9D%E5%8F%82%E6%95%B0%EF%BC%9F.png)
我在读如何使用 Samba 在 Ubuntu 上设置网络共享文件夹。在“步骤 2:配置 Samba”部分给出了以下配置:
[sambashare]
comment= Network Shared Folder by Samba Server on Ubuntu
path = /home/your_username/sambashare
force user = smbuser
force group = smbgroup
create mask = 0664
force create mode = 0664
directory mask = 0775
force directory mode = 0775
public = yes
read only = no
观察以下关系:
create mask
和force create mode
directory mask
和force directory mode
这两对参数具有相同的值。
为什么create mask
和directory mask
参数本身还不够?为什么存在force create mode
和force directory mode
参数?
我读过官方文档桑巴舞这smb.conf(5)页面,其中有“每个参数的说明”部分。但对于这两个“力”参数,它们存在的原因尚不清楚。
答案1
首先,链接的文档说:
创建模式
该参数是一个同义词创建蒙版。
创建蒙版(S)
创建文件时,会根据从 DOS 模式到 UNIX 权限的映射来计算所需的权限,然后将所得的 UNIX 模式与该参数进行按位“与”运算。该参数可以被认为是文件的 UNIX 模式的按位掩码。此处未设置的任何位都将从创建文件时设置的模式中删除。 [...]
接下来,Samba 将从该参数创建的 UNIX 模式与强制创建模式参数默认设置为000。
所以:
create mask
从为要创建的文件提供的权限中删除不允许的(屏蔽的)权限force create mode
为要创建的文件添加所需的权限
例如,假设您想要:
- 文件没有组写权限,其他人也没有权限
- 文件始终具有所有者写入权限(但您不关心所有者是否存在其他权限)
然后:
对于 (1),
create mask
将是750
:- 您不关心用户为所有者权限添加什么,因此
7
允许一切。 - 您不需要组写入权限,因此只允许读取和执行,因此
5
对于组。 0
让其他人禁止一切。
- 您不关心用户为所有者权限添加什么,因此
对于 (2),
force create mask
将是200
- 您绝对希望 write 存在,因此
2
对于所有者而言,然后0
是其余的,因为这些都是无关紧要的。
- 您绝对希望 write 存在,因此
因此,如果用户尝试创建具有权限的文件475
(为所有者读取,为组读取所有内容,为其他人读取执行),这将导致(475 & 750) | 200
== 450 | 200
(650
读取和为所有者写入,为组读取执行)。删除了组的写权限和其他人的权限create mask
,并添加了所有者的写权限force create mode
。