Docker 在OpenLDAP服务器中以明文形式存储用户密码

Docker 在OpenLDAP服务器中以明文形式存储用户密码,docker,ldap,openldap,Docker,Ldap,Openldap,我使用的是osixia/OpenLDAPdocker image()中提供的OpenLDAP,但它存储的是散列的所有密码 通常情况下,这是可取的,但我计划在前端散列密码(使用salting和MD5),这样组织中的任何人都不会看到用户密码,但当我尝试再次保存它们时,它们是散列的,我没有找到防止这种行为的方法 我尝试删除(使用用户cn=admin,cn=config)一个名为cn={4}ppolicy,cn=schema,cn=config的图像附带的条目,我认为这可能是罪魁祸首,但ldapdele

我使用的是
osixia/OpenLDAP
docker image()中提供的OpenLDAP,但它存储的是散列的所有密码

通常情况下,这是可取的,但我计划在前端散列密码(使用salting和MD5),这样组织中的任何人都不会看到用户密码,但当我尝试再次保存它们时,它们是散列的,我没有找到防止这种行为的方法

我尝试删除(使用用户
cn=admin,cn=config
)一个名为
cn={4}ppolicy,cn=schema,cn=config
的图像附带的条目,我认为这可能是罪魁祸首,但
ldapdelete
返回
服务器不愿意执行(53)


非常感谢您的帮助。

如果您以纯文本形式存储密码,则可以以纯文本形式检索密码

您只需要在ACL中签入用于读取它们的用户是否具有正确的权限即可

您正在讨论的密码策略条目只是一个模式定义,它允许您定义密码策略,但不强制执行任何内容。(错误是因为无法从正在运行的OpenLDAP中删除架构以防止删除可由条目使用的架构)

根据我在github中看到的关于您使用的docker映像的内容,使用的ACL是:

olcAccess: to attrs=userPassword,shadowLastChange 
           by self write 
           by dn="cn=admin,{{ LDAP_BASE_DN }}" write 
           by anonymous auth 
           by * none
这意味着只有用户本人或管理员帐户才能读取密码字段
userPassword

您需要修改此ACL以满足您的需要。ACL应位于以下位置:


dn:olcDatabase={1}{{LDAP\u BACKEND}},cn=config

错误53表示您没有足够的权限执行该操作。但你的问题没有意义。如果你以纯文本形式存储密码,LDAP管理员可以看到它们,这不是你想要的。请参阅以了解原因。您应该确保所有访问都使用LDAPS,这样组织中就没有人可以看到密码。删除
ppolicy
附带的架构与您的其他问题相比没有任何意义。同样,我已经在前端对用户密码进行哈希运算,因此,让ldap也这样做会导致密码被双重散列存储,我并不是一个专家密码学家,但对密码进行两次散列不是一件坏事吗?它确实执行了一些事情。很多。密码长度、质量、过期、失败登录、宽限登录、重新使用,…@user207421不,添加模式不会强制执行任何操作,请重新阅读我写的内容。它肯定会执行。只要您的配置和代码正确。显然你的不是。否则,覆盖将毫无意义。@user207421覆盖在哪里配置的?他试图删除一个模式定义来解决他的问题,但解决不了任何问题,我指出,itIt的末尾配置了
cn={4}ppolicy,cn=schema,cn=config
。根据您的答案更改权限对密码的存储方式没有影响。密码策略也不是这样。