是否可以在不使用盐的情况下配置 OpenLDAP Crypt 密码?

Is possible to configure OpenLDAP Crypt passwords without using a salt?

从文档中我得到了这个有效的配置,但使用了盐,

密码哈希{CRYPT} 密码加密盐格式“$6$%.16s”

并且我需要将密码存储在没有盐加密的情况下生成的 LDAP 目录中。

您可以简单地导入具有现有 userPassword 值的用户条目而不加盐。如果您的本地 OpenLDAP 安装支持哈希方案,密码验证将起作用。

配置指令 password-hashpassword-crypt-salt-format 设置新密码时。

你最好使用另一种不加盐的密码存储方案,如 {SHA} 或 {MD5} 而不是 {CRYPT} :

password-hash {SHA}

如果需要使用{CRYPT}:

  • 您仍然可以提供 static 盐(!糟糕,不安全,几乎就像没有盐一样!),只需遵守给定的格式:

    password-crypt-salt-format "$%.16s"
    

    $SHA512 模式的 crypt 标识符,我们提供了一个 16 个字符的长盐:

    ~$ mkpasswd -m sha-512 --salt 'verybadseasoning' secret1
    $verybadseasoning$Q2kceqwB2uYT2tU./QF.qRCIWjMQdObEAZ71Ni5Ko1zJOnxUwpu3oMeyjtgiR3hSVHIT20Ay9V1.pXaNhkHYk/
    
    ~$ mkpasswd -m sha-512 --salt 'verybadseasoning' secret2
    $verybadseasoning$SHof1u2BCPJhYoVOk.LkWax7n5g28rzMkNCRAC5NmlT29GSeWLAlv2AoSkOS4rYfMUXsmTcyIxKDUU8aL7TlP0
    

    请注意 mkpasswd 不允许使用空盐 :

    ~$ mkpasswd -m sha-512 --salt '' secret
    Wrong salt length: 0 bytes when 8 <= n <= 16 expected.
    
  • 或者您可以尝试使 crypt 忽略 given/generated salt 字符串(通过从中获取零字符):

    password-crypt-salt-format "$%.0s"
    

    它告诉 crypt() 使用 SHA512 算法,%s 被盐的零字符字符串 (%.0s) 替换。我不知道 slapd 是否强制执行 %s 转换,但是只设置 "$" 而不用任何替代盐腌可能会成功,因为它 意味着 相同(不盐),即:

    ~$ php -r 'print(crypt("secret", "$"));'
    $M9DchxW4txWyTYoZrH9D3VvAAQxBpEezYsLY6Cao.jwzEXpyL9xwip9hiUZX7GqTqe/E/z6iKvZqXUuqniQH.
    

slapd.conf(5)

请注意,缺少盐会使您的系统受到字典攻击。