![如何使用 ldap 代理 + nslcd 处理来自不同域的重复 AD 用户名进行身份验证](https://linux22.com/image/108907/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20ldap%20%E4%BB%A3%E7%90%86%20%2B%20nslcd%20%E5%A4%84%E7%90%86%E6%9D%A5%E8%87%AA%E4%B8%8D%E5%90%8C%E5%9F%9F%E7%9A%84%E9%87%8D%E5%A4%8D%20AD%20%E7%94%A8%E6%88%B7%E5%90%8D%E8%BF%9B%E8%A1%8C%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81.png)
我有一个场景,其中有一台 ubuntu 机器用作 ldap 代理,使用 ldap 作为后端,我有两台 Windows 机器 2008 r2 具有活动目录,每个都有不同的域abc.com 和 xyz.com。
两者不同,每个都有唯一的用户名。
但也许两个广告中可能有相同的用户名,比如用户名abc.com 中的 test_ad1&相同的用户名xyz.com 中的 test_ad1用户属性中的 unix 属性选项卡具有不同的 uid/gid。
那么如何处理来自不同 AD 的重复用户进行身份验证呢?
到目前为止,我已经尝试过,即使用 nslcd、pam 设置正确的 ldap 代理,我能够分别获取两个 AD 用户,即通过使用 “获取密码”我的 ubuntu 代理机器上的命令,显示用户喜欢
test_ad3:*:20001:666:test ad3:/home/test_ad3:/bin/bash // this users are of ad1 (abc.com)
test_ad4:*:20002:666:test ad4:/home/test_ad4:/bin/bash // this users are of ad1 (abc.com)
test_ad1:*:20003:666:test ad11:/home/test_ad1:/bin/bash // this users are of ad1 (abc.com) password at AD1 is 123@test
test_ad1:*:10010:777:test ad1:/home/test_ad1:/bin/bash // this users are of ad2 (xyz.com) password at AD2 is test@1234
test_ad2:*:10011:777:test ad2:/home/test_ad2:/bin/bash // this users are of ad2 (xyz.com)
正如我们所看到的,所有用户都有不同的 uid/gid,即它们是唯一的。
因此,为了进行身份验证,我尝试在我的 ubuntu ldap 代理计算机上使用单独的域名,但失败了,
1) su abc.com\\test_ad1---> auth.log shows me "No passwd entry for user test_ad1"
2) su xyz.com\\test_ad1---> auth.log shows me "No passwd entry for user test_ad1"
但当我只尝试苏测试_ad1& 输入第一个广告(abc.com)的密码,即123@测试比它登录成功并且当我输入第二个广告(xyz.com)的密码时测试@1234对于同样的苏测试_ad1比它显示的su: 身份验证失败”虽然密码不同在 cli 上。
我想是因为其他test_ad1(10011:777即ad2用户)紧接着test_ad1(20003:666即ad1用户) 在获取密码列表,这可能是由于顺序工作行为NSCD我猜,如有错误请指正。
这是我的 slapd.conf
################ LDAP MULTIPLE BACK END ##########
######## 1st AD ##########
moduleload back_ldap
backend ldap
database ldap
suffix "dc=ad2,dc=com"
uri ldap://192.168.1.189:389/
rebind-as-user
idassert-bind bindmethod=SIMPLE binddn="CN=Administrator,CN=Users,DC=ad2,DC=com" credentials=Admin@1234
#mode=none
idassert-authzFrom "*"
access to * by * read
moduleload rwm.la
overlay rwm
rwm-map attribute uid sAMAccountName
rwm-map attribute homeDirectory unixHomeDirectory
rwm-map objectClass posixAccount person
######## 1st AD ##########
######## 2nd AD ##########
database ldap
suffix "dc=ad1,dc=com"
uri ldap://192.168.1.185:389/
rebind-as-user
idassert-bind bindmethod=SIMPLE binddn="CN=Administrator,CN=Users,DC=ad1,DC=com" credentials=Admin@1234
#mode=none
idassert-authzFrom "*"
access to * by * read
overlay rwm
rwm-map attribute uid sAMAccountName
rwm-map attribute homeDirectory unixHomeDirectory
rwm-map objectClass posixAccount person
######## 2nd AD ##########
这是 nslcd.conf
# Mappings for Active Directory
pagesize 1000
referrals off
#nss_nested_groups yes
# Passwd
filter passwd (&(objectClass=posixAccount)(objectClass=USER)(!(objectClass=computer))(uidNumber=*))
map passwd homeDirectory unixHomeDirectory
map passwd gecos displayName
map passwd gidNumber primaryGroupID
map shadow uid sAMAccountName
# Shadow
filter shadow (&(objectClass=posixAccount)(!(objectClass=computer))(uidNumber=*))
map shadow shadowLastChange pwdLastSet
# Groups
filter group (&(objectClass=posixGroup)(gidNumber=*))
#map group uniqueMember member
# Local account for nsclcd
uid nslcd
gid openldap
# Where is the LDAP Proxy
#LDAP
uri ldap://192.168.1.186:389
base dc=ad1,dc=com
base dc=ad2,dc=com
#Note when i change base to reverse order than user test_ad1 logon successfully with ad2 password and ad1 password fails
#base dc=ad2,dc=com
#base dc=ad1,dc=com
base group ou=Groups,dc=ad1,dc=com
base group ou=Groups,dc=ad2,dc=com
# Connect-Account of ad1
binddn cn=administrator,cn=Users,dc=ad1,dc=com
bindpw Admin@1234
# Connect-Account of ad2
binddn cn=administrator,cn=Users,dc=ad2,dc=com
bindpw Admin@1234
注:我关注这用于验证 1 AD 的 LDAP 代理的文档。
我是新手&我知道这可能有些令人困惑!
那么任何 LDAP/AD 专家都可以帮助处理这种类型的场景吗?
任何帮助,将不胜感激。谢谢。