Как заставить ldap оценивать открытый текстовый пароль по сравнению с сохраненным паролем DES

Я использую openldap slapd 2.4.40 и postgresql9.2.23 в качестве back-sql на CentoS 6.9.

пользователь и пароль для LDAP uid и userPassword хранятся в postgresql в кодировке DES.

Исходный открытый текст: JacicFk5

Закодированный/зашифрованный DES текст IfjFxsltK/MPE хранится в БД.

Я вижу информацию о пользователе в результате ldapseach по сохраненному паролю.

ldapsearch -x  -b "dc=example,dc=com" -D uid="HDZZZ0R0N,ou=people,dc=example,dc=com" -w IfjFxsltK/MPE '(&(uid= HDZZZ0R0N)(objectClass=*))'          
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: (&(uid= HDZZZ0R0N)(objectClass=*))
# requesting: ALL
#

# user01, people, example.com
dn: uid= HDZZZ0R0N,ou=people,dc=example,dc=com
objectClass: inetOrgPerson
cn:: W+aOkl3lia/nlKPnianjg6Hjg7Pjg4bjg4rjg7PjgrnvvIgzNu+8iVNURw==
sn:: W+aOkl3lia/nlKPnianjg6Hjg7Pjg4bjg4rjg7PjgrnvvIgzNu+8iVNURw==
uid: HDZZZ0R0N
userPassword:: SWZqRnhzbHRLL01QRQ==

Однако я не могу выполнить ldapsearch по исходному текстовому паролю.

ldapsearch -x -b "dc=example,dc=com" -D uid="HDZZZ0R0N,ou=people,dc=example,dc=com" -w JacicFk5 '(&(uid= HDZZZ0R0N)(objectClass=*))'
ldap_bind: Invalid credentials (49)

Кто-нибудь скажет мне, как заставить ldapsearch разрешать данный пароль открытым текстом и сохраненным паролем с помощью кодировки DES?

Я хотел бы знать, как преобразовать открытый текст JacicFk5 из командной строки ldapseach в хэш IfjFxsltK/MPE и сопоставить его с IfjFxsltK/MPE в БД как userPassowrd.

Есть ли подходящая директива для ldap.conf или slapd.conf?

Я проверил следующее.

echo "SWZqRnhzbHRLL01QRQ==" |perl -MMIME::Base64 -ne 'print decode_base64($_) . "\n"'

он возвращает IfjFxsltK/MPE

perl -e 'print("userPassword: {crypt}".crypt("JacicFk5","If")."\n");'

он возвращает userPassword: {crypt}IfjFxsltK/MPE

Еще одна информация. мой ldapseach может решить текст пароля для пользователей, хранящихся на сервере AD, через ownclod.


person user1345414    schedule 04.09.2018    source источник
comment
Ну, я хотел преобразовать все пароли, хранящиеся в LDAP, в открытый текст. Я всегда делал наоборот. Поскольку мой ответ вам не помог, я его удаляю.   -  person tukan    schedule 13.09.2018
comment
Согласно конфигурационному файлу для slapd2.4.40 ppolicy не включен, если переключатель не включен. -enable-ppolicy Password Policy overlay no|yes|mod [no] Мой пакет для CentOS. Я не могу измениться.   -  person user1345414    schedule 14.09.2018
comment
Я сам собираю ту же версию slapd с включенной политикой. Ничего не меняется.   -  person user1345414    schedule 14.09.2018
comment
Теперь я готов настроить исходный код slapd. Кто-нибудь скажет мне, в какой исходный файл лучше всего добавить шифрование DES, чтобы пароль creartext совпадал с сохраненным паролем?   -  person user1345414    schedule 14.09.2018
comment
@tukan, твоя информация была важна. вы не должны удалять .   -  person user1345414    schedule 14.09.2018
comment
Хорошо, я восстановил пост. Вы можете использовать crypt (3) http://man7.org/linux/man-pages/man3/crypt.3.html (примечание: сам алгоритм DES имеет несколько особенностей, которые делают использование интерфейса crypt() очень плохим выбором для всего, кроме аутентификации по паролю.)   -  person tukan    schedule 14.09.2018


Ответы (1)


Что вам нужно/нужно иметь, так это простую аутентификацию LDAP. Обратите внимание, что хранить пароли в открытом виде небезопасно!

Сначала вам нужно проверить, какие механизмы аутентификации вы поддерживаете/разрешаете.

Пример:

tukanos@localhost:~# ldapsearch -H ldap:// -x -LLL -s base -b "" supportedSASLMechanisms
dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: CRAM-MD5
supportedSASLMechanisms: NTLM

Теперь вы хотите изменить конфигурацию через ldapmodify. Вы подготавливаете файл LDIF (LDIF означает взаимозаменяемый формат данных LDAP) с конфигурацией.

Подготовьте файл конфигурации, вы можете назвать его olcSaslSecProps.ldif:

dn: cn=config
replace: olcSaslSecProps
olcSaslSecProps: noanonymous,minssf=0,passcred

Что означают свойства:

noanonymous ... no anonymous connection allowed
minssf=0 ... that defines your effective encryption strength (0 ... no encryption)
passcred ... that would allow password to work as for credentials

Чтобы процитировать соображения безопасности OpenLDAP

Факторы надежности безопасности

Сервер использует факторы надежности безопасности (SSF), чтобы указать относительную надежность защиты. SSF, равный нулю (0), указывает на отсутствие средств защиты. SSF, равный единице (1), указывает на наличие защиты целостности. SSF больше единицы (>1) примерно соответствует эффективной длине ключа шифрования. Например, DES — это 56, 3DES — 112, а AES — 128, 192 или 256.

Ряд административных элементов управления опирается на SSF, связанные с защитой TLS и SASL в сеансе LDAP.

меры безопасности запрещают операции, когда соответствующие средства защиты отсутствуют. Например:

    security ssf=1 update_ssf=112

требует защиты целостности для всех операций и защиты шифрования, эквивалентной 3DES, для операций обновления (например, добавления, удаления, изменения и т. д.). Подробности смотрите в slapd.conf(5).

Теперь, чтобы применить файл LDIF:

ldapmodify -Y EXTERNAL -H ldapi:// -f ./olcSaslSecProps.ldif

Теперь, чтобы перезапустить демон slapd:

systemctl restart slapd

Если вы сейчас проверите свою конфигурацию, вы должны получить LOGIN и PLAIN:

ldapsearch -H ldap:// -x -LLL -s base -b "" supportedSASLMechanisms
dn:
supportedSASLMechanisms: PLAIN
supportedSASLMechanisms: LOGIN

Теперь ваш поиск должен работать с простым тестовым паролем:

ldapsearch -x  -b "dc=example,dc=com" -D uid="HDZZZ0R0N,ou=people,dc=example,dc=com" -w JacicFk5 '(&(uid= HDZZZ0R0N)(objectClass=*))'
person tukan    schedule 12.09.2018
comment
Спасибо. Я пытался. Однако ldapsearch -H ldap:// -x -LLL -s base -b "" supportedSASLMechanisms механизмы аутентификации не возвращаются до и после применения LDIF. И я до сих пор не могу войти по ОРИГИНАЛЬНОМУ паролю. - person user1345414; 12.09.2018
comment
@user1345414 user1345414 вы изменили порт по умолчанию, отличный от 389? Не могли бы вы попробовать ldapsearch -h localhost -p 389 -x -b "dc=example,dc=com" -s base -LLL supportedSASLMechanisms? - person tukan; 12.09.2018
comment
Я сделал. И slapd просто возвращает dn: dc=example,dc=com Также я пробовал ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn и slapd возвращает SASL/EXTERNAL authentication started ldap_sasl_interactive_bind_s: Authentication method not supported (7) additional info: SASL(-4): no mechanism available: security flags do not match required - person user1345414; 12.09.2018
comment
@user1345414 user1345414 Хм, не могли бы вы поделиться файлом конфигурации? slapcat -F /etc/ldap/slapd.d -b cn=config -l config.ldif (пожалуйста, замените конфиденциальную информацию) - person tukan; 12.09.2018
comment
ваша команда возвращает 5b990171 str2entry: entry -1 has no dn slapcat: bad configuration directory! . Но у меня есть файл cn=config.ldif dn: cn=config objectClass: olcGlobal cn: config olcArgsFile: /var/run/openldap/slapd.args olcPidFile: /var/run/openldap/slapd.pid structuralObjectClass: olcGlobal entryUUID: 655d9802-393b-1038-89bd-8f0c8273e5e3 creatorsName: cn=config createTimestamp: 20180821030943Z olcPasswordHash: {CRYPT} olcSizeLimit: 5000 olcPasswordCryptSaltFormat: "_%s" olcSaslSecProps: noanonymous,minssf=0,passcred - person user1345414; 12.09.2018
comment
@ user1345414 Спасибо. Я вижу, вы используете olcPasswordHash: {CRYPT} (это DES, который вы получаете - функция crypt(3)) - шифрование ОС. Я думал, что вы используете SASL (вы можете удалить конфигурацию, которую я написал, поскольку она для вас неактуальна). не могли бы вы попробовать olcPasswordHash: {PLAIN}? - person tukan; 12.09.2018
comment
я постараюсь сделать это в следующий раз. я не могу прикоснуться к серверу сейчас. может быть, 12 часов ожидания мне нужно. Спасибо в любом случае. - person user1345414; 12.09.2018
comment
@ user1345414: Хорошо, я проверил man, и он должен быть CLEARTEXT вместо PLAIN. Также добавьте olcPPolicyHashCleartext: TRUE (этот атрибут/директива указывает серверу сохранять пароли в открытом виде) - person tukan; 12.09.2018
comment
Я уничтожил свой slapd. Сейчас я его восстановил. Результат будет в следующем комментарии. - person user1345414; 13.09.2018
comment
Один вопрос заключается в том, как на этот раз slapd разрешает JacicFk5 из командной строки IfjFxsltK/MPE в RDB. Я думаю, что ваш метод нуждается в slapd для хеширования JacicFk5 в IfjFxsltK/MPE. - person user1345414; 13.09.2018
comment
@ user1345414 Ну, я хотел преобразовать все пароли, хранящиеся в LDAP, в открытый текст. Я всегда делал наоборот. - person tukan; 13.09.2018
comment
Спасибо, revaibal. Моя проблема еще не решена, но я хочу дать вам свою награду, срок действия которой уже истек. как мне поступить. я имею в виду работу этого сайта. - person user1345414; 14.09.2018
comment
@ user1345414 вы принимаете ответ и ниже начисляете баллы. (с чеком) - person tukan; 14.09.2018
comment
@ user1345414 вот как это работает: meta.stackexchange.com/questions/16065/ - person tukan; 14.09.2018
comment
@ user1345414 Спасибо :). - person tukan; 14.09.2018
comment
ты понял? - person user1345414; 14.09.2018
comment
Мне все еще нужна твоя помощь. Увидимся на следующей неделе. - person user1345414; 14.09.2018
comment
@user1345414 user1345414 да, понял. Мы можем поболтать, чтобы узнать, могу ли я вам помочь. - person tukan; 14.09.2018
comment
Мне пока не удалось найти исходный файл, в котором ldap сравнивает входной пароль и сохраненный пароль пользователя. Я готов поболтать, если вы не возражаете. - person user1345414; 18.09.2018
comment
@ user1345414 вот чат - chat.stackoverflow.com/rooms/180263/ - person tukan; 18.09.2018
comment
Наконец я обнаружил, что должен добавить {CRYPT} поверх текста DES, хранящегося в RDB. - person user1345414; 25.09.2018
comment
@ user1345414 поздравляю. Вы можете создать полный документ и добавить его в качестве ответа, я поддержу его. - person tukan; 25.09.2018