Настройка slapd через Ansible debops.slapd

avatar
Christian Seifert
25 июля 2017 в 14:25
2044
2
0

Я пытаюсь настроить службу slapd на компьютере с Ubuntu 16, используя Ansible и debops.slapd, но не могу запустить рабочую аутентификацию.

Мой файл playbook выглядит следующим образом:

---
- hosts: "{{hosts}}"
  become: true
  become_user: root
  roles:
    - role: debops.slapd
      slapd_domain: 'development.local'
      slapd_pki: false
      slapd_config_admin_password: 'passwords/ldap-admin.password'
      slapd_basedn_admin_password: 'passwords/ldap-admin.password'
      slapd_ldapscripts: true
      slapd_ldap_security_default: []
      slapd_anonymous_bind: true

Файл passwords/ldap-admin.password:

yoh7eQue9Ki0aitee5uquaichuteo0ti

Directory structure

Когда я запускаю Ansible из командной строки ansible-playbook install-devserver-ubuntu.yml --ask-sudo-pass --extra-vars "hosts=ubuntu", установка проходит правильно и slapd правильно устанавливается на целевую машину:

PLAY [ubuntu] ************************************************************************************************

TASK [Gathering Facts] ***************************************************************************************
ok: [ubuntu]

TASK [debops.secret : Create secret directories on Ansible Controller] ***************************************

TASK [debops.slapd : Configure domain for OpenLDAP in debconf] ***********************************************
changed: [ubuntu] => (item=slapd/domain)
changed: [ubuntu] => (item=shared/organization)

TASK [debops.slapd : Configure database backend for OpenLDAP in debconf] *************************************
changed: [ubuntu]

TASK [debops.slapd : Install OpenLDAP packages] **************************************************************
changed: [ubuntu] => (item=[u'slapd', u'ldap-utils', u'python-ldap'])

TASK [debops.slapd : Install helper scripts] *****************************************************************
ok: [ubuntu]

TASK [debops.slapd : Copy custom LDAP schema files] **********************************************************
ok: [ubuntu]

TASK [debops.slapd : Load custom LDAP schema files] **********************************************************
changed: [ubuntu] => (item=/usr/local/etc/ldap/schema/ldapns.ldif)
changed: [ubuntu] => (item=/usr/local/etc/ldap/schema/openssh-lpk.ldif)

TASK [debops.slapd : Check if administrator password hash exists] ********************************************
ok: [ubuntu -> localhost]

TASK [debops.slapd : Read hash of config administrator password] *********************************************
ok: [ubuntu]

TASK [debops.slapd : Generate config administrator password] *************************************************
skipping: [ubuntu]

TASK [debops.slapd : Save hash of config administrator password] *********************************************
skipping: [ubuntu]

TASK [debops.slapd : Set config administrator password] ******************************************************
changed: [ubuntu] => (item=(censored due to no_log))
changed: [ubuntu] => (item=(censored due to no_log))

TASK [debops.slapd : Check if BaseDN administrator password hash exists] *************************************
ok: [ubuntu -> localhost]

TASK [debops.slapd : Read hash of BaseDN administrator password] *********************************************
ok: [ubuntu]

TASK [debops.slapd : Generate BaseDN administrator password] *************************************************
skipping: [ubuntu]

TASK [debops.slapd : Save hash of BaseDN administrator password] *********************************************
skipping: [ubuntu]

TASK [debops.slapd : Set BaseDN administrator] ***************************************************************
ok: [ubuntu] => (item=(censored due to no_log))
changed: [ubuntu] => (item=(censored due to no_log))

TASK [debops.slapd : Create path to LDAP password file in secrets] *******************************************
ok: [ubuntu]

TASK [debops.slapd : Save BaseDN administrator password for Ansible] *****************************************
changed: [ubuntu -> localhost]

TASK [debops.slapd : Add OpenLDAP system user to additional groups] ******************************************
skipping: [ubuntu]

TASK [debops.slapd : Check if TLS certificate is configured] *************************************************
ok: [ubuntu]

TASK [debops.slapd : Create random temporary directory for ldif file] ****************************************
skipping: [ubuntu]

TASK [debops.slapd : Prepare temporary ldif file] ************************************************************
skipping: [ubuntu]

TASK [debops.slapd : Restart slapd (first time only)] ********************************************************
skipping: [ubuntu]

TASK [debops.slapd : Configure TLS certificates (first time only)] *******************************************
skipping: [ubuntu]

TASK [debops.slapd : Configure TLS certificates] *************************************************************
skipping: [ubuntu] => (item={'key': u'olcTLSCipherSuite', 'value': u'SECURE256:-VERS-SSL3.0'})
skipping: [ubuntu] => (item={'key': u'olcTLSCertificateFile', 'value': u'/etc/pki/system/default.crt'})
skipping: [ubuntu] => (item={'key': u'olcTLSDHParamFile', 'value': u''})
skipping: [ubuntu] => (item={'key': u'olcTLSCertificateKeyFile', 'value': u'/etc/pki/system/default.key'})
skipping: [ubuntu] => (item={'key': u'olcTLSCACertificateFile', 'value': u'/etc/pki/system/CA.crt'})

TASK [debops.slapd : Allow anonymous bind] *******************************************************************
ok: [ubuntu] => (item={'key': u'olcDisallows', 'value': u'bind_anon'})
ok: [ubuntu] => (item={'key': u'olcRequires', 'value': u'authc'})

TASK [debops.slapd : Allow anonymous bind (frontend)] ********************************************************
ok: [ubuntu] => (item={'key': u'olcRequires', 'value': u'authc'})

TASK [debops.slapd : Deny anonymous bind, require authentication] ********************************************
skipping: [ubuntu] => (item={'key': u'olcDisallows', 'value': u'bind_anon'})
skipping: [ubuntu] => (item={'key': u'olcRequires', 'value': u'authc'})

TASK [debops.slapd : Deny anonymous bind, require authentication (frontend)] *********************************
skipping: [ubuntu] => (item={'key': u'olcRequires', 'value': u'authc'})

TASK [debops.slapd : Configure LDAP connection security] *****************************************************
ok: [ubuntu]

TASK [debops.slapd : Configure LDAP indices] *****************************************************************
changed: [ubuntu]

TASK [debops.slapd : Configure LDAP Access Control List] *****************************************************
changed: [ubuntu]

TASK [debops.slapd : Set slapd log level] ********************************************************************
ok: [ubuntu] => (item={'key': u'olcLogLevel', 'value': u'none'})

TASK [debops.slapd : Configure enabled services] *************************************************************
changed: [ubuntu]

TASK [debops.slapd : Install ldapscripts packages] ***********************************************************
ok: [ubuntu] => (item=[u'ldapscripts', u'ldap-utils', u'pwgen'])

TASK [debops.slapd : Configure ldapscripts] ******************************************************************
ok: [ubuntu]

TASK [debops.slapd : Configure ldapscripts password] *********************************************************
changed: [ubuntu]

TASK [debops.slapd : Create snapshot task in cron] ***********************************************************
ok: [ubuntu]

RUNNING HANDLER [debops.slapd : Restart slapd] ***************************************************************
changed: [ubuntu]

PLAY RECAP ***************************************************************************************************
ubuntu                     : ok=28   changed=12   unreachable=0    failed=0

Пока все хорошо, но я не могу подключиться к каталогу LDAP, используя пользователя-администратора и пароль администратора, которые были установлены в качестве параметров. Чтобы проверить это, я установил установку phpldapadmin на тот же компьютер:

.

Screenshot of phpldapadmin

Ввод пароля yoh7eQue9Ki0aitee5uquaichuteo0ti (который совпадает с паролем в файле паролей) всегда будет приводить к "Неверным учетным данным".

Запуск slapcat показывает, что сама учетная запись администратора была создана:

dn: dc=development,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: development.local
dc: development
structuralObjectClass: organization
entryUUID: 2b111f1a-058f-1037-9bc1-01ccfd85f1f8
creatorsName: cn=admin,dc=development,dc=local
createTimestamp: 20170725141325Z
entryCSN: 20170725141325.508993Z#000000#000#000000
modifiersName: cn=admin,dc=development,dc=local
modifyTimestamp: 20170725141325Z

dn: cn=admin,dc=development,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9S1haVEUvbVQ1U0tBSEU1RXhVYVVhMDM4UGVoSS9ZNVA=
structuralObjectClass: organizationalRole
entryUUID: 2b114558-058f-1037-9bc2-01ccfd85f1f8
creatorsName: cn=admin,dc=development,dc=local
createTimestamp: 20170725141325Z
entryCSN: 20170725141325.510040Z#000000#000#000000
modifiersName: cn=admin,dc=development,dc=local
modifyTimestamp: 20170725141325Z

Есть идеи, почему аутентификация не удалась? Использовал ли я правильный механизм для передачи пароля на debops.slapd?

Источник

Ответы (2)

avatar
Christian Seifert
2 августа 2017 в 13:15
0

Благодаря предложению drybjed я думаю, что смог найти причину проблемы:

...
slapd_config_admin_password: 'passwords/ldap-admin.password'
slapd_basedn_admin_password: 'passwords/ldap-admin.password'
...

На самом деле это не исходные файлы, из которых можно прочитать пароль, который будет использоваться для slapd, а целевой<366171396 для записи паролей, сгенерированных в процессе установки slapd.

После удаления всех файлов в /usr/local/etc/secret/(я использую Ansible на macOS, установленной через Homebrew), а затем снова запустите Ansible playbook файл паролей для администратора (cn=admin,dc=development,dc=local ) был сгенерирован по адресу /usr/local/etc/secret/ldap/credentials/ldap./cn=admin,dc=.password.

Использование пароля, хранящегося в этом файле, для входа в LDAP работало правильно.

avatar
drybjed
25 июля 2017 в 17:58
1

В настоящий момент роль debops.slapd может быть не в рабочем состоянии; его не трогали почти год.

Однако роли DebOps обычно предоставляют набор нормальных значений по умолчанию. Вы пробовали запустить роль, не устанавливая собственные значения? В роль включен пример playbook, вы можете попробовать его и посмотреть, правильно ли настроена служба.

Чтобы облегчить отладку, вы можете использовать Apache Directory Studio в качестве низкоуровневого клиента LDAP. Роль debops.slapd использует сертификаты X.509, поддерживаемые ролью debops.pki; если вы используете это, вам может потребоваться добавить корневой сертификат ЦС в хранилище сертификатов ADS.

Christian Seifert
26 июля 2017 в 07:19
0

Спасибо за предложение. Остается вопрос: если я не ввожу пароль администратора вручную, то где я могу восстановить пароль, автоматически сгенерированный во время установки? Плюс: если роль debops.slapd не находится в рабочем состоянии: можете ли вы предложить какой-либо альтернативный вариант настройки сервера LDAP в целевой среде?

drybjed
26 июля 2017 в 15:24
0

Автоматически сгенерированные пароли хранятся в каталоге secret/, который находится рядом с вашим каталогом инвентаризации Ansible. Это управляется ролью debops.secret, вы можете проверить ее документацию для деталей. К сожалению, я не знаю ни одной хорошей альтернативы slapd ролям. Вы можете проверить, что не работает в debops.slapd и опубликовать PR с исправлениями, если они необходимы. На данный момент этой роли не хватает некоторых важных функций, таких как репликация базы данных LDAP, которая запланирована на будущее.