除非文件具有 777 权限,否则与“强制用户”的 Samba 共享仍然不可写

除非文件具有 777 权限,否则与“强制用户”的 Samba 共享仍然不可写

我有一个运行 Debian 10 和 Samba 4.9.5 的无头服务器。我想在其中共享一个任何用户都具有完全读/写访问权限的文件夹。这是我的整个 smb.conf 文件:

[global]
workgroup = WORKGROUP
netbios name = MyServerName
security = user
map to guest = bad user
guest account = myuser
dns proxy = no
log level = 4

[Stuff]
path = /home/myuser/share
force user = myuser
force group = myuser
browseable = yes
guest ok = yes
write list = myuser
read only = no

myuser具有对所有文件的读/写访问权限以及对/home/myuser/share.但是,某些文件对其组没有写访问权限或其他权限。即他们的权限是755、644等。

无论出于何种原因,即使我已force user设置为myuser.

我也刚刚注意到这map to guest似乎也无法正常工作。如果我使用无效的用户名连接,它会拒绝它,而不是将其映射到帐户myuser并允许访问Stuff.

有人可以帮我弄清楚为什么这不起作用吗?

我确实搜索了类似的问题并发现了这个:如何创建无需 777 权限即可从 Windows 写入的 Samba 共享,但公认的解决方案是使用force user,这正是我正在做的,但由于某种原因它仍然不起作用。

答案1

我想我遇到了和你一样的问题。由于某种原因force user似乎需要组写权限。不过,它似乎不需要全局写入权限,因此作为一种解决方法,您应该能够摆脱 660/770 权限而不是 777 权限。这不会降低安全性;在 samba 之外将文件移入其中很烦人,因为您需要使它们可组写。

将其放入您的 smb.conf 下[Stuff]

force user = myuser
create mask = 0660
directory mask = 0770

然后在您的共享文件夹上运行:

sudo chown -R myuser:myuser /home/myuser/share
sudo chmod -R 0660 /home/myuser/share
sudo chmod -R ug+X /home/myuser/share

然后重新启动smbd。对于当前存在的文件和通过 samba 新创建的文件,上面的命令会将所有文件设置为 660,将所有目录设置为 770。请注意,您不需要force group;默认情况下,它与 的主要组匹配force user。另请注意,我在这里完全拒绝世界权限。如果您希望全世界都可读,您可以使用 0664、0775 和 ugw+X。

不幸的是,如果没有组写权限,我无法使其工作。我怀疑这是 samba 的一个错误。最近的桑巴错误 #14617阻止通过删除文件force user。这可能是另一个相关的错误,但我对此了解不够,无法报告它。如果您知道如何让它与 0644/0755 一起工作,请告诉我!

答案2

好的,您是否使用“smbpasswd -a 用户名”创建了用户(需要以 root 身份运行)?如果没有,那么您的访客帐户“myuser”将无法使用。这意味着没有人能够访问您的共享。身份验证(基于您的 smb.conf)的工作方式如下:用户连接到 Samba,如果该用户已知并提供正确的密码,则允许他们访问您的共享,但他们保存的任何内容都将被保存为好像属于“ myuser',但他们将能够读取和写入文件。如果他们是已知用户,但提供了错误的密码,则连接将被悄悄断开。因为全局中有“map to guest = bad user”,共享中有“guest ok = yes”,所以连接到 Samba 的未知用户将在到达共享附近之前被映射到来宾帐户“myuser”,并且如下所示:他们现在是已知用户,他们将被允许访问共享。至于 smb.conf 太短,那么,你的可以更短。您不需要“强制组”行,“强制用户”将为您执行此操作,而且由于“myuser”默认具有写入权限,因此您不需要“写入列表”行。最后,您永远不需要在任何地方设置“browseable = yes”,这是默认设置。

答案3

我花了整整两天的时间试图让它工作,只有在我按照 ludocode 的指示进行操作后,我才终于可以访问共享。太感谢了!

一些额外的评论(我在这里发布作为答案,因为我的分数仍然低于 50 并且无法发表评论):

  • 正如 ludocode 正确提到的,force group如果来宾用户的主要组设置正确,则不需要。

  • write list = myuser也不需要,因为您只有一个 unix 用户。read only = no(或write ok = yes又名writeable = yes又名writable = yes)就足够了。

  • 如果您在 Windows 计算机上使用存档位,我建议您再使用两个参数,例如标记尚未备份的文件,或者想要完全支持文件创建时间:

     dos filemode = yes
     store dos attributes = yes
    

有关详细信息,请参阅 Samba Wiki (dos文件模式,存储 dos 属性)。请注意,从 Samba 4.0.9 开始,后者是默认值。您必须使用支持扩展属性的文件系统。 BTRFS 默认支持这个,你一定不添加user_xattr为 /etc/fstab 中的挂载选项。

据了解,这并不能直接回答问题。但现在您已经有了一个smb.conf可供使用的完整文件,并且在一个页面上包含了简单 Samba 独立设置所需的所有信息。

相关内容