背景
现在线上的账户集中性管理系统有两个信息存储系统,一个是kerberos,一个是openldap,每次创建一个ldap账户,都会对应地生成一个kerberos的principal,且把该principal的keytab信息加密存储到ldap账户中,现在需要对这两个服务的数据进行迁移,想要验证数据迁移后会不会对keytab和principal的有效性有影响。
openldap数据迁移
迁移方数据备份
ldapsearch -x -D "cn=admin,dc=xitong,dc=com" -w123456 -b "dc=xitong,dc=com" -LLL -H ldap://localhost > ldap_user_bak.ldif
数据接收方导入数据
注意:
1、如果数据接受方ldap库中事先存在“dc=xitong,dc=com”节点,则需要先删除,再导入,否则数据无法导入。
2、为防止造成迁移方与接受方数据不一致,建议在迁移数据过程中停止openldap的上层服务。
3、是否考虑一同迁移配置?
拷贝副本文件到数据接受方服务器。
查看命令:
ldapsearch -x -b "dc=xitong,dc=com" -LLL
删除命令:
ldapdelete -x -D "cn=admin,dc=xitong,dc=com" -w123456 -r "dc=xitong,dc=com"
把“dc=xitong,dc=com”节点及其下的数据全部删除。
确认数据是否已删除:
ldapsearch -x -b "dc=xitong,dc=com" -LLL
数据确认删除后,导入openldap副本数据到数据接受方:
ldapadd -x -D "cn=admin,dc=xitong,dc=com" -w123456 -f ldap_user_bak.ldif -H ldap://localhost
查看数据是否已经导入:
ldapsearch -x -b "dc=xitong,dc=com" -LLL
通过对openldap的数据迁移,账户信息存在接受方的openldap底层数据库中,且keytab信息也随之迁移。
kerberos principal数据迁移
迁移方kerberos数据备份
kdb5_util dump -verbose kerberos_bak_file
数据接受方导入数据
注意:
1、迁移方与接受方的kdc域名需要保持一致。
2、如果数据接收方事先不存在数据库,则需要先创建数据库,kdc域名保持与迁移方一致。
kdb5_util create -r HADOOP.COM -s
3、是否考虑一同迁移配置?
拷贝副本文件到数据接受方服务器。
导入数据到数据库:
kdb5_util load -verbose kerberos_bak_file
查看数据是否已经导入:
执行kadmin.local;
进入交互界面后,执行listprincs查看数据是否已经导入。
验证迁移后的principal及keytab是否有效:
1、通过openldap底层查询获取到keytab的base64编码文件,然后再解码得到keytab信息,具体如下:
1)获取keytab编码信息:
ldapsearch -x -D "cn=admin,dc=xitong,dc=com" -w123456 -b "dc=xitong,dc=com" cn=xxx -LLL -H ldap://localhost
得到用户信息:
dn: cn=ee,cn=default,dc=xitong,dc=com
postalCode: BQIAAAAzAAEACkhBRE9PUC5DT00AAmVlAAAAAV/XEi8CABEAEBE854e/YwjpWpokU2
zicx0AAAACAAAAOwABAApIQURPT1AuQ09NAAJlZQAAAAFf1xIvAgAQABhuvPcEPsHfQ3+ugOqUQzd
A0L9JDs5t7FsAAAACAAAAMwABAApIQURPT1AuQ09NAAJlZQAAAAFf1xIvAgAXABApvyoOZZ/NHw92
9P3sBIpbAAAAAgAAACsAAQAKSEFET09QLkNPTQACZWUAAAABX9cSLwIACAAIxEZiEHzqx20AAAACA
AAAKwABAApIQURPT1AuQ09NAAJlZQAAAAFf1xIvAgADAAg4uQvfDQhG7wAAAAI=
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
gidNumber: 100
uid: ee
uidNumber: 1017
cn: ee
userPassword:: cXExMjM0NTY=
其中,postalCode属性值即为keytab编码结果。
注:xxx表示用户名。
为什么要对keytab信息进行base64编码?
因为直接从kerberos导出的keytab文件内容是二进制的,里面的内容是乱码来的,所以为了存储有效的信息,先通过cat xxx.keytab | base64 -w 0对keytab文件进行编码,然后把编码结果存储到openldap中,需要使用时再下载下来进行解码即可使用。
2)拷贝keytab编码信息到一个临时文件中xxx.tmp.keytab;
3)对keytab进行解码,得到真正的keytab信息:
cat xxx.tmp.keytab | base64 -d --ignore-garbage > xxx.keytab
xxx.keytab即为最终的keytab文件。
4)通过klist -k xxx.keytab查看keytab文件信息是否正常,如我这里查看用户ee的keytab文件myee.keytab
5)通过kinit验证迁移后的keytab的有效性:
kinit -kt xxx.keytab xxx
网友评论