Апр 072019
 

Цель: выставить скриптом pwdAccountLockedTime, чтобы заблокировать учётку.

Ссылки:

  • http://tutoriels.meddeb.net/openldap-password-policy-managing-users-accounts/
  • https://pro-ldap.ru/tr/zytrax/ch6/ppolicy.html
  • http://www.openldap.org/software/man.cgi?query=slapo-ppolicy&sektion=5&apropos=0&manpath=OpenLDAP+2.4-Release
  • https://serverfault.com/questions/176834/how-to-disable-an-ldap-account

Добавляем схему

ldapmodify -a -H ldapi:/// -Y EXTERNAL -f /etc/ldap/schema/ppolicy.ldif

Проверяем результат

ldapsearch -H ldapi:/// -Y EXTERNAL -b 'cn=schema,cn=config' cn
# schema, config
dn: cn=schema,cn=config
cn: schema
# {0}core, schema, config
dn: cn={0}core,cn=schema,cn=config
cn: {0}core
# {1}cosine, schema, config
dn: cn={1}cosine,cn=schema,cn=config
cn: {1}cosine
# {2}nis, schema, config
dn: cn={2}nis,cn=schema,cn=config
cn: {2}nis
# {3}inetorgperson, schema, config
dn: cn={3}inetorgperson,cn=schema,cn=config
cn: {3}inetorgperson
# {4}ppolicy, schema, config
dn: cn={4}ppolicy,cn=schema,cn=config
cn: {4}ppolicy
# search result
search: 2
result: 0 Success
# numResponses: 7
# numEntries: 6

Команд добавления. Ключа -a – нет! Мы модифицируем существующую “ентрю”, добавляя туда второй модуль. Смотри “результат”. Там же конфиг.

ldapmodify -H ldapi:/// -Y EXTERNAL -f ppolicy-module.ldif

Проверяем результат
#cat ppolicy-module.ldif
dn: cn=module{0},cn=config
changeType: modify
add: olcModuleLoad
olcModuleLoad: ppolicy
#
#ldapsearch -H ldapi:/// -Y EXTERNAL -b cn=config "(objectClass=olcModuleList)" olcModuleLoad
# module{0}, config
dn: cn=module{0},cn=config
olcModuleLoad: {0}back_mdb
olcModuleLoad: {1}ppolicy
# module{1}, config
dn: cn=module{1},cn=config
olcModuleLoad: {0}syncprov.la
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2

Команда, определяющая, где искать политику по умолчанию для данной базы. Ключ -a присутствует 🙂 {3}mdb – смотреть в /etc, какую реально базу надо поставить

ldapmodify -a -H ldapi:/// -Y EXTERNAL -f ppolicy-conf.ldif

Проверяем результат
#cat ppolicy-conf.ldif
dn: olcOverlay=ppolicy,olcDatabase={3}mdb,cn=config
objectClass: olcPpolicyConfig
olcOverlay: ppolicy
olcPPolicyDefault: cn=ppolicy,dc=Домен
olcPPolicyUseLockout: FALSE
olcPPolicyHashCleartext: TRUE
#
#ldapsearch -H ldapi:/// -Y EXTERNAL -b cn=config "(objectClass=olcPpolicyConfig)"
# {1}ppolicy, {3}mdb, config
dn: olcOverlay={1}ppolicy,olcDatabase={3}mdb,cn=config
objectClass: olcPPolicyConfig
olcOverlay: {1}ppolicy
olcPPolicyDefault: cn=ppolicy,Домен
olcPPolicyHashCleartext: TRUE
olcPPolicyUseLockout: FALSE
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1

Последняя команда должна выполняться от имени администратора соответствующей ветки. Ключик -a – есть

ldapmodify -a -x -h localhost -D 'cn админа' -w пароль -f ppolicy-defaut.ldif

Проверяем результат
#cat ppolicy-defaut.ldif
dn: cn=ppolicy,Домен
objectClass: device
objectClass: pwdPolicyChecker
objectClass: pwdPolicy
cn: ppolicy
pwdAllowUserChange: TRUE
pwdAttribute: userPassword
pwdMaxAge: 0
pwdMinLength: 0
pwdSafeModify: FALSE
#ldapsearch -x -h localhost -D 'Домен админ' -w пароль -b Домен "(objectClass=pwdPolicy)"
# ppolicy, Домен
dn: cn=ppolicy,Домен
objectClass: device
objectClass: pwdPolicyChecker
objectClass: pwdPolicy
cn: ppolicy
pwdAllowUserChange: TRUE
pwdAttribute: userPassword
pwdMaxAge: 0
pwdMinLength: 0
pwdSafeModify: FALSE
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1

Очень долго не хотело работать. Даже с выставленным pwdAccountLockedTime учётка остаётся в состоянии, когда с её помощью можно аутентифицироваться.

Помогло: выставить в параметр по-умолчанию pwdLockOut – TRUE. Вот так вот, вроде, по-умолчанию, а не выставишь, не работает. Возможно, это ошибка конкретной версии Openldap (2.4.47+dfsg-3)