如何将 Samba 配置为仅使用 LDAP 进行身份验证?

Bri*_*man 6 openldap ldap samba samba4

我希望设置一个使用 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
Run Code Online (Sandbox Code Playgroud)

但是,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)
Run Code Online (Sandbox Code Playgroud)

我想不会有做到以下几点:

  • 为 Samba 服务器本身设置一个新用户使用
  • 允许 Samba 修改 LDAP
  • 将 Samba 方案上传到 LDAP

我只希望 Samba 能够:

  • 确认入站请求在 LDAP 中配置了有效的用户/通行证
  • 将 LDAP 的用户数据(名称、组等)用于其自己的共享权限配置

我还需要做什么?

小智 5

我假设您希望在简单的 WinNT 兼容域控制器模式下运行 Samba,而不是完整的 Active Directory 模式。

首先,您必须了解 SMB 身份验证基于 NTLM 密码哈希。基本上,这是用于质询响应身份验证的明文凭证,可以存储在 LDAP 用户条目中,但存储在单独的属性sambaNTPassword中。根本不使用userPassword属性,并且 Samba 不会向 LDAP 服务器发送绑定请求来检查用户的密码。

=> 您必须安装 Samba 模式并将辅助对象类sambaSamAccount添加到用户条目中。

在正确的设置中,您必须授权 Samba DC 的服务用户读取此属性sambaNTPassword。您的 ACL 必须防止其他人读取该属性。

=> 您必须在 LDAP 目录中为 Samba DC 创建服务条目并授予对用户条目的读取访问权限。

还有一个名为slapo-smbk5pwd的 OpenLDAP 服务器覆盖层,它会在通过密码修改扩展操作设置属性userPassword时更新sambaNTPassword (请参阅RFC 3062)。通过使用此功能,您不必授予 Samba 对用户条目的写访问权限。