如何在openLDAP中启用密码散列(SSHA)

时间:2012-07-31 00:30:01

标签: hash passwords salt openldap ssha

对于我的生活,我似乎无法在任何地方找到这个,如果有人甚至可以给我一个链接,我会非常感激。

我们正试图在openLDAP中打开SSHA哈希。默认情况下,它以明文形式存储密码,我认为这是犯罪行为,但是嘿,我是AD的家伙,所以我知道什么。但是如果您愿意的话,您会认为它们可以让您轻松找到打开哈希所需的信息。你不会选择吗?

5 个答案:

答案 0 :(得分:9)

您可以使用'password-hash'来更改散列算法,默认值为SSHA(非明文)。

请注意,仅当客户端发送的密码为纯文本时,slapd才使用上述内容,如果客户端发送哈希密码,则会按原样存储。

例如:使用pam_ldap,使用pam_password exop(或clear)

  
    

如果密码进入哈希值,密码强度测试如何在服务器上运行?我知道这是openLDAP的功能吗?

  

如果您发送了散列密码,则slapd无法执行强度测试,因此客户端必须以明文形式发送密码(ppolicy具有接受/拒绝散列密码的选项)。

注意:

  1. 确保您的客户使用ssl / tls(因此密码不会以明文形式发送)
  2. userpassword属性包含特殊字符({}),因此您必须执行base64 -d以识别所使用的散列算法。
  3. 例如:通常以下列格式返回属性( :: 表示结果是base64编码的)

    userPassword:: e1NTSEF9QjU0VXNmQWhJN1dQZ3FvbDVSQ1l5RHUzTlVqa1luVVhYV2ljbmc9PQ=
     =
    
    $ echo e1NTSEF9QjU0VXNmQWhJN1dQZ3FvbDVSQ1l5RHUzTlVqa1luVVhYV2ljbmc9PQ==|openssl base64 -d
    {SSHA}B54UsfAhI7WPgqol5RCYyDu3NUjkYnUXXWicng==
    

答案 1 :(得分:2)

LDAP规范需要明文密码才能实现互操作性。上面给出的关于安全性的链接将为您提供服务器可以强制执行的默认哈希类型的选项,但请考虑其影响。

答案 2 :(得分:2)

当您尝试在添加/修改LDAP操作中存储userPassword属性时,userPassword值将以纯文本格式存储。但您可以使用OpenLDAP中ppolicy_hash_cleartext覆盖模块中的ppolicy选项覆盖此行为。启用它后,当客户端发送纯文本密码时,默认情况下会将其存储为SSHA。您可以在here

中找到有关在OpenLADP中启用哈希密码的更多详细信息

答案 3 :(得分:1)

OpenLDAP支持各种存储方案供管理员选择。用于创建帐户的工具必须配置为执行散列。服务器将以客户端请求的格式存储密码。如果正确完成散列,ldapsearch将显示如下的散列密码:

userPassword: {SSHA}d0Q0626PSH9VUld7yWpR0k6BlpQmtczb

有关详细信息,请参阅http://www.openldap.org/doc/admin24/security.html

对于管理工具,我个人推荐http://phpldapadmin.sourceforge.net

答案 4 :(得分:0)

这是一个古老的问题,但仍然有意义。由于它相对容易进行暴力破解,因此不再建议使用SSHA(即SHA-1)。

更安全的哈希算法是SHA-512。可以使用OpenSSL 1.1在客户端生成更强大的哈希,如下所示:

_generate_password_hash() {
  local plaintext; plaintext="$1"

  command printf "{CRYPT}%s" "$(openssl passwd -6 -stdin <<< "${plaintext}")"
}

这将输出一个字符串,例如:

{CRYPT}$6$SGIWzAbjh.3WoQQJ$vEFlcRBQpd2fJ8dxcbojr83pjQcXcJ.InRMzNRryTQ//fMYJoCRFWAPn22EvJyDikG.MNuUqRYqQtI97Clj2F0

在开始时注意{CRYPT}而不是{SSHA}

您可以使用ldapmodify来应用密码,例如:

ldapmodify -h "${LDAP_HOST}" -D cn=user,dc=example,dc=com -W <<EOF
dn: cn=user,dc=example,dc=com
changetype: modify
replace: userPassword
userPassword: $(_generate_password_hash NEW_PASSWORD_HERE)
EOF

请注意,LibreSSL具有一组不同的哈希算法。如果openssl version未显示openssl passwd --help选项,请使用-6检查您的实际OpenSSL版本。