我正在设置 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 过滤器的可配置部分需要输入以下内容:
- 源自“用户”类和
- 为“uidNumber”字段指定一个值和
- 为“unixHomeDirectory”字段指定一个值
如果出现以下任何情况不是满足,则该条目将不会包含在结果中。
您是否确认这个“staff.test”用户确实拥有uid编号和unix主目录在他们的 AD 帐户中?否则,您可以尝试暂时将筛选条件缩小到:
(objectClass=user)