Xen環境domUにLDAP認証システムの構築

作成日:2016/08/07
最終更新日:2020/07/05

Xen環境domUにLDAP認証システムの構築

作成日:2016/08/07
最終更新日:2020/07/05

概要

先日作成したXen環境のdomUをLDAPサーバーにします。 LinuxディストリビューションにはUbuntu 16.04を用いました。 LDAPサーバーとしてはOpenLDAPを用いることにします。

下準備

本文章内では、LDAPサーバーを構築したdomUのホスト名をldap-serverとし、FQDNをldap-server.osarusystem.comであるとします。

Ubuntuのslapd(OpenLDAP)パッケージはInstall時にホスト名を元に初期設定を行います。 Ubuntuのインストール時にホスト名にFQDNを指定してもドメイン名は削除されてしまうようなので手動で設定します。 また、サーバーとして運用するには固定のIPアドレスを設定した方が都合が良いので静的に設定します。

Langurの場合はdomUを簡単に構築するためにホスト名に「ubuntu-16-04」と名付けたHDDイメージを用意しているので、 domUの初期設定をかんたんに行えるよう以下のシェルスクリプトを作成しました。第1引数にはホスト名を、第2引数には IPアドレスを指定します。日本語で記載している箇所は環境に合わせた設定を行います。

ソース1. domUの初期設定用スクリプト
#!/bin/bash
FILE_hostname=/etc/hostname
FILE_hosts=/etc/hosts
FILE_interfaces=/etc/network/interfaces
FILE_dns=/etc/resolvconf/resolv.conf.d/base
ORGNAME=ubuntu-16-04
# DOMAIN_NAMEにはドメイン名を指定する
DOMAIN_NAME=osarusystem.com
# ホスト名の設定
cat $FILE_hostname | sed s/$ORGNAME/$1.$DOMAIN_NAME/g > tmp
mv tmp $FILE_hostname
# 静的なホスト名の登録
cat $FILE_hosts | sed s/$ORGNAME/$1.$DOMAIN_NAME\ $1/g > tmp
mv tmp $FILE_hosts
# IPアドレスの静的割り当て
cat $FILE_interfaces | sed s/dhcp/static/g > tmp
echo "address $2" >> tmp
echo "network ネットワークアドレス" >> tmp
echo "netmask サブネットマスク" >> tmp
echo "broadcast ブロードキャストアドレス" >> tmp
echo "gateway デフォルトゲートウェイアドレス" >> tmp
mv tmp $FILE_interfaces
# DNSサーバーの設定
echo "nameserver DNSサーバーのアドレス" > tmp
mv tmp $FILE_dns

LDAPサーバーの構築

まず、LDAPサーバーを構築します。

OpenLDAPのインストール

aptでインストールします。

コマンド1. OpenLDAPのインストール
sudo apt-get install slapd ldap-utils

途中でInstallを継続してよいか聞かれるので「y」を入力します。 また、管理用のパスワードの入力を求められるので入力します。

管理構造の作成

LDAPの設定をするときにはLDAP Data Interchange Format(LDIF)ファイルを作成して反映するのが一般的なようです。 UNIX系のログイン情報を管理する場合peopleとgroupsという名前の管理構造を作成します。

peopleを追加する場合のLDIFファイルが以下になります。ou: peopleの後に改行が必要な点が注意点です。 peapleにはユーザーを紐付けることになります。

ソース2. peopleを追加する場合のldif
dn: ou=people,dc=osarusystem,dc=com
objectClass: organizationalUnit
ou: people
 

上記をpeople.ldifというファイル名で保存し、次のコマンドを発行します。 パスワードの入力を求められるので、OpenLDAPのインストール時に入力した管理用パスワードを入力します。

コマンド2. ldifの取り込み
$ ldapadd -x -D cn=admin,dc=osarusystem,dc=com -W -f people.ldif 
Enter LDAP Password: 
adding new entry "ou=people,dc=osarusystem,dc=com"
 
$

同様にgroupsを追加します。 groupsにはグループを紐付けることになります。

ソース3. groupsを追加する場合のldif
dn: ou=groups,dc=osarusystem,dc=com
objectClass: organizationalUnit
ou: groups
 

groups.ldifというファイル名で保存し、次のコマンドを発行します。 パスワードの入力を求められるので、OpenLDAPのインストール時に入力した管理用パスワードを入力します。

コマンド3. ldifの取り込み
$ ldapadd -x -D cn=admin,dc=osarusystem,dc=com -W -f groups.ldif 
Enter LDAP Password: 
adding new entry "ou=groups,dc=osarusystem,dc=com"
 
$

ユーザーの作成

作成した管理構造を用いてユーザーを追加します。 先ほどと同様にLDIFファイルを作成して登録します。

ソース4. ユーザーの追加のためのldif
dn: uid=langur,ou=people,dc=osarusystem,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
uid: langur
sn: Xiao
givenName: Langur
cn: Langur Xiao
displayName: Langur Xiao
uidNumber: 2001
gidNumber: 2000
loginShell: /bin/bash
homeDirectory: /home/langur
 

people_langur.ldifというファイル名で保存し、次のコマンドを発行します。 パスワードの入力を求められるので、OpenLDAPのインストール時に入力した管理用パスワードを入力します。

コマンド4. ldifの取り込み
$ ldapadd -x -D cn=admin,dc=osarusystem,dc=com -W -f people_langur.ldif
Enter LDAP Password: 
adding new entry "uid=langur,ou=people,dc=osarusystem,dc=com"
 
$

ユーザーを複数追加する場合は上記を繰り返します。

ユーザーパスワードの設定

ユーザーのパスワードを設定するにはldappasswdコマンドを使用します。 uid=の箇所をパスワードを変更するuidに変更します。

コマンド5. ユーザーのパスワードの設定
$ ldappasswd -x -D cn=admin,dc=osarusystem,dc=com -W -S uid=langur,ou=people,dc=osarusystem,dc=com
New password: 
Re-enter new password: 
Enter LDAP Password: 
$ 

グループの作成

次にグループを登録します。primatesというグループを追加する例を記載します。 グループに所属するユーザーを追加するときはmemberUidを複数記載します。 例えば、langurの他にmacacaというユーザーもprimatesグループに属するとして設定します。 次のLDIFファイルを作成します。

ソース5. グループの作成のためのldif
dn: cn=primates,ou=groups,dc=osarusystem,dc=com
objectclass: posixGroup
cn: primates
gidNumber: 2000
memberUid: langur
memberUid: macaca
 

groups_primates.ldifというファイル名で保存し、次のコマンドを発行します。 パスワードの入力を求められるので、OpenLDAPのインストール時に入力した管理用パスワードを入力します。

コマンド6. ldifの取り込み
$ ldapadd -x -D cn=admin,dc=osarusystem,dc=com -W -f groups_primates.ldif
Enter LDAP Password: 
adding new entry "uid=primates,ou=people,dc=osarusystem,dc=com"
 
$

グループを複数追加する場合は上記を繰り返します。

LDAPクライアントの設定

最低限のLDAPサーバーの設定ができたので、LDAPクライアントを設定して認証します。 下準備 の項目と同様のことを行います。 LDAPクライアントのホスト名はldap-clientとし、FQDNはldap-client.osarusystem.comであるとします。

LDAP認証の設定

aptでインストールします。

コマンド7. LDAP認証の設定用のライブラリのインストール
sudo apt-get install libnss-ldap

途中でInstallを継続してよいか聞かれるので「y」を入力します。 また、LDAPサーバーの設定を求められるので以下のように入力します。 FQDNを解決できない場合にはLDAPサーバーのIPアドレスを指定します。

ソース6. LDAPサーバの指定
ldap://ldap-server.osarusystem.com/

次にドメインを聞かれるので、次のように入力します。

ソース7. ドメインの指定
dc=osarusystem,dc=com

LDAPの管理者の設定まではデフォルトの選択肢を選びます。 LDAPの管理者の設定は次のように入力します。

ソース8. LDAP管理者の指定
cn=admin,dc=osarusystem,dc=com

LDAPの管理用パスワードの入力を求められるのでLDAPサーバーで指定したものを入力する。

その後、プロンプトが戻ってくるので以下のコマンドを発行しLDAP認証を有効にします。

コマンド8. LDAP認証の有効化
sudo auth-client-config -t nss -p lac_ldap
sudo pam-auth-update

途中、PAMで有効にする項目が出てくるのでCreate home directory on loginにもチェックを入れます。

LDAPクライアントを入れた端末を再起動するとLDAP認証が通るようになっているはずです。