我一直在努力将现有的服务器集群迁移到使用 openldap 进行用户/密码管理。但我遇到了一个问题 - 我无法访问纯文本密码,并且所有 SASL 方法(到目前为止我已经识别的)都需要数据库中的纯文本密码。唯一可用的格式是 crypt。就是这样。
对于许多程序来说,简单身份验证仍然可用。但是,如果使用 libldap2 (openldap),则 ldap_sasl_interactive_bind 系列函数仅支持 SASL 连接,所有其他函数都将被禁用和弃用。
那么,如果 SASL 损坏,我该如何进行身份验证?(SASL 不支持 crypt = 损坏)
要使用的身份验证方法:radius(freeradius)
web
自定义 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