21.5. 从 NIS 迁移到 IdM
从现有 NIS 服务器迁移到身份管理(IdM)需要以下步骤:
21.5.1. 在 IdM 中准备 Netgroup 条目 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
在迁移前,请确定在当前 NIS 服务器中管理哪些身份:
- 用户条目
- 确定哪些应用程序正在使用 NIS 提供的用户信息.虽然某些工具(如 sudo )需要 NIS 网络组,但有些实用程序可以使用常规 UNIX 组。迁移:
- 在 IdM 中创建对应的用户帐户。请参阅 第 21.5.3.1 节 “迁移用户条目”。
- 如果额外需要 netgroups:
- 添加 netgroups。请参阅 第 21.3.1 节 “添加 Netgroup”。
- 将用户添加到 netgroups。请参阅 第 21.5.3.4 节 “迁移 Netgroup Entries”。
- 主机条目
- 当您在 IdM 中创建主机组时,会自动创建对应的 shadow NIS 组。不要在这些影子 NIS 组中使用 ipa netgroup-* 命令。仅使用 ipa netgroup 047 命令管理通过 netgroup-add 命令创建 的原生 网络组。
- 对于直接转换
- 如果每个用户和主机条目都必须使用相同的名称,您可以在 IdM 中使用相同名称创建条目:
- 为 netgroup 中引用的每个用户创建一个条目。
- 为 netgroup 中引用的每一主机创建一个条目。
- 创建名称与原始 netgroup 的名称相同的 netgroup。
- 将用户和主机添加为 netgroup 的直接成员。如果用户和主机是组或主机组的成员,您也可以将这些组添加到 netgroup。
21.5.2. 在身份管理中启用 NIS Listener 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
21.5.3. 导出和导入现有 NIS 数据 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
NIS 服务器可以包含有关用户、组、主机、网络组和自动挂载映射的信息。您可以将这些条目类型迁移到 IdM。
在以下部分中,我们使用 ypcat 命令从当前 NIS 服务器导出数据,并使用输出来使用对应的 ipa114-add 命令将条目导入到 IdM。
- 确保安装
yp-tools软件包,因为它提供了迁移脚本中使用的 ypcat 命令:[root@nis-server ~]# yum install yp-tools -y
21.5.3.1. 迁移用户条目 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
NIS
passwd 映射包含有关用户的信息,如名称、UID、主组、GECOS、shell 和主目录。使用此数据将 NIS 用户帐户迁移到 IdM:
- 可选 :如果您需要弱密码支持,请参阅 第 21.5.4 节 “为 NIS 用户身份验证启用弱密码哈希”。
- 使用以下内容创建
/root/nis-users.sh脚本:#!/bin/sh # $1 is the NIS domain, $2 is the NIS master server ypcat -d $1 -h $2 passwd > /dev/shm/nis-map.passwd 2>&1 IFS=$'\n' for line in $(cat /dev/shm/nis-map.passwd) ; do IFS=' ' username=$(echo $line | cut -f1 -d:) # Not collecting encrypted password because we need cleartext password # to create kerberos key uid=$(echo $line | cut -f3 -d:) gid=$(echo $line | cut -f4 -d:) gecos=$(echo $line | cut -f5 -d:) homedir=$(echo $line | cut -f6 -d:) shell=$(echo $line | cut -f7 -d:) # Now create this entry echo passw0rd1 | ipa user-add $username --first=NIS --last=USER \ --password --gidnumber=$gid --uid=$uid --gecos="$gecos" --homedir=$homedir \ --shell=$shell ipa user-show $username done - 以 IdM
admin用户身份进行身份验证:[root@nis-server ~]# kinit admin - 运行脚本。例如:
[root@nis-server ~]# sh /root/nis-users.sh nisdomain nis-master.example.com注意此脚本将硬编码值用于名字、姓氏,并将密码设置为passw0rd1。用户必须在下一次登录时更改临时密码。
21.5.3.2. 迁移组条目 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
NIS
组 映射包含有关组的信息,如组名称、GID 或组成员。使用此数据将 NIS 组迁移到 IdM:
- 使用以下内容创建
/root/nis-groups.sh脚本:#!/bin/sh # $1 is the NIS domain, $2 is the NIS master server ypcat -d $1 -h $2 group > /dev/shm/nis-map.group 2>&1 IFS=$'\n' for line in $(cat /dev/shm/nis-map.group); do IFS=' ' groupname=$(echo $line | cut -f1 -d:) # Not collecting encrypted password because we need cleartext password # to create kerberos key gid=$(echo $line | cut -f3 -d:) members=$(echo $line | cut -f4 -d:) # Now create this entry ipa group-add $groupname --desc=NIS_GROUP_$groupname --gid=$gid if [ -n "$members" ]; then ipa group-add-member $groupname --users={$members} fi ipa group-show $groupname done - 以 IdM
admin用户身份进行身份验证:[root@nis-server ~]# kinit admin - 运行脚本。例如:
[root@nis-server ~]# sh /root/nis-groups.sh nisdomain nis-master.example.com
21.5.3.3. 迁移主机条目 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
NIS
主机 映射包含有关主机的信息,如主机名和 IP 地址。使用此数据将 NIS 主机条目迁移到 IdM:
- 使用以下内容创建
/root/nis-hosts.sh脚本:#!/bin/sh # $1 is the NIS domain, $2 is the NIS master server ypcat -d $1 -h $2 hosts | egrep -v "localhost|127.0.0.1" > /dev/shm/nis-map.hosts 2>&1 IFS=$'\n' for line in $(cat /dev/shm/nis-map.hosts); do IFS=' ' ipaddress=$(echo $line | awk '{print $1}') hostname=$(echo $line | awk '{print $2}') master=$(ipa env xmlrpc_uri | tr -d '[:space:]' | cut -f3 -d: | cut -f3 -d/) domain=$(ipa env domain | tr -d '[:space:]' | cut -f2 -d:) if [ $(echo $hostname | grep "\." |wc -l) -eq 0 ] ; then hostname=$(echo $hostname.$domain) fi zone=$(echo $hostname | cut -f2- -d.) if [ $(ipa dnszone-show $zone 2>/dev/null | wc -l) -eq 0 ] ; then ipa dnszone-add --name-server=$master --admin-email=root.$master fi ptrzone=$(echo $ipaddress | awk -F. '{print $3 "." $2 "." $1 ".in-addr.arpa."}') if [ $(ipa dnszone-show $ptrzone 2>/dev/null | wc -l) -eq 0 ] ; then ipa dnszone-add $ptrzone --name-server=$master --admin-email=root.$master fi # Now create this entry ipa host-add $hostname --ip-address=$ipaddress ipa host-show $hostname done - 以 IdM
admin用户身份进行身份验证:[root@nis-server ~]# kinit admin - 运行脚本。例如:
[root@nis-server ~]# sh /root/nis-hosts.sh nisdomain nis-master.example.com注意此脚本不会迁移特殊主机配置,如别名。
21.5.3.4. 迁移 Netgroup Entries 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
NIS
netgroup 映射包含有关网络组的信息。使用此数据将 NIS 网络组迁移到 IdM:
- 使用以下内容创建
/root/nis-netgroups.sh脚本:#!/bin/sh # $1 is the NIS domain, $2 is the NIS master server ypcat -k -d $1 -h $2 netgroup > /dev/shm/nis-map.netgroup 2>&1 IFS=$'\n' for line in $(cat /dev/shm/nis-map.netgroup); do IFS=' ' netgroupname=$(echo $line | awk '{print $1}') triples=$(echo $line | sed "s/^$netgroupname //") echo "ipa netgroup-add $netgroupname --desc=NIS_NG_$netgroupname" if [ $(echo $line | grep "(," | wc -l) -gt 0 ]; then echo "ipa netgroup-mod $netgroupname --hostcat=all" fi if [ $(echo $line | grep ",," | wc -l) -gt 0 ]; then echo "ipa netgroup-mod $netgroupname --usercat=all" fi for triple in $triples; do triple=$(echo $triple | sed -e 's/-//g' -e 's/(//' -e 's/)//') if [ $(echo $triple | grep ",.*," | wc -l) -gt 0 ]; then hostname=$(echo $triple | cut -f1 -d,) username=$(echo $triple | cut -f2 -d,) domain=$(echo $triple | cut -f3 -d,) hosts=""; users=""; doms=""; [ -n "$hostname" ] && hosts="--hosts=$hostname" [ -n "$username" ] && users="--users=$username" [ -n "$domain" ] && doms="--nisdomain=$domain" echo "ipa netgroup-add-member $netgroup $hosts $users $doms" else netgroup=$triple echo "ipa netgroup-add $netgroup --desc=NIS_NG_$netgroup" fi done done - 以 IdM
admin用户身份进行身份验证:[root@nis-server ~]# kinit admin - 运行脚本。例如:
[root@nis-server ~]# sh /root/nis-netgroups.sh nisdomain nis-master.example.com
21.5.3.5. 迁移自动挂载映射 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
自动挂载映射是一系列嵌套条目和宏条目,用于定义位置(父条目)、关联的键和映射。将 NIS 自动挂载映射迁移到 IdM:
- 使用以下内容创建
/root/nis-automounts.sh脚本:#!/bin/sh # $1 is for the automount entry in ipa ipa automountlocation-add $1 # $2 is the NIS domain, $3 is the NIS master server, $4 is the map name ypcat -k -d $2 -h $3 $4 > /dev/shm/nis-map.$4 2>&1 ipa automountmap-add $1 $4 basedn=$(ipa env basedn | tr -d '[:space:]' | cut -f2 -d:) cat > /tmp/amap.ldif <<EOF dn: nis-domain=$2+nis-map=$4,cn=NIS Server,cn=plugins,cn=config objectClass: extensibleObject nis-domain: $2 nis-map: $4 nis-base: automountmapname=$4,cn=$1,cn=automount,$basedn nis-filter: (objectclass=*) nis-key-format: %{automountKey} nis-value-format: %{automountInformation} EOF ldapadd -x -h $3 -D "cn=Directory Manager" -W -f /tmp/amap.ldif IFS=$'\n' for line in $(cat /dev/shm/nis-map.$4); do IFS=" " key=$(echo "$line" | awk '{print $1}') info=$(echo "$line" | sed -e "s#^$key[ \t]*##") ipa automountkey-add nis $4 --key="$key" --info="$info" done脚本导出 NIS 自动挂载信息,为自动挂载位置和相关映射生成 LDAP 数据交换格式(LDIF),并将 LDIF 文件导入到 IdM 目录服务器。详情请查看 第 21.4 节 “向 NIS 客户端公开自动挂载映射”。 - 以 IdM
admin用户身份进行身份验证:[root@nis-server ~]# kinit admin - 运行脚本。例如:
[root@nis-server ~]# sh /root/nis-automounts.sh location nisdomain \ nis-master.example.com map_name
21.5.4. 为 NIS 用户身份验证启用弱密码哈希 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
使用 Directory Server 组件的默认设置,存储在
userPassword 属性中的密码将使用 salted 安全哈希算法(SSHA)进行哈希处理。如果您的 NIS 客户端需要弱的密码哈希算法,请更新密码存储方案设置。
启用弱密码散列方案只会影响存储在
userPassword 属性中的密码。请注意,Kerberos 不使用这个属性,因此 Kerberos 加密不受此设置的影响。
例如,启用
CRYPT 哈希密码:
[root@server ~]# ldapmodify -D "cn=Directory Manager" -W -p 389 -h ipaserver.example.com -x
dn: cn=config
changetype: modify
replace: passwordStorageScheme
passwordStorageScheme: crypt
注意
由于密码哈希无法解密,因此 Directory 服务器不会转换现有的密码哈希。服务器仅将新密码存储应用到更改存储方案后设置的密码。