Не может использовать Внешнюю аутентификацию после включения TLS в ldap-2.4

Я использовал следующий файл LDIF для активации поддержки TLS сервера LDAP:

dn: cn=config
changetype: modify
add: olcTLSCipherSuite
olcTLSCipherSuite: NORMAL 
-
add: olcTLSCRLCheck
olcTLSCRLCheck: none
-
add: olcTLSVerifyClient
olcTLSVerifyClient: never
-
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/CA.crt
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/server.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/key.pem

и вызовите использование TLS для соединений клиента со следующим LDIF:

dn: cn=config
changetype: modify
add: olcSecurity
olcSecurity: tls=1

После этого я не могу использовать "-Y ВНЕШНИЙ" больше, чтобы прочитать или изменить схему конфигурации. Например, я получаю ошибку SASL, если я работаю:

$ sudo ldapsearch -Q -Y EXTERNAL -H ldapi:/// -b "" -LLL -s base -Z supportedSASLMechanisms
ldap_sasl_interactive_bind_s: Authentication method not supported (7)
    additional info: SASL(-4): no mechanism available: 

и если я проверяю на поддерживаемые механизмы SASL:

$ sudo ldapsearch -x -H ldapi:/// -b "" -LLL -s base -Z supportedSASLMechanisms
dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: CRAM-MD5
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: PLAIN
supportedSASLMechanisms: LOGIN

Я действительно не вижу ВНЕШНЕЕ, включенное в список. Что я пропускаю здесь?

Это находится на Ubuntu 12.04 и slapd-2.4.31.

3
задан 4 August 2014 в 09:48
4 ответа

Без доступа к запущенной конфигурации вы должны остановить slapd и отредактировать конфигурацию в автономном режиме.

  1. stop slapd: service slapd stop
  2. dump the config database to a text file: slapcat -F /etc/ldap/slapd.d -b cn=config -l config.ldif
  3. отодвиньте существующую конфигурационную базу данных: mv /etc/ldap/slapd.d{,.old}
  4. сделаем новую, пустую конфиговую базу данных:

    mkdir /etc/ldap/slapd.d chown --reference=/etc/ldap/slapd.d.old /etc/ldap/slapd.d chmod --reference=/etc/ldap/slapd.d.old /etc/ldap/slapd.d

  5. редактируйте дамповый конфиг . ldif для удаления настройки olcSecurity (или добавления olcRootDN и olcRootPW в cn=config, или любых других изменений, которые вам нравятся)
  6. загрузите отредактированный LDIF в новую пустую базу данных: slapadd -F /etc/ldap/slapd.d -b cn=config -l config.ldif

(Вышеуказанное предполагает, что ваша конфигурация живёт по умолчанию в /etc/ldap/slapd.d в Debian и Ubuntu. )

Обратите внимание, что slapadd из полного LDIF всегда должен быть выполнен в пустой БД; поэтому, если вы ошиблись и slapadd не работает, убедитесь, что вы очистили частичную БД перед повторной попыткой.

Дополнительную информацию вы можете найти в Руководстве администратора OpenLDAP, а также на соответствующих man-страницах.

.
2
ответ дан 3 December 2019 в 06:06

Глядя в код: на стороне сервера, в серверах/slapd/daemon.c, authid для EXTERNAL настраивается с помощью uid и gid вскоре после входящего соединения становится accept()ed. Позже, в серверах/slapd/connection.c, если TLS активен, он перезаписывает его именем из клиентского сертификата. Поскольку вы не предоставляете клиентский сертификат, в этот момент автохид перезаписывается NULL, что делает EXTERNAL недоступным.

Одним словом, если TLS активен, то автохид uid+gid не используется. В зависимости от вашей точки зрения, это можно считать ошибкой; в идеале это возвращается к персифицированному ID.

Тем не менее, TLS на ldapi действительно не нужен, так как локальный сокет уже обеспечивает полную конфиденциальность; поэтому вы можете установить olcSecurity только в собственной БД, оставив его не установленным для фронтэнда и cn=config (см. e. g. этот пост ), или вы можете использовать ssf= вместо tls= и установить olcLocalSSF соответствующим образом. Или вы можете использовать другой DN в качестве менеджера для cn=config, чтобы не зависеть от передаваемой функции.

.
2
ответ дан 3 December 2019 в 06:06

Спасибо, rtandy. Я действительно не хотел устанавливать его на ldapi, но не знал, что это тоже повлияет.

Проблема в том, что ВНЕШНИЙ был единственным способом изменить cn = config , так как я потерял этот доступ и не создал другого администратора cn = config как предложили, есть ли другой способ решить эту проблему?

0
ответ дан 3 December 2019 в 06:06

Использование ldappi:/// вместо ldap:// решило проблему для меня после активации starttls на моем system

sudo ldapmodify -Y EXTERNAL -H ldapi://  -f pwd2.ldif 

работает, тогда как

sudo ldapmodify -Y EXTERNAL -f pwd2.ldif 

сообщил

SASL/ВНЕШНЯЯ аутентификация запущена ldap_sasl_interactive_bind_s: Неизвестный метод аутентификации (-6) дополнительная информация: SASL(-4): нет Доступный механизм:

0
ответ дан 17 May 2020 в 10:11

Теги

Похожие вопросы