我正在寻找设置使用 LDAP 进行后端身份验证的新 Samba 文件共享的方法。LDAP 服务器已设置完毕,并且 Samba 服务器所在的计算机已设置为允许使用 LDAP 身份验证进行 SSH 访问。
似乎记录的 Samba/LDAP 集成的最常见用例涉及在 LDAP 服务器上存储 Samba 模式、同步密码、允许通过 Samba 更新 LDAP 密码等等。我并不需要这些 - 我只想让 Samba 服务器通过 LDAP 进行匿名身份验证,并检索用户的组数据,以便可以在 Samba 配置中处理授权。
如果重要的话:
- LDAP:RHEL 7.4 上的 OpenLDAP 2.4
- SMB:Ubuntu 18.04 上的 Samba 4.7
以下是我目前所掌握的信息:
[global]
server string = Samba Server (%v)
workgroup = WORKGROUP
interfaces = eno1
server role = standalone server
log file = /var/log/samba/smb.log
max log size = 10000
log level = 3 passdb:5 auth:5
passdb backend = ldapsam:ldaps://hostname
ldap suffix = dc=hostname,dc=TLD
ldap user suffix = cn=users,cn=accounts
ldap group suffix = cn=groups,cn=accounts
[Share1]
path = /srv/share1
valid users = @group1, @group3
force group = @group1
read only = no
browsable = yes
[Share2]
path = /srv/share2
valid users = @group2, @group3
force group = @group2
read only = no
browsable = yes
但是 Samba 无法启动。Systemctl status 显示以下内容:
../source3/passdb/secrets.c:362(fetch_ldap_pw)
fetch_ldap_pw: neither ldap secret retrieved!
../source3/passdb/pdb_ldap.c:6542(pdb_init_ldapsam_common)
pdb_init_ldapsam_common: Failed to retrieve LDAP password from secrets.tdb
../source3/passdb/pdb_interface.c:180(make_pdb_method_name)
pdb backend ldapsam:ldaps://hostname did not correctly init (error was NT_STATUS_NO_MEMORY)
我想不是必须执行以下操作:
- 为 Samba 服务器本身设置一个新用户以供使用
- 允许 Samba 修改 LDAP
- 将 Samba 方案上传到 LDAP
我只希望 Samba 能够:
- 确认入站请求在 LDAP 中配置了有效的用户/密码
- 使用 LDAP 的用户数据(姓名、群组等)进行自己的共享权限配置
我还需要做什么?
答案1
我假设您想在简单的 WinNT 兼容域控制器模式下运行 Samba,而不是完整的 Active Directory 模式。
首先,您必须了解 SMB 身份验证基于 NTLM 密码哈希。基本上,这是质询-响应身份验证的明文凭证,可以存储在 LDAP 用户条目中,但存储在单独的属性中sambaNT密码。 属性用户密码是不是根本没有使用,并且 Samba 不会向 LDAP 服务器发送绑定请求来检查用户的密码。
=> 您必须安装 Samba 模式并添加辅助对象类sambaSam帐户用户条目。
在正确的设置中,你必须授权 Samba DC 的服务用户读取此属性sambaNT密码。您的 ACL 必须阻止任何其他人读取该属性。
=> 您必须在 LDAP 目录中为 Samba DC 创建服务条目并授予对用户条目的读取权限。
还有一个名为slapo-smbk5pwd哪些更新sambaNT密码以防属性用户密码通过密码修改扩展操作进行设置(参见RFC 3062)。通过使用此方法,您无需授予 Samba 对用户条目的写访问权限。