我有一个运行 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 独立设置所需的所有信息。