为什么smb.conf中存在“强制创建模式”和“强制目录模式”参数?

为什么smb.conf中存在“强制创建模式”和“强制目录模式”参数?

我在读如何使用 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 maskforce create mode
  • directory maskforce directory mode

这两对参数具有相同的值。

为什么create maskdirectory mask参数本身还不够?为什么存在force create modeforce directory mode参数?

我读过官方文档桑巴舞smb.conf(5)页面,其中有“每个参数的说明”部分。但对于这两个“力”参数,它们存在的原因尚不清楚。

答案1

首先,链接的文档说:

创建模式

该参数是一个同义词创建蒙版

创建蒙版(S)

创建文件时,会根据从 DOS 模式到 UNIX 权限的映射来计算所需的权限,然后将所得的 UNIX 模式与该参数进行按位“与”运算。该参数可以被认为是文件的 UNIX 模式的按位掩码。此处未设置的任何位都将从创建文件时设置的模式中删除。 [...]

接下来,Samba 将从该参数创建的 UNIX 模式与强制创建模式参数默认设置为000。

所以:

  • create mask从为要创建的文件提供的权限中删除不允许的(屏蔽的)权限
  • force create mode为要创建的文件添加所需的权限

例如,假设您想要:

  1. 文件没有组写权限,其他人也没有权限
  2. 文件始终具有所有者写入权限(但您不关心所有者是否存在其他权限)

然后:

  1. 对于 (1),create mask将是750

    • 您不关心用户为所有者权限添加什么,因此7允许一切。
    • 您不需要组写入权限,因此只允许读取和执行,因此5对于组。
    • 0让其他人禁止一切。
  2. 对于 (2),force create mask将是200

    • 您绝对希望 write 存在,因此2对于所有者而言,然后0是其余的,因为这些都是无关紧要的。

因此,如果用户尝试创建具有权限的文件475(为所有者读取,为组读取所有内容,为其他人读取执行),这将导致(475 & 750) | 200== 450 | 200650读取为所有者写入,为组读取执行)。删除了组的写权限和其他人的权限create mask,并添加了所有者的写权限force create mode

相关内容