Я работаю над проектом с центральной системой базы данных пользователей. Одним из требований к системе является то, что для всего приложения должен быть только один набор пользователей. FreeRADIUS и Samba - два моих приложения, которые оба используют LDAP в качестве бэкэнда. Поскольку пользователи должны быть одинаковыми для всей системы, содержащей множество других приложений, мне нужно прочитать список пользователей из центральной базы данных и воссоздать их в каталогах LDAP для Samba и FreeRADIUS. Проблема в том, что пользователи отправляются мне из другого объекта, и я могу сохранить их в базе данных с их хэш-паролями. У меня нет доступа к их паролям в открытом виде. Мне интересно, могу ли я напрямую ввести хэш-пароль для нового пользователя в LDAP с моим предпочтительным механизмом хеширования. Если нет, может ли кто-нибудь сказать мне, какую стратегию я должен использовать?
Я использую свой сервер на UBUNTU 12.04, а все остальные приложения являются последними версиями. Моя система баз данных - PostgreSQL 9.2.
Спасибо
Поскольку вы используете OpenLDAP, если у вас есть совместимый хешированный формат (и Вот), вы можете ввести хеш прямо в userPassword
атрибут. Позаботьтесь о том, чтобы некоторые клиенты LDAP могли догадаться об изменениях в userPassword
и применить хеширование (аналогично тому, как некоторые серверы LDAP автоматически изменяют или хешируют этот атрибут при записи). ldapadd
/ldapmodify
правильно обновит пароль без его повторной интерпретации (пока у вас нет сервера политика паролей ppolicy_hash_cleartext
фактически, что может усложнить ситуацию).
Вам нужно будет определить формат, который у вас есть, и префикс хеша или хеша + соль с типом типа, например {SHA}xxxxxx
или {SSHA}xxxxxx
(где xxxxxx - это хеш-код в кодировке base64 или хеш + соль соответственно).
Если это склеп формат, вы можете ввести его с {crypt}
префикс, но в случае OpenLDAP вам понадобится сборка, настроенная с --enable-crypt
, поскольку его использование не рекомендуется. OpenLDAP будет использовать библиотеку C crypt()
функция, может быть вариации для конкретных платформ в его выходе. В Linux есть простой обходной путь, crypt()
сам по себе libcrypt
библиотека, которую вы можете «настроить» во время компиляции или выполнения. (Также обратите внимание crypt()
не повторно въезжает, поэтому slapd
использует мьютекст для защиты обращений к нему.) См. также password-crypt-salt-format
для решения проблемы в другом направлении: заставить OpenLDAP хранить пароли в различных криптографических форматах.
Поскольку вы используете Samba, вам следует также изучить smbk5pwd наложение ( ПРОЧТИ МЕНЯ полезнее). Обратите внимание, что для использования правильного пароля требуется изменение пароля. операция изменения пароля а не прямая модификация userPassword
.
С OpenLDAP у вас также есть возможность делегировать проверка пароля к внешней системе через SASL (также требуется нестандартная конфигурация сборки), чего может хватить во время окна миграции, пока все пользователи не сбросят свои пароли. Еще один вариант (который часто вызывает удивление) заключается в том, что OpenLDAP также поддерживает множественный пароли для каждого пользователя, каждый из которых проверяется по очереди во время аутентификации. Хотя немного хрупкий (требует, чтобы все авторы userPassword
атрибут делать Правильная вещь), это может помочь при миграции, особенно при объединении нескольких систем.