我在 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 写入它。
我想要的是在提供 .net 的 Linux 所有者的 Linux 凭据后从 Windows 进行写入访问/path/to/share
。
我已经尝试过:
[myshare]
path = /path/to/share
writeable = yes
browseable = yes
然后 Windows 要求提供凭据,但无论我输入什么,它总是被拒绝。
在不授予 777 权限的情况下从 Windows 域计算机获得对 Samba 共享的写访问权限的正确方法是什么?
答案1
我建议为该共享创建一个专用用户并在中指定它force user
(参见文档)。
创建一个用户(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
。
答案2
在 中的共享设置中smb.conf
,您需要使用一行指定允许写入共享的用户和/或组的名称write list = ...
。
例子:
[myshare]
...
write list = my_linux_username
然后您需要使用以下smbpasswd
命令设置密码以进行my_linux_username
Samba 身份验证:
sudo smbpasswd -a my_linux_username
此步骤是必要的,因为标准系统密码的哈希/etc/shadow
算法与 SMB 协议中使用的密码哈希算法不兼容。当客户端发送 SMB 身份验证数据包时,它包含哈希密码。它只能与使用相同算法的另一个密码哈希进行比较。
(上个千年的非常非常古老的指令可能会建议在 Samba 中禁用密码加密,并使用某些注册表黑客技术来允许 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,它可能仍然有用。)
答案3
我的案例中的基本工作设置(使用 SAMBA 访客功能,/myfolder 访问权限适合[your_SAMBA-Unix_share_user_account]):
[global]
guest account = [your_SAMBA-Unix_share_user_account]
[mymfolder]
path = /myfolder
browseable = yes
read only =no
guest ok =yes
将 Windows 计算机中的任何其他映射驱动器与此 SAMBA 服务器断开连接非常重要,因为似乎不允许同时有多个登录用户。