如何创建可在没有777权限的情况下从Windows写入的Samba共享?


33

我在Linux机器(Debian 8)上有一条路径,我想与Samba 4共享到Windows计算机(域中的Win7和8)。在我中,smb.conf我做了以下工作:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes
guest ok = yes
public = yes

我可以从Windows获得完美的读取访问权限。但是为了具有写访问权,我需要做chmod -R 777 /path/to/share才能从Windows对其进行写操作。

我想要的是在提供的Linux所有者的Linux凭据后从Windows进行写访问/path/to/share

我已经尝试过:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes

然后Windows要求提供凭据,但是无论我输入什么,都始终被拒绝。

在不授予777的情况下从Windows域计算机获得对Samba共享的写访问权的正确方法是什么?

Answers:


49

我建议为该共享创建一个专用用户,并在中指定它force user(请参阅docs)

创建一个用户(shareuser例如),并将共享文件夹中所有内容的所有者设置为该用户:

adduser --system shareuser
chown -R shareuser /path/to/share

然后在中添加force user和权限掩码设置smb.conf

[myshare]
path = /path/to/share
writeable = yes
browseable = yes
public = yes
create mask = 0644
directory mask = 0755
force user = shareuser

请注意,这guest ok是的同义词public


1
我有一个类似的问题,所有的Google搜索都显示了简单地使用777的肮脏方式。我想要775作为我的共享文件夹,并且希望使用Linux“ defaultUser”创建文件,我也使用public = yes。文件夹是775,创建和目录掩码是775,但是在Windows中它是不可写的,我无法理解为什么。加force user = defaultUser给我做的工作。
firepol

每当尝试共享目录时,我都无法正常工作,我只是得到一个窗口,告诉我我需要授予“其他”写权限才能共享目录。
马克·克莱默

我知道了,问题出在smb.conf。Google甚至sambas文档都说该文件应该在,/usr/local/samba/lib但实际上它在/etc/samba
Mark Kramer

1
@MarkKramer遵循特定Linux发行版中包含的文档是一个好主意,因为许多发行版会重新组织文件以适合Linux Foundation的FHS(文件系统层次结构标准)。我建议阅读并搜索与发行版一起提供的文档,因为google并非总是最好的答案,例如,您可能会获得有关该软件的不同版本的信息。最好的祝福。
RobertL

2

在中的共享设置中smb.conf,您需要使用write list = ...一行指定允许写入共享的用户和/或组的名称。

例:

[myshare]
...
write list = my_linux_username

然后,您将需要使用以下smbpasswd命令来设置用于验证my_linux_usernameSamba 的密码:

sudo smbpasswd -a my_linux_username

此步骤是必需的,因为输入的标准系统密码/etc/shadow与SMB协议中使用的密码哈希算法不兼容。客户端发送SMB身份验证数据包时,将包含哈希密码。它只能与使用相同算法的另一个密码哈希进行比较。

(非常老的千年指令可能会建议在Samba中禁用密码加密,并使用某些注册表黑客行为以使Windows向网络发射未加密的密码。此建议已过时:这些注册表黑客行为可能在当前版本的Windows中不再起作用Windows,并允许任何可以监视您的网络流量的人轻松捕获您的密码。)


客户端可能还要做一件事。当Windows客户端系统加入Active Directory域并使用AD帐户登录时,它将自动为所有不合格的用户名添加用户AD域名称的前缀,即,您将通过身份验证AD_DOMAIN\your_username,而不仅仅是your_username

如果您使用本地帐户登录(或者您的客户端系统未加入AD域),则Windows可能会自动为用户名加上客户端主机名作为前缀,除非您指定其他域名。

要从独立Windows客户端成功登录独立Samba服务器,您可能必须将用户名指定为SAMBA_SERVER_HOSTNAME\your_username

否则,Samba会将用户名视为WINDOWS_CLIENT_HOSTNAME\your_username,得出结论,它无法验证属于域名的任何用户WINDOWS_CLIENT_HOSTNAME,并且将拒绝登录。

(较新版本的Samba 可能针对此特定情况进行了内置检查,尽管如此,它们仍可能允许您访问。但这基本上就是SMB身份验证“幕后工作”的方式,并且如果您需要处理旧版本的Samba, ,它可能仍然有用。)


1

我一直在寻找它是因为我很着急,甚至没有时间专注于创建用户等等。

只是不得不拿出一个Debian 9机器的数据尽快,这是我因子评分,如果你想避免跳过命令,你也可以做到这一点的最快方法,但显然是不推荐,除非你在一个很快点

[mymfolder]
path = /mymfolder
writeable = yes
browseable = yes
public = yes
create mask = 0777
directory mask = 0777
force user = root 

如果您采用这种方式,则可以使用“ hosts allow”选项限制主机。请参阅:samba.org/samba/docs/server_security.html
ctorx
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.