现在的情况

现在的情况

可能需要两个步骤:

  1. 将 ldif 文件中定义的用户添加到 OpenLDAP(FreeIPA 内部)
  2. 将添加的用户从 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 脚本来创建用户、生成密码并通过电子邮件将其发送给用户并说明如何更新,这样更简单、更快捷。

相关内容