21.5. NIS から IdM への移行
既存の NIS サーバーから Identity Management(IdM) に移行するには、以下の手順が必要です。
21.5.1. IdM での netgroup エントリーの準備
移行前に、現在の NIS サーバーで管理されているアイデンティティーの種類を特定します。
- ユーザーエントリー
- NIS によって提供されるユーザー情報を使用するアプリケーションを判定します。sudo などの一部のユーティリティーは NIS ネットグループを必要としますが、複数のユーティリティーが通常の UNIX グループを使用できます。移行は、以下の手順で実行します。
- IdM で対応するユーザーアカウントを作成します。「ユーザーエントリーの移行」を参照してください。
- さらにネットグループが必要な場合は、以下を行います。
- ネットグループを追加します。「ネットグループの追加」を参照してください。
- ユーザーをネットグループに追加します。「ネットグループエントリーの移行」を参照してください。
- ホストエントリー
- IdM でホストグループを作成すると、対応するシャドウの NIS グループが自動的に作成されます。これらのシャドウ NIS グループに ipa netgroup-* コマンドを使用しないでください。ipa netgroup-* コマンドは、netgroup-add コマンドで作成された ネイティブ の netgroups の管理にだけ使用します。
- 直接変換の場合
- すべてのユーザーエントリーとホストエントリーが同じ名前を使用する必要がある場合は、IdM で同じ名前を使用してエントリーを作成できます。
- netgroup で参照されているユーザーすべてについてエントリーを作成します。
- netgroup で参照されているホストすべてについてエントリーを作成します。
- 元の netgroup と同じ名前の netgroup を作成します。
- ユーザーとホストをこの netgroup の直接のメンバーとして追加します。ユーザーおよびホストがグループまたはホストグループのメンバーである場合は、ネットグループにこれらのグループを追加することもできます。
21.5.2. Identity Management での NIS リスナーの有効化
「Identity Management での NIS の有効化」を参照してください。
21.5.3. 既存 NIS データのインポートおよびエクスポート
NIS サーバーには、ユーザー、グループ、ホスト、netgroups、および自動マウントマップに関する情報を追加できます。これらのエントリータイプを IdM に移行できます。
次のセクションでは、ypcat コマンドを使用して現在の NIS サーバーからデータをエクスポートし、出力を使用して、対応する ipa *-add コマンドを使用してエントリーを IdM にインポートします。
- 移行スクリプトで使用される ypcat コマンドを提供するため、
yp-tools
パッケージをインストールするようにしてください。[root@nis-server ~]# yum install yp-tools -y
21.5.3.1. ユーザーエントリーの移行
NIS の
passwd
マップには、名前、UID、プライマリーグループ、GECOS、シェル、ホームディレクトリーなどのユーザーに関する情報が含まれます。このデータを使用して、NIS ユーザーアカウントを IdM に移行します。
- オプション: パスワード強度の弱いパスワードに対応する必要がある場合には、「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. ネットグループエントリーの移行
NIS
netgroup
マップには、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) の生成、IdM Directory Server への LDIF ファイルのインポートが行われます。詳細は、「自動マウントマップの 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
属性に保存されているパスワードはソルトでセキュア化されたハッシュアルゴリズム (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 Server は既存のパスワードハッシュを変換しません。サーバーは、ストレージスキームの変更後に設定したパスワードにのみ新しいパスワードストレージを適用します。