可能需要两个步骤:
- 将 ldif 文件中定义的用户添加到 OpenLDAP(FreeIPA 内部)
- 将添加的用户从 OpenLDAP 迁移到 IPA
现在的情况
设置 FreeIPA 服务器,初始化管理员用户,通过命令创建测试用户ipa user-add
。
列出 IPA 中的所有用户
# ipa user-find --all
---------------
2 users matched
---------------
dn: uid=admin,cn=users,cn=accounts,dc=my,dc=domain
User login: admin
Last name: Administrator
Full name: Administrator
Home directory: /home/admin
GECOS: Administrator
Login shell: /bin/bash
Principal alias: [email protected]
User password expiration: 20200626033338Z
UID: 1253000000
GID: 1253000000
Account disabled: False
Preserved user: False
Member of groups: admins, trust admins
ipauniqueid: 67d94d98-70a4-11ea-8d6b-5254008afee6
krbextradata: AAKSxX5ecm9vdC9hZG1pbkBNWS5ET01BSU4A
krblastpwdchange: 20200328033338Z
objectclass: top, person, posixaccount, krbprincipalaux, krbticketpolicyaux, inetuser, ipaobject, ipasshuser, ipaSshGroupOfPubKeys
dn: uid=test,cn=users,cn=accounts,dc=my,dc=domain
User login: test
First name: T
Last name: S
Full name: T S
Display name: T S
Initials: TS
Home directory: /home/test
GECOS: T S
Login shell: /bin/bash
Principal name: [email protected]
Principal alias: [email protected]
User password expiration: 20200626035426Z
Email address: [email protected]
UID: 1253000001
GID: 1253000001
Account disabled: False
Preserved user: False
Member of groups: ipausers
ipauniqueid: 996b48fe-70a7-11ea-9a53-5254008afee6
krbextradata: AAJyyn5ea2FkbWluZEBNWS5ET01BSU4A
krblastfailedauth: 20200328035411Z
krblastpwdchange: 20200328035426Z
krbloginfailedcount: 0
krbticketflags: 128
mepmanagedentry: cn=test,cn=groups,cn=accounts,dc=my,dc=domain
objectclass: top, person, organizationalperson, inetorgperson, inetuser, posixaccount, krbprincipalaux, krbticketpolicyaux, ipaobject, ipasshuser,
ipaSshGroupOfPubKeys, mepOriginEntry
----------------------------
Number of entries returned 2
----------------------------
尝试通过 ldif 文件添加用户
对于上述第一步
创建测试 ldif 文件
测试文件
# Add test1
dn: uid=test1,dc=my,dc=domain
changetype: add
objectClass: inetOrgPerson
description: Test1
d
e
cn: Test 1
sn: Test
uid: test1
# Add test2
dn: uid=test2,dc=my,dc=domain
changetype: add
objectClass: inetOrgPerson
description: Test2
d
e
cn: Test 2
sn: Test
uid: test2
添加它们
# ldapadd -x -h test.my.domain -D "cn=Directory Manager" -w password -c -f test.ldif
检查它们
# ldapsearch -h test.my.domain -t -b "dc=my,dc=domain" "uid=test1"
SASL/GSSAPI authentication started
SASL username: [email protected]
SASL SSF: 256
SASL data security layer installed.
# extended LDIF
#
# LDAPv3
# base <dc=my,dc=domain> with scope subtree
# filter: uid=test1
# requesting: ALL
#
# test1, my.domain
dn: uid=test1,dc=my,dc=domain
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
description: Test1 d e
cn: Test 1
sn: Test
uid: test1
# search result
search: 4
result: 0 Success
# numResponses: 2
# numEntries: 1
# ldapsearch -h test.my.domain -t -b "dc=my,dc=domain" "uid=test2"
SASL/GSSAPI authentication started
SASL username: [email protected]
SASL SSF: 256
SASL data security layer installed.
# extended LDIF
#
# LDAPv3
# base <dc=my,dc=domain> with scope subtree
# filter: uid=test2
# requesting: ALL
#
# test2, my.domain
dn: uid=test2,dc=my,dc=domain
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
description: Test2 d e
cn: Test 2
sn: Test
uid: test2
# search result
search: 4
result: 0 Success
# numResponses: 2
# numEntries: 1
他们在那里。
第二步
# ipa migrate-ds ldap://test.my.domain:389 --with-compat
ipa: ERROR: user LDAP search did not return any result (search base: ou=people,dc=my,dc=domain, objectclass: person)
检查了 FreeIPA 仪表板,没有新用户(test1、test2)。如何迁移?
答案1
我目前也处于类似的境地。据我所知,FreeIPA 需要 LDAP 实体中存在一些特定的 objectClasses 和属性才能识别这些实体。据我所知,这些似乎至少是:“objectClass: ipaobject”和“ipaUniqueID”。缺少这些必需的属性,用户将不会出现在 IPA 中,但可以通过直接 LDAP 访问。
首先 - 通常 FreeIPA 用户存储在 cn=users,cn=accounts 下,例如
dn: uid=ipa_test9,cn=users,cn=accounts,dc=myserver,dc=eu
至于为什么 ds-migrate 没有找到用户 - 您的用户目前处于
dn: uid=test2,dc=my,dc=domain
而 ds-migrate 则在另一个地方寻找用户
(search base: ou=people,dc=my,dc=domain, objectclass: person)
要使migrate-ds正常工作,您必须至少指定--user-container参数。在破解migrate.py文件以自动生成缺失的组后,我尝试使用
$ ipa migrate-ds ldaps://im.myserver.eu --bind-dn="uid=myuser,cn=users,cn=accounts,dc=myserver,dc=eu" --with-compat --user-container="cn=users,cn=accounts,dc=myserverdc=eu" --group-container="cn=groups,cn=accounts,dc=myserver,dc=eu"
它会报告所有用户都已存在。由于 FreeIPA 使用与您尝试“迁移”的 LDAP 相同的 LDAP,因此它会检测到 UID 已经存在,并且无需迁移。
基本上,一种解决方法是设置另一个临时 LDAP 服务器,将用户导入其中,然后对其使用 move-ds。
编辑 我按照这种方式做了,而且成功了。您仍然需要重置密码并创建 Kerberos 票证,所以我的结论是,编写一个小的 python/bash 脚本来创建用户、生成密码并通过电子邮件将其发送给用户并说明如何更新,这样更简单、更快捷。