21.5. 从 NIS 迁移到 IdM


从现有 NIS 服务器迁移到身份管理(IdM)需要以下步骤:

21.5.1. 在 IdM 中准备 Netgroup 条目

在迁移前,请确定在当前 NIS 服务器中管理哪些身份:
用户条目
确定哪些应用程序正在使用 NIS 提供的用户信息.虽然某些工具(如 sudo )需要 NIS 网络组,但有些实用程序可以使用常规 UNIX 组。
迁移:
  1. 在 IdM 中创建对应的用户帐户。请参阅 第 21.5.3.1 节 “迁移用户条目”
  2. 如果额外需要 netgroups:
    1. 添加 netgroups。请参阅 第 21.3.1 节 “添加 Netgroup”
    2. 将用户添加到 netgroups。请参阅 第 21.5.3.4 节 “迁移 Netgroup Entries”
主机条目
当您在 IdM 中创建主机组时,会自动创建对应的 shadow NIS 组。不要在这些影子 NIS 组中使用 ipa netgroup-* 命令。仅使用 ipa netgroup 047 命令管理通过 netgroup-add 命令创建 的原生 网络组。
对于直接转换
如果每个用户和主机条目都必须使用相同的名称,您可以在 IdM 中使用相同名称创建条目:
  1. 为 netgroup 中引用的每个用户创建一个条目。
  2. 为 netgroup 中引用的每一主机创建一个条目。
  3. 创建名称与原始 netgroup 的名称相同的 netgroup。
  4. 将用户和主机添加为 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
    Copy to Clipboard Toggle word wrap

21.5.3.1. 迁移用户条目

NIS passwd 映射包含有关用户的信息,如名称、UID、主组、GECOS、shell 和主目录。使用此数据将 NIS 用户帐户迁移到 IdM:
  1. 可选 :如果您需要弱密码支持,请参阅 第 21.5.4 节 “为 NIS 用户身份验证启用弱密码哈希”
  2. 使用以下内容创建 /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
    Copy to Clipboard Toggle word wrap
  3. 以 IdM admin 用户身份进行身份验证:
    [root@nis-server ~]# kinit admin
    Copy to Clipboard Toggle word wrap
  4. 运行脚本。例如:
    [root@nis-server ~]# sh /root/nis-users.sh nisdomain nis-master.example.com
    Copy to Clipboard Toggle word wrap
    注意
    此脚本将硬编码值用于名字、姓氏,并将密码设置为 passw0rd1。用户必须在下一次登录时更改临时密码。

21.5.3.2. 迁移组条目

NIS 映射包含有关组的信息,如组名称、GID 或组成员。使用此数据将 NIS 组迁移到 IdM:
  1. 使用以下内容创建 /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
    Copy to Clipboard Toggle word wrap
  2. 以 IdM admin 用户身份进行身份验证:
    [root@nis-server ~]# kinit admin
    Copy to Clipboard Toggle word wrap
  3. 运行脚本。例如:
    [root@nis-server ~]# sh /root/nis-groups.sh nisdomain nis-master.example.com
    Copy to Clipboard Toggle word wrap

21.5.3.3. 迁移主机条目

NIS 主机 映射包含有关主机的信息,如主机名和 IP 地址。使用此数据将 NIS 主机条目迁移到 IdM:
  1. 使用以下内容创建 /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
    Copy to Clipboard Toggle word wrap
  2. 以 IdM admin 用户身份进行身份验证:
    [root@nis-server ~]# kinit admin
    Copy to Clipboard Toggle word wrap
  3. 运行脚本。例如:
    [root@nis-server ~]# sh /root/nis-hosts.sh nisdomain nis-master.example.com
    Copy to Clipboard Toggle word wrap
    注意
    此脚本不会迁移特殊主机配置,如别名。

21.5.3.4. 迁移 Netgroup Entries

NIS netgroup 映射包含有关网络组的信息。使用此数据将 NIS 网络组迁移到 IdM:
  1. 使用以下内容创建 /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
    Copy to Clipboard Toggle word wrap
  2. 以 IdM admin 用户身份进行身份验证:
    [root@nis-server ~]# kinit admin
    Copy to Clipboard Toggle word wrap
  3. 运行脚本。例如:
    [root@nis-server ~]# sh /root/nis-netgroups.sh nisdomain nis-master.example.com
    Copy to Clipboard Toggle word wrap

21.5.3.5. 迁移自动挂载映射

自动挂载映射是一系列嵌套条目和宏条目,用于定义位置(父条目)、关联的键和映射。将 NIS 自动挂载映射迁移到 IdM:
  1. 使用以下内容创建 /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
    Copy to Clipboard Toggle word wrap
    脚本导出 NIS 自动挂载信息,为自动挂载位置和相关映射生成 LDAP 数据交换格式(LDIF),并将 LDIF 文件导入到 IdM 目录服务器。详情请查看 第 21.4 节 “向 NIS 客户端公开自动挂载映射”
  2. 以 IdM admin 用户身份进行身份验证:
    [root@nis-server ~]# kinit admin
    Copy to Clipboard Toggle word wrap
  3. 运行脚本。例如:
    [root@nis-server ~]# sh /root/nis-automounts.sh location nisdomain \
         nis-master.example.com map_name
    Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap
注意
由于密码哈希无法解密,因此 Directory 服务器不会转换现有的密码哈希。服务器仅将新密码存储应用到更改存储方案后设置的密码。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat