关于FreeIPA导入哈希密码或与其他LDAP同步的技术咨询
我之前处理过不少FreeIPA密码迁移的场景,给你梳理几个亲测有效的方案,解决你遇到的哈希密码导入失效问题:
一、先搞懂为什么直接导入哈希没用
FreeIPA对密码存储有严格的格式要求,不是随便把哈希字符串丢进去就行:
- 密码必须带算法前缀(比如
{SHA512}、{CRYPT}),FreeIPA不认无前缀的纯哈希 - 哈希算法必须在FreeIPA的全局密码策略中被允许,否则会被拒绝
- 修改/导入哈希密码需要足够高的权限,普通admin用户可能不行,得用
Directory Manager账号操作
二、手动导入/修改哈希密码的正确姿势
如果要通过ldapmodify直接修改用户记录,按以下步骤来:
检查并更新密码策略
先确认你要用的哈希算法是否被允许:ipa pwpolicy-show如果
allowed_schemes里没有你需要的算法(比如SHA512、CRYPT),添加进去:ipa pwpolicy-mod --allowed-schemes=SHA512,CRYPT,MD5(按需添加,CRYPT支持Linux shadow格式的$6$开头的SHA512哈希,这个是legacy系统最常用的)
编写正确格式的LDIF文件
比如要给用户testuser设置CRYPT格式的SHA512哈希,LDIF内容如下:dn: uid=testuser,cn=users,cn=accounts,dc=yourdomain,dc=com changetype: modify replace: userPassword userPassword: {CRYPT}$6$rounds=10000$yourlegacyhashstring$xxxxxx要是用纯SHA512哈希,就写成
{SHA512}yourbase64encodedhash(注意哈希要是Base64编码的,不是十六进制)用Directory Manager权限执行修改
普通admin没权限直接写userPassword属性,必须用Directory Manager:ldapmodify -x -D cn=Directory Manager,dc=yourdomain,dc=com -W -f modify-password.ldif输入Directory Manager的密码后执行即可。
验证效果
用Kerberos认证测试密码是否有效:kinit testuser能成功获取票据就说明密码没问题,之后就能用密码登录授权的Linux服务器了。
三、从其他LDAP迁移的更省心方案
如果是从legacy LDAP批量迁移用户,优先用FreeIPA自带的ipa migrate-ds工具,它会自动处理密码哈希的格式转换、属性映射,比手动写LDIF靠谱多了:
ipa migrate-ds --binddn="cn=admin,dc=legacy,dc=com" --bindpw=yourlegacyldappw ldap://legacy-ldap.yourdomain.com
这个工具会自动识别源LDAP里的userPassword属性,转换成FreeIPA兼容的格式,还会同步用户的其他属性(比如UID、GID、邮箱等)。
四、你之前手动修改失效的可能原因
你说手动改SHA512没用,大概率是这几个问题:
- 没加算法前缀,比如直接写了哈希字符串,没加
{SHA512}或{CRYPT} - 用了普通admin账号操作,没有足够权限修改
userPassword - 密码策略里没允许你用的哈希算法
- 哈希格式不对(比如用了十六进制哈希,而FreeIPA需要Base64编码的)
备注:内容来源于stack exchange,提问作者Michael Angel P.

