Надеюсь, кто-нибудь укажет, что я делаю неправильно. Мы работаем на системах CentOS6 / 7 с интеграцией AD уже пару лет. На стороне AD была установлена Windows 2012R2. Около двух недель назад что-то сломалось на стороне AD, и RODC Windows 2012R2, которые мы запускаем, больше не пользуются доверием своего хозяина и, похоже, осиротели. Мы по-прежнему можем выполнять запросы к этой системе, но, скорее всего, это связано с кешированием, и рано или поздно это исчезнет. Итак, мы подняли RODC для Windows 2019. Но проблема в том, что пользователи не могут пройти аутентификацию против них на наших серверах CentOS6 / 7. Кажется, проблема может быть в фильтрах, которые я установил, но дерево схемы выглядит нормально. Итак, у меня есть две системы, с которыми я тестирую. Один, который подключен к старому RODC Windows 2012R2, и другой, который подключен к новому RODC Windows 2019. Когда я бегу
getent passwd
На сервере CentOS, подключенном к старой системе, я получаю правильный набор пользователей, которым разрешено подключаться по SSH к этим системам, у которых установлены атрибуты Unix.
На сервере CentOS, который подключен к новой системе, я получаю только 3 пользователей из списка всех пользователей, которым разрешен SSH для этих систем, для которых установлены атрибуты Unix.
Ниже мои конфиги
nslcd.conf по интеграции CentOS6 / 7 Windows 2012R2
uri ldaps://readonlydomaincontroller_2012R2.foobar.local
ldap_version 3
base dc=foobar,dc=local
binddn ldapuser@foobar.local
bindpw password
scope sub
bind_timelimit 2
timelimit 2
reconnect_sleeptime 1
reconnect_retrytime 5
ssl on
tls_reqcert demand
tls_cacertdir /etc/openldap/cacerts
pagesize 1000
referrals off
idle_timelimit 10
filter passwd (&(objectClass=user)(uidNumber=*)(unixHomeDirectory=*)(|(memberof=CN=Ops,CN=Users,DC=foobar,DC=local)(memberof=CN=Support-Prod-Access,CN=Users,DC=foobar,DC=local)(memberof=CN=Support-Prod-Sudo,CN=Users,DC=foobar,DC=local)(memberof=CN=PS-Prod-Access,CN=Users,DC=foobar,DC=local)(memberof=CN=PS-Prod-Sudo,CN=Users,DC=foobar,DC=local)(memberof=CN=Dev-Prod-Access,CN=Users,DC=foobar,DC=local)))
filter shadow (&(objectClass=user)(uidNumber=*)(unixHomeDirectory=*)(|(memberof=CN=Ops,CN=Users,DC=foobar,DC=local)(memberof=CN=Support-Prod-Access,CN=Users,DC=foobar,DC=local)(memberof=CN=Support-Prod-Sudo,CN=Users,DC=foobar,DC=local)(memberof=CN=PS-Prod-Access,CN=Users,DC=foobar,DC=local)(memberof=CN=PS-Prod-Sudo,CN=Users,DC=foobar,DC=local)(memberof=CN=Dev-Prod-Access,CN=Users,DC=foobar,DC=local)))
filter group (&(objectClass=group)(|(distinguishedName=CN=Ops,CN=Users,DC=foobar,DC=local)(distinguishedName=CN=Support-Prod-Access,CN=Users,DC=foobar,DC=local)(distinguishedName=CN=Support-Prod-Sudo,CN=Users,DC=foobar,DC=local)(distinguishedName=CN=PS-Prod-Access,CN=Users,DC=foobar,DC=local)(distinguishedName=CN=PS-Prod-Sudo,CN=Users,DC=foobar,DC=local)(distinguishedName=CN=Dev-Prod-Access,CN=Users,DC=foobar,DC=local)))
map passwd uid sAMAccountName
map passwd homeDirectory unixHomeDirectory
map passwd gecos displayName
map passwd uidNumber uidNumber
map passwd gidNumber gidNumber
map passwd loginshell loginShell
map passwd homeDirectory unixHomeDirectory
map shadow uid sAMAccountName
map shadow shadowLastChange pwdLastSet
map group uniqueMember member
uid nslcd
gid ldap
pam_ldap.conf по интеграции CentOS6 / 7 Windows 2012R2
uri ldaps://readonlydomaincontroller_2012R2.foobar.local
ldap_version 3
base dc=foobar,dc=local
binddn ldapuser@foobar.local
bindpw password
scope sub
timelimit 2
bind_timelimit 2
bind_policy soft
nss_reconnect_tries 2
nss_map_objectclass posixAccount user
nss_map_objectclass shadowAccount user
nss_map_objectclass posixGroup group
nss_map_attribute uid sAMAccountName
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_attribute gecos displayName
nss_map_attribute uidNumber uidNumber
nss_map_attribute gidNumber gidNumber
nss_map_attribute loginshell loginShell
nss_map_attribute shadowLastChange pwdLastSet
nss_map_attribute uniqueMember member
pam_login_attribute sAMAccountName
pam_filter (&(objectclass=User)(|(memberof=CN=Ops,CN=Users,DC=foobar,DC=local)(memberof=CN=Support-Prod-Access,CN=Users,DC=foobar,DC=local)(memberof=CN=PS-Prod-Access,CN=Users,DC=foobar,DC=local)(memberof=CN=Dev-Prod-Access,CN=Users,DC=foobar,DC=local))
)
pam_password ad
ssl on
tls_checkpeer yes
tls_cacertdir /etc/openldap/cacerts
nslcd.conf по интеграции CentOS6 / 7 Windows 2019
uri ldaps://readonlydomaincontroller_2019.foobar.local
ldap_version 3
base dc=foobar,dc=local
binddn ldapuser@foobar.local
bindpw password
scope sub
bind_timelimit 2
timelimit 2
reconnect_sleeptime 1
reconnect_retrytime 5
ssl on
tls_reqcert demand
tls_cacertdir /etc/openldap/cacerts
pagesize 1000
referrals off
idle_timelimit 10
filter passwd (&(objectClass=user))
filter shadow (&(objectClass=user))
filter group (&(objectClass=group))
map passwd uid sAMAccountName
map passwd homeDirectory unixHomeDirectory
map passwd gecos displayName
map passwd uidNumber uidNumber
map passwd gidNumber gidNumber
map passwd loginshell loginShell
map passwd homeDirectory unixHomeDirectory
map shadow uid sAMAccountName
map shadow shadowLastChange pwdLastSet
map group uniqueMember member
uid nslcd
gid ldap
pam_ldap.conf по интеграции CentOS6 / 7 Windows 2019
uri ldaps://readonlydomaincontroller_2019.foobar.local
ldap_version 3
base dc=foobar,dc=local
binddn ldapuser@foobar.local
bindpw password
scope sub
timelimit 2
bind_timelimit 2
bind_policy soft
nss_reconnect_tries 2
nss_map_objectclass posixAccount user
nss_map_objectclass shadowAccount user
nss_map_objectclass posixGroup group
nss_map_attribute uid sAMAccountName
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_attribute gecos displayName
nss_map_attribute uidNumber uidNumber
nss_map_attribute gidNumber gidNumber
nss_map_attribute loginshell loginShell
nss_map_attribute shadowLastChange pwdLastSet
nss_map_attribute uniqueMember member
pam_login_attribute sAMAccountName
pam_filter (&(objectclass=User))
pam_password ad
ssl on
tls_checkpeer yes
tls_cacertdir /etc/openldap/cacerts
Фильтры для RODC 2019 были установлены менее строгими, потому что при настройке их на то, что они были для систем 2012R2, они не работают. Они не возвращают никаких учетных записей AD. Если фильтры установлены на минимум, они возвращают только 3 пользователей.
Эти 3 пользователя - единственные, которые при запросе через ldapsearch возвращаются с атрибутами Unix для RODC 2012R2 или 2019. Это также единственные пользователи, которые могут войти в CentOS6 / 7 как в настройке 2012R2, так и в настройке 2019 года.
ldapuser ldapsearch query 2012R2 RODC
# ldapuser, Robots, foo Admins, foobar.local
dn: CN=ldapuser,OU=Robots,OU=foo Admins,DC=foobar,DC=local
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: ldapuser
description: Used for LDAP integration with Linux system in Prod.
distinguishedName: CN=ldapuser,OU=Robots,OU=foo Admins,DC=foobar,DC=local
instanceType: 0
whenCreated: 20150929203823.0Z
whenChanged: 20190907192736.0Z
displayName: ldapuser
uSNCreated: 22445
memberOf: CN=Ops-RODC,CN=Users,DC=foobar,DC=local
memberOf: CN=Allowed RODC Password Replication Group,CN=Users,DC=foobar,DC=local
uSNChanged: 61145
name: ldapuser
objectGUID:: eD17aZT/50yAj7E50/Yb8Q==
userAccountControl: 66048
badPwdCount: 3
codePage: 0
countryCode: 0
badPasswordTime: 132123580510560719
pwdLastSet: 132123079922338235
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAAfV+0Y46Qq75ZpfUPkSMAAA==
accountExpires: 9223372036854775807
sAMAccountName: ldapuser
sAMAccountType: 805306368
userPrincipalName: ldapuser@foobar.com
lockoutTime: 132123580512121394
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=foobar,DC=local
dSCorePropagationData: 20190907054026.0Z
dSCorePropagationData: 20190907053843.0Z
dSCorePropagationData: 20190907053423.0Z
dSCorePropagationData: 20190907053423.0Z
dSCorePropagationData: 16010101000417.0Z
lastLogonTimestamp: 132123013087803886
msDS-RevealedDSAs: CN=rodc,OU=Domain Controllers,DC=foobar,DC=local
msDS-RevealedDSAs: CN=rodc,OU=Domain Controllers,DC=foobar,DC=local
msDS-RevealedDSAs: CN=rodc,OU=Domain Controllers,DC=foobar,DC=local
msDS-RevealedDSAs: CN=rodc,OU=Domain Controllers,DC=foobar,DC=local
msDS-RevealedDSAs: CN=rodc,OU=Domain Controllers,DC=foobar,DC=local
msDS-SupportedEncryptionTypes: 0
uid: ldapuser
msSFU30Name: ldapuser
msSFU30NisDomain: foobar
uidNumber: 10000
gidNumber: 10001
unixHomeDirectory: /home/ldapuser
loginShell: /bin/bash
ldapuser ** ldapsearch query 2019 RODC
# LDAP User, Users, foobar.local
dn: CN=LDAP User,CN=Users,DC=foobar,DC=local
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: LDAP User
sn: User
description: Used for LDAP integration with Linux system in Prod.
givenName: LDAP
distinguishedName: CN=LDAP User,CN=Users,DC=foobar,DC=local
instanceType: 0
whenCreated: 20150929203823.0Z
whenChanged: 20190906055533.0Z
displayName: LDAP User
uSNCreated: 262151
memberOf: CN=Ops-RODC,CN=Users,DC=foobar,DC=local
memberOf: CN=Allowed RODC Password Replication Group,CN=Users,DC=foobar,DC=local
uSNChanged: 119472338
name: LDAP User
objectGUID:: eD17aZT/50yAj7E50/Yb8Q==
userAccountControl: 66048
badPwdCount: 0
codePage: 0
countryCode: 0
badPasswordTime: 131808946325532539
lastLogon: 131808946959912842
pwdLastSet: 132109884793331191
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAAfV+0Y46Qq75ZpfUPkSMAAA==
accountExpires: 9223372036854775807
logonCount: 4
sAMAccountName: ldapuser
sAMAccountType: 805306368
userPrincipalName: ldapuser@foobar.com
lockoutTime: 0
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=foobar,DC=l
ocal
dSCorePropagationData: 20190515201857.0Z
dSCorePropagationData: 20190513232309.0Z
dSCorePropagationData: 20190513231758.0Z
dSCorePropagationData: 20190219212220.0Z
dSCorePropagationData: 16010714223649.0Z
lastLogonTimestamp: 132122229334301805
unixUserPassword: blah
uid: ldapuser
msSFU30Name: ldapuser
msSFU30NisDomain: foobar
uidNumber: 10000
gidNumber: 10001
unixHomeDirectory: /home/ldapuser
loginShell: /bin/bash
Я видел предложения по использованию SSSD, Centrify и других инструментов для этой работы. Кажется, я смогу заставить это работать с nslcd и pam_ldap, но что-то в моей конфигурации не позволяет мне это сделать.