Debian squeeze auth 针对 AD 2008R2 nslcd 说未找到用户

Debian squeeze auth 针对 AD 2008R2 nslcd 说未找到用户

我正在设置 debian squeeze 来针对 Active Directory 2008R2 进行身份验证。nslcd.conf 的一部分如下:

uri ldap://bddc.test.local
base dc=test,dc=local
binddn cn=blah,ou=Public Services,dc=test,dc=local
bindpasswd xxxxx
scope subtree
pagesize 1000
referrals off
filter passwd (&(objectClass=user)(uidNumber=*)(unixHomeDirectory=*))
map    passwd uid              sAMAccountName
map    passwd homeDirectory    unixHomeDirectory
map    passwd gecos            displayName
map    passwd userPassword     unixUserPassword
filter shadow (&(objectClass=user)(uidNumber=*)(unixHomeDirectory=*))
map    shadow uid              sAMAccountName
map    shadow shadowLastChange pwdLastSet
filter group (&(objectClass=group)(gidNumber=*))
map    group  uniqueMember     member

当我尝试使用用户 staff.test 通过 ssh 连接到该服务器时,nslcd 的调试显示:

nslcd: [b0dc51] DEBUG: connection from pid=31632 uid=0 gid=0
nslcd: [b0dc51] DEBUG: nslcd_pam_authc("staff.test","","sshd","***")
nslcd: [b0dc51] DEBUG: myldap_search(base="dc=test,dc=local", filter="(&(&(objectClass=user)(uidNumber=*)(unixHomeDirectory=*))(sAMAccountName=staff.test))")
nslcd: [b0dc51] DEBUG: ldap_initialize(ldap://bddc.test.local)
nslcd: [b0dc51] DEBUG: ldap_set_rebind_proc()
nslcd: [b0dc51] DEBUG: ldap_set_option(LDAP_OPT_PROTOCOL_VERSION,3)
nslcd: [b0dc51] DEBUG: ldap_set_option(LDAP_OPT_DEREF,0)
nslcd: [b0dc51] DEBUG: ldap_set_option(LDAP_OPT_TIMELIMIT,0)
nslcd: [b0dc51] DEBUG: ldap_set_option(LDAP_OPT_TIMEOUT,0)
nslcd: [b0dc51] DEBUG: ldap_set_option(LDAP_OPT_NETWORK_TIMEOUT,0)
nslcd: [b0dc51] DEBUG: ldap_set_option(LDAP_OPT_REFERRALS,LDAP_OPT_OFF)
nslcd: [b0dc51] DEBUG: ldap_set_option(LDAP_OPT_RESTART,LDAP_OPT_ON)
nslcd: [b0dc51] DEBUG: ldap_simple_bind_s("CN=blah,OU=Public Services,DC=test,DC=local","***") (uri="ldap://bddc.test.local")
nslcd: [b0dc51] DEBUG: ldap_result(): end of results
nslcd: [b0dc51] "staff.test": user not found

当我尝试使用 ldapsearch 时:

ldapsearch -x -H ldap://bddc.test.local -D “cn=blah,ou=Public Services,dc=test,dc=local” -w xxxx “uid=staff.test” -b “dc=test,dc=local”

# extended LDIF
#
# LDAPv3
# base <dc=test,dc=local> with scope subtree
# filter: uid=staff.test
# requesting: ALL
#

# Staff Test, User, vgu.local
dn: CN=Staff Test,OU=User,DC=vgu,DC=local
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: Staff Test
sn: Test
givenName: Staff
...

“getenv passwd staff.test” 没有显示任何内容。“getenv passwd” 仅显示一个 ldap 用户,即“blah” - 用于绑定的用户。

有人能告诉我出了什么问题吗?

谢谢。

答案1

无法找到用户的 nslcd 搜索过滤器的可配置部分是:

(&(objectClass=user)(uidNumber=*)(unixHomeDirectory=*))

成功的 ldapsearch 过滤器是:

uid=staff.test

在英语中,nslcd 过滤器的可配置部分需要输入以下内容:

  1. 源自“用户”类
  2. 为“uidNumber”字段指定一个值
  3. 为“unixHomeDirectory”字段指定一个值

如果出现以下任何情况不是满足,则该条目将不会包含在结果中。

您是否确认这个“staff.test”用户确实拥有uid编号unix主目录在他们的 AD 帐户中?否则,您可以尝试暂时将筛选条件缩小到:

(objectClass=user)

相关内容