我目前用文件服务器替换了旧的 NAS 系统。我正在寻找一种解决方案,在文件服务器 (Debian 12) 上创建 CIFS/SMB 共享,这些共享将受到通过 LDAP 组工作的登录保护。
LDAP 设置由一个没有 samba 属性的 OpenLDAP 服务器组成,我真的很想保持这种状态。
我不关心共享中的文件权限,而只关心访问共享的一般权限。
所以我的问题是:如何为我的用户提供通过基于 LDAP 组的身份验证保护的 CIFS/SMB 共享?
我想到的解决方案是基于 WebDAV 的方法(通过 apache2 LDAP 集成进行 LDAP 身份验证),它在 Linux 上运行良好。但由于 WebDAV 实现不佳,它在 Windows 上运行得不是很好,所以我不得不放弃它。
如果您有除了使用 CIFS/SMB 共享之外的任何其他想法,这些想法提供基于 LDAP 组的权限的共享并且可以从 Windows/Linux/Mac 安装而不会出现任何问题,请告诉我。
谨此致谢。
答案1
Samba 是 Linux 的默认 SMBv3 文件服务器,当不处于 AD 模式时,它始终使用系统帐户进行所有访问控制 - 包括共享级访问 ( valid users = @staff
) 和文件级访问 (Unix 权限和 POSIX ACL)。如果您的系统设置为将 POSIX 帐户/组存储在 LDAP 服务器中,则 Samba 将可以看到这些帐户/组。
无论选择哪种软件,都无法重复使用验证到 LDAP 服务器。也就是说,您可以设置凯尔伯罗斯如果您还拥有 Kerberos KDC,则可以使用 SMB 身份验证,但您将无法直接根据 LDAP“userPassword”验证用户密码,因为它们从未真正传输到 SMB 服务器。为了接受 NTLM 身份验证,SMB 服务器必须知道NT 哈希密码而不是任何其他哈希类型,因此您需要使用 为每个人分配一个单独的“仅 SMB”密码smbpasswd -a
。
因此,如果您的目标是拥有一个密码数据库,则需要设置 Kerberos KDC,让 Samba(以及可选的 OpenLDAP)接受 Kerberos 票证,最后让 OpenLDAP 验证针对 Kerberos 的简单绑定密码 - 而不是相反。
(您可以结合这两种方法而无需任何额外的配置 - 同一个 smbd 可以接受 Kerberos 票证,同时仍然支持旧客户端的 NTLM。)
这同样适用于 SMBv3 和过时的 CIFS/SMBv1。