У нас есть сценарий, в котором локальный ldap фактически получит все запросы аутентификации, а затем передаст аутентификацию модулю SASLauthd, когда пароль хранится как имя пользователя {SASL}. Таким образом, аутентификация будет выполняться на удаленном openldap, а авторизация - на локальном экземпляре openldap.
Мы используем дистрибутив openldap по умолчанию, поставляемый для Ubuntu 18, и не перестраиваем код, поскольку конфигурация сборки в Debian предполагает, что он уже построен с помощью --enable-spasswd --with-cyrus-sasl
Как и предполагалось, изменение /etc/saslauthd.conf
следующим образом
ldap_servers: ldaps://<remote ldap ip>:636
ldap_search_base: ou=Users,dc=example,dc=com
ldap_filter: (uid=%U)
ldap_bind_dn: cn=admin,dc=example,dc=com
ldap_password: <password>
ldap_scope: sub
ldap_use_sasl: no
ldap_start_tls: no
ldap_auth_method: bind
ldap_version: 3
ldap_restart: yes
ldap_deref: never
Затем в /usr/lib/sasl2/slapd.conf
добавил следующее.
mech_list: plain
pwcheck_method: saslauthd
saslauthd_path: /var/run/saslauthd/mux
Убедитесь, что PLAIN находится в поддерживаемых механизмах sasl.
ldapsearch -h localhost -p 389 -x -b "" -s base -LLL supportedSASLMechanisms
dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: CRAM-MD5
supportedSASLMechanisms: LOGIN
supportedSASLMechanisms: PLAIN
supportedSASLMechanisms: ANONYMOUS
Затем, как предлагается, установите пароль пользователя для пользователя testuser в локальном LDAP, для которого мы хотим удаленную (сквозную) аутентификацию, сохраните пароль в виде обычного текста (без шифрования, даже без SSHA) в форме {SASL} username @ example .com, и поскольку мы не используем домен, сохраненный как {SASL} testuser. Проверено, работает ли sasl-аутентификация:
root@CS-IDAM-TEST1:~# testsaslauthd -u testuser -p <password in remote ldap>
0: OK "Success."
Тем не менее, когда я пробую ldapsearch в форме:
ldapsearch -H ldap://localhost:389 -b "cn=username,ou=Users,dc=local,dc=com" -D "cn=username,ou=Users,dc=local,dc=com" -W "uid=testuser"
Запрос никогда не попадает на удаленный ldap для аутентификации через SASL (пробовал с -x: без разницы), в то время как ldapsearch той же формы, указывающий на удаленный openldap, работает отлично.