总结假设有一个基本的(但功能齐全的)LDAP/PAM 配置,当我尝试将现有的 UNIX/LDAP 用户添加到 Samba 时,smbpasswd 为何会失败并显示此错误消息?
我在 Debian 服务器上设置了一个基本但可以正常工作的 LDAP,其中有几个帐户,并加载了密码等,并且已创建了它们相应的 UNIX 帐户。我还有一个基本的 PAM/NSS 配置,似乎可以正常工作。
我可以通过 LDAP 登录并使用帐户。现在我想使用 Samba 配置一个简单的文件共享,并让它通过 PAM/LDAP 后端对用户进行身份验证。我现在需要使用该smbpasswd
实用程序创建 Samba 用户,但这会导致错误。
首先,我设置了 LDAP 密码:
# smbpasswd -W
然后我尝试添加一个已在 LDAP 中配置的用户:
# smbpasswd -a new_user
New SMB password:
Retype SMB password:
Failed to add entry for user new_user.
所以我不知道为什么这个命令会失败。起初我以为是因为我需要让 LDAP 目录中的用户成为sambaSamAccount
s。所以我更新了用户的 LDIF 文件,如下所示:
dn: cn=new_user,ou=group,dc=example,dc=com
cn: new_user
gidNumber: 1000
objectClass: top
objectClass: posixGroup
dn: uid=new_user,ou=people,dc=example,dc=com
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: sambaSamAccount
uid: new_user
uidNumber: 1000
gidNumber: 1000
cn: test user
sn: new_user
mail: [email protected]
loginShell: /bin/bash
homeDirectory: /home/new_user
sambaSID: 3000
sambaDomainName: TEST-ROME
对上述 LDIF 所做的唯一更改是添加了sambaSamAccount
和objectClass
和。最终我想实现一个 PDC,因此我很确定无论如何我都需要sambaSID
一个。sambaDomainName
sambaSamAccount
然而,经过所有这些之后,我仍然遇到同样的错误。
那么如何调试这个错误呢?
解决了按照建议调试守护进程后,我发现smbpasswd
正在使用空base dn
字段执行查询,因此没有返回任何结果。通过将ldap suffix
和ldap user suffix
字段添加到我的中解决了这个smb.conf
问题。之后我意识到我也需要一种正确的方法来生成 sambaSID,但这是一个单独的问题。
答案1
我发现调试此问题的最佳方法是从 LDAP 的角度查看发生了什么。首先执行“ps aux |grep slapd”以获取传递给守护进程的参数,在我的系统(CentOS 5.6)上,我得到:
/usr/sbin/slapd -h ldap:/// -u ldap
停止 slapd 守护进程(/etc/init.d/slapd stop 或类似命令),然后使用“-d”标志以交互方式(即从命令行)运行守护进程。-1(作为 -d 的参数)是一个很好的起点,即它记录所有内容,即
/usr/sbin/slapd -h ldap:/// -u ldap -d -1
如果信息量太大,请仔细阅读“-d”的参数 - 我记得我用了 256 相当多。这样做的目的是让 slapd 给出一些有用的输出,然后复制问题。您可能会得到一些有用的输出,这些输出显示了哪里出了问题。
答案2
只需将用户添加到您的本地登录用户中
例如:
用户添加 smbuser
smbpasswd -a smbuser
然后你才可以将该用户添加为 samba 用户