Я работаю над миграцией существующего кластера серверов на использование openldap для управления пользователями/паролями. Однако я столкнулся с проблемой — у меня нет доступа к открытым текстовым паролям, а все методы SASL (которые я пока определил) требуют открытых текстовых паролей в базе данных. Единственный доступный формат — crypt. Точка.
Для многих программ простая аутентификация все еще доступна. Однако если использовать libldap2 (openldap), то конкретно семейство функций ldap_sasl_interactive_bind поддерживает только соединения SASL, все остальные отключены и устарели.
Так как же мне пройти аутентификацию, если SASL сломан? (SASL не поддерживает шифрование = сломан)
Методы аутентификации, которые будут использоваться: radius (freeradius),
веб,
пользовательские приложения C
, ssh
, зеркалирование ldap.
Мне удалось заставить радиус работать, и это все.
Помощь очень приветствуется - в документации не сказано, почему простая аутентификация устарела, и похоже, что это единственный способ, который может работать. Каждый раз, когда задействован SASL, ничего не работает.
Среда — ubuntu-14.04; openldap, cyrus-sasl (через openldap), freeradius, apache и пользовательские компоненты C и C++.
решение1
Между простой аутентификацией LDAP и SASL/PLAIN нет большой разницы. В обоих случаях открытый текстовый пароль предоставляется клиентом и обрабатывается сервером.OpenLDAP не требует хранения паролей впростой текст, и, по сути, может использовать локальную системукрипта(3)функция. Поскольку вы имеете дело с открытым текстом паролей во время передачи, следует предпринять усилия, чтобы гарантировать, что эти пароли не будут отправлены в открытом виде. Обычно это делается с использованием STARTTLS как части LDAP-подключения, но LDAPS также является вариантом.
$ ldapwhoami -h ldap.example.com -ZZ -x -D uid=user,ou=people,dc=example,dc=com -W
Enter LDAP Password:
dn:uid=user,ou=people,dc=example,dc=com
$ ldapwhoami -h ldap.example.com -ZZ -D uid=user,ou=people,dc=example,dc=com -W
Enter LDAP Password:
dn:uid=user,ou=people,dc=example,dc=com