我想要有关创建 Samba 共享的说明,该共享只能由特定的 Windows 10 用户访问,且无需密码。
我读过一些教程,虽然我可以轻松创建任何人都可以访问的共享,但我无法创建只有特定用户才能访问的共享。我可以看到相关目录,但如果我尝试打开它,我会收到“访问被拒绝”错误,并且 Windows 文件资源管理器会要求输入用户名和密码。
我确实创建了一个 Linux 用户,我认为该用户名是 Windows PC 上的用户名,密码与 Windows 用户相同。如果我将我创建的这个 Linux 用户的凭据输入到上述提示中,我将被授予访问权限。此时我能想到的只是 Linux 帐户的用户名与相应的 Windows 帐户不同。
以下是 smb.conf 中的内容
encrypt passwords = yes
security = user
[Email Backup]
comment = email backup folder
path = /home/samba/emailbackup
guest ok = yes
read only = no
browseable = yes
valid users = xavie emailer +emailbackup
xavie
是应该与 Windows 帐户相对应的 Linux 帐户的名称,emailer
是需要访问目录的另一个 Linux 帐户,并且emailbackup
是两个帐户都是成员的组。如果这有任何变化,Windows 帐户是 Microsoft 帐户(即不是本地帐户;与 @Outlook.com 电子邮件地址绑定)。
如果此问题是由错误的用户名引起的,有人可以告诉我如何找到需要分配给 Linux 帐户的用户名吗(例如,是否有日志文件可以查看哪个用户试图访问 Samba 共享)?否则,我还可以检查其他可能导致此问题的原因吗?
编辑: 我在网上搜索了一些信息,并取得了一些进展。在检查了 Samba 的日志文件后,我发现我认为用户名不正确是正确的。根据日志文件,当用户使用 Microsoft 帐户时,Windows 10 会使用该帐户使用的电子邮件地址而不是用户名向 Samba 识别用户。这是我看到的日志(级别 2):
[2016/08/20 14:15:36.349641, 2] ../source3/param/loadparm.c:2700(lp_do_section)
Processing section "[All Users]"
[2016/08/20 14:15:36.349966, 2] ../source3/param/loadparm.c:2700(lp_do_section)
Processing section "[Email Backup]"
[2016/08/20 14:15:36.350850, 2] ../source3/auth/auth.c:315(auth_check_ntlm_password)
check_ntlm_password: Authentication for user [<snip email address>] -> [<snip email address>] FAILED with error NT_STATUS_NO_SUCH_USER
我将电子邮件地址添加到 smbuser 文件中,并将其与我创建的 Linux 帐户关联。此操作有效,日志现在显示我已成功验证身份,但现在我遇到了新问题。
新问题是,当我登录到上面提到的帐户时,Samba 共享对我的 PC 根本不起作用。基本上,我的 Ubuntu 服务器上有两个共享;一个任何人都可以访问的公共共享,另一个我希望只有 Windows 10 用户才能访问的共享。在我进行上述更改后,该 Windows 10 用户现在无法再看到任何一个共享,甚至无法访问 Ubuntu 服务器。另一方面,我父亲的笔记本电脑没有 Samba 帐户,可以访问服务器并查看两个共享(但无法在没有身份验证的情况下访问非公共共享)。以下是使用 smbusers 的更改创建的新日志:
[2016/08/20 14:36:44.523779, 2] ../source3/param/loadparm.c:2700(lp_do_section)
Processing section "[All Users]"
[2016/08/20 14:36:44.524358, 2] ../source3/param/loadparm.c:2700(lp_do_section)
Processing section "[Email Backup]"
[2016/08/20 14:36:44.552274, 2] ../source3/auth/auth.c:305(auth_check_ntlm_password)
check_ntlm_password: authentication for user [<snip email address>] -> [xavie] -> [xavie] succeeded
[2016/08/20 14:36:44.553509, 1] ../source3/param/loadparm.c:2389(lp_idmap_range)
idmap range not specified for domain '*'
[2016/08/20 14:36:44.553782, 1] ../source3/auth/token_util.c:430(add_local_groups)
SID S-1-5-21-1934213540-918117097-1557597498-1000 -> getpwuid(1002) failed
[2016/08/20 14:36:44.554723, 1] ../source3/param/loadparm.c:2389(lp_idmap_range)
idmap range not specified for domain '*'
[2016/08/20 14:36:44.554938, 1] ../source3/auth/token_util.c:430(add_local_groups)
SID S-1-5-21-1934213540-918117097-1557597498-1000 -> getpwuid(1002) failed
以下是 smb.conf 的当前内容,希望对大家有帮助。我只包括我更改的内容;未提及的内容均为默认内容:
[global]
log level = 2
username map = /etc/samba/smbusers
encrypt passwords = yes
security = user
[All Users]
comment = Directory accessible to all users
path = /home/samba/allusers
guest ok = yes
read only = no
browseable = yes
create mask = 0777
directory mask = 0777
[Email Backup]
comment = email backup folder
path = /home/samba/emailbackup
guest ok = yes
read only = no
browseable = yes
valid users = xavie emailer +emailbackup
谁能看到我遇到的新问题是什么?
非常感谢您的帮助,敬请
答案1
我已经设法弄清楚如何使我所请求的工作完成,并且将发布说明。
- 首先,您需要确定需要添加的用户名是什么。最简单的方法是先添加到
log level = 2
。smb.conf
然后启动并启用 Samba 服务。然后在登录相关帐户时使用 Windows PC 上的文件资源管理器连接到 Samba 服务器(您不必打开任何共享目录)。然后打开在找到的日志文件,/var/log/samba/log.<ip address of Windows PC>
所需的用户名将记录在那里。现在,您可以根据需要将日志级别设置为 0。 - 使用命令为 Samba 用户创建一个 Linux 帐户
useradd
(或者如果您愿意,可以使用现有帐户)。您无需担心此帐户的密码,但如果您创建新帐户,则可能需要阻止其登录。此帐户的用户名不必与上面提到的名称相同,但如果相同会更容易。此帐户的目的是为了文件权限,并让 Linux 确定 Windows 用户可以访问哪些文件和目录。 - 使用命令创建一个与步骤2中的Linux帐户同名的Samba用户
smbpasswd
。确保分配给该帐户的密码与用于Windows帐户的密码相同。 - 如果 Samba 和 Windows 帐户不共享相同的用户名,则必须添加
!<Samba user> = <Windows user>
到smb.conf
或者添加<Samba user> = <Windows user>
到smbusers
和username map = /etc/samba/smbusers
到smb.conf
。 - 就是这样。请确保
valid users =
在您希望仅由您的 Windows 帐户访问的任何共享上设置该选项。