ニフクラ ブログ

ニフクラやクラウドの技術について、エンジニアが語るブログです。

OpenLDAPで冗長化したLDAPサーバーの構築を検証【検証編】

こんにちは、ニフクラテクニカルアカウントチームです。
本記事は、OpenLDAPで冗長化したLDAPサーバーの構築を検証【構築編】の続きとなります。今回の検証編では、LDAPサーバー(プロバイダ)でCLIとGUI(phpLDAPadmin)の二通りの方法を使用してグループ、ユーザーを作成し、アカウントの一元管理ができることを確認します。また、LDAPサーバーが冗長化されていることの確認も行います。

f:id:TechnicalAccountEngineer:20190422101407p:plain

前提条件

本記事は、以下の前提知識がある方を想定しています。

  • ニフクラの基本的なコントロールパネルの操作、サービスを利用する知識
    (サーバー作成、ネットワーク構築など)
  • Linuxの基本的な操作、知識

検証概要

本記事は、以下の検証を実施しています。

検証(1)

  1. LDAPサーバー(プロバイダ)でグループ、ユーザーを作成し(CLI)、ユーザーのホームディレクトリをNAS上に設定する。
  2. Linuxのユーザー管理と連携して、作成したユーザーでLDAPクライアントからログインする。
  3. ログインしたユーザーのホームディレクトリ上でファイルの読み書きを行う。
  4. phpLDAPadminを使用してプロバイダでグループ、ユーザーを作成し(GUI)、ユーザーのホームディレクトリをNAS上に設定する。
  5. Linuxのユーザー管理と連携して、作成したユーザーでLDAPクライアントからログインする。

検証(2)

  1. LDAPサーバーを冗長化する(プロバイダ、コンシューマ)。
  2. プロバイダ側のLDAPサーバーをダウンさせ、LDAPクライアントからコンシューマ経由でログインできることを確認する。


■アカウント管理と冗長化のイメージ

f:id:TechnicalAccountEngineer:20190424195715p:plain f:id:TechnicalAccountEngineer:20190424110240p:plain

利用リソース

リソースの名称やIPアドレスは以下のように設定しています。

リソース名 ホスト名 プライベートIP 備考
サーバー
(CentOS7.6)
LDAPSV01 192.168.1.11 LDAPサーバー
(プロバイダ)
LDAPSV02 192.168.1.12 LDAPサーバー
(コンシューマ)
LDAPCL01 192.168.1.21 LDAPクライアント
LDAPCL02 192.168.1.22
ルーター - 192.168.1.254 -
プライベートLAN - 192.168.1.0
/24
-
NAS - 192.168.1.100
/24
no_root_squash

その他のリソース情報については、前回の構築編をご参照ください。

検証内容

検証(1)

グループ、ユーザー作成(CLI)

【対象サーバー:LDAPSV01】

LDAPサーバー(プロバイダ)上でグループ、ユーザーの作成を行います。

グループ追加用のLDIFファイルを作成します。

# vi /root/ldap_work/group.ldif
<以下内容で新規作成>
dn: cn=testgroup,ou=Organization,dc=example,dc=com
objectClass: posixGroup
objectClass: top
cn:testgroup
gidNumber:1000

LDIFファイルの設定を反映します。

# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f /root/ldap_work/testgroup.ldif
Enter LDAP Password: <LDAP管理者のパスワード>
adding new entry "cn=testgroup,ou=Organization,dc=example,dc=com"

ユーザー(testuser1)追加用のLDIFファイルを作成します。

# vi /root/ldap_work/testuser1.ldif
dn: uid=testuser1,cn=testgroup,ou=Organization,dc=example,dc=com
objectClass: account
objectClass: posixAccount
objectClass: top
cn: testuser1
uid: testuser1
homeDirectory: /home/testuser1
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1000
userPassword: <testuser1の任意のパスワード>

LDIFファイルの設定を反映します。

# ldapadd -x -D cn=Manager,dc=example,dc=com -W -f /root/ldap_work/testuser1.ldif
Enter LDAP Password: <LDAP管理者のパスワード>
adding new entry "uid=testuser1,cn=testgroup,ou=Organization,dc=example,dc=com"

ユーザー(testuser2)追加用のLDIFファイルを作成します。

# vi /root/ldap_work/testuser2.ldif
dn: uid=testuser2,cn=testgroup,ou=Organization,dc=example,dc=com
objectClass: account
objectClass: posixAccount
objectClass: top
cn: testuser2
uid: testuser2
homeDirectory: /home/testuser2
loginShell: /bin/bash
uidNumber: 1002
gidNumber: 1000
userPassword: <testuser2の任意のパスワード>

LDIFファイルの設定を反映します。

# ldapadd -x -D cn=Manager,dc=example,dc=com -W -f /root/ldap_work/testuser2.ldif
Enter LDAP Password: <LDAP管理者のパスワード>
adding new entry "uid=testuser2,cn=testgroup,ou=Organization,dc=example,dc=com"

作成したグループ、ユーザーを確認します。

# ldapsearch -LLL -x -W -D "cn=Manager,dc=example,dc=com" -b "ou=Organization,dc=example,dc=com"
Enter LDAP Password: <LDAP管理者用のパスワード>
dn: ou=Organization,dc=example,dc=com
objectClass: organizationalUnit
ou: Organization


dn: cn=testgroup,ou=Organization,dc=example,dc=com
objectClass: posixGroup
objectClass: top
cn: testgroup
gidNumber: 1000


dn: uid=testuser1,cn=testgroup,ou=Organization,dc=example,dc=com
objectClass: account
objectClass: posixAccount
objectClass: top
cn: testuser1
uid: testuser1
homeDirectory: /home/testuser1
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1000
userPassword:: xxxxxxxxxx


dn: uid=testuser2,cn=testgroup,ou=Organization,dc=example,dc=com
objectClass: account
objectClass: posixAccount
objectClass: top
cn: testuser2
uid: testuser2
homeDirectory: /home/testuser2
loginShell: /bin/bash
uidNumber: 1002
gidNumber: 1000
userPassword:: xxxxxxxxxx

作成したユーザー(testuser1,testuser2)のホームディレクトリをNAS上に作成します。

# mkdir /NAS_home/testuser1
# chown 1001:1000 /NAS_home/testuser1
# mkdir /NAS_home/testuser2
# chown 1002:1000 /NAS_home/testuser2

以上でLDAPサーバー(プロバイダ)でのグループ、ユーザーの作成(CLI)は終了となります。

ログイン確認

【対象サーバー:LDAPCL01,LDAPCL02】

LDAPサーバー(プロバイダ)で作成したユーザーで、LDAPクライアントにログインできることを確認します。

LDAPCL01にtestuser1でログインをします。 ホームディレクトリがNAS上にオートマウントされていることを確認します。

$ uname -n
LDAPCL01
$ whoami
testuser1
$ id
uid=1001(testuser1) gid=1000(testgroup) groups=1000(testgroup)
$ pwd
/home/testuser1
$ df -h |grep testuser1
192.168.1.100:/testuser1    99G  60M   99G   1% /home/testuser1

testuser2で同様の手順を実施し、問題がないことを確認します。
※実施結果の記載は割愛させて頂きます。

ファイル読み書きの確認

LDAPCL01上でファイル(testuser1.txt)を作成します。

$ echo "testuser1" >> testuser1.txt

LDAPCL02にtestuser1でログインします。

$ uname -n
LDAPCL02
$ whoami
testuser1
$ id
uid=1001(testuser1) gid=1000(testgroup) groups=1000(testgroup)
$ pwd
/home/testuser1
$ df -h |grep testuser1
192.168.1.100:/testuser1    99G  60M   99G   1% /home/testuser1

LDAPCL01で作成したファイル(testuser1.txt)を参照します。

$ cat testuser1.txt
testuser1

testuser2で同様の手順を実施し、問題がないことを確認します。
※実施結果の記載は割愛させて頂きます。

グループ、ユーザー作成(GUI)

【対象サーバー:LDAPSV01】

phpLDAPadminへログインし、グループ、ユーザーを作成します。
※ログイン手順は、前回の構築編をご参照ください。

phpLDAPadminでは、エントリ追加用のテンプレートが用意されています。今回は、テンプレートを使用したグループの作成と、テンプレートを使用しないユーザーの作成を行います。

左ペインからグループを作成したい階層の「ここに新しく項目を作成」をクリックします。

f:id:TechnicalAccountEngineer:20190417162354p:plain

テンプレートから、「Generic: Posix Group」を選択します。

f:id:TechnicalAccountEngineer:20190417162806p:plain

グループに任意グループ名を入力し、「オブジェクトを作成」をクリックします。
※GID番号は作成時に設定が行えないため、変更の必要がある場合は、作成後に変更します。

f:id:TechnicalAccountEngineer:20190417163452p:plain

「コミット」をクリックします。

f:id:TechnicalAccountEngineer:20190417163730p:plain

左ペインにグループが追加されました。

f:id:TechnicalAccountEngineer:20190417164249p:plain

作成したエントリのパラメータを更新する場合は、左ペインから対象のエントリを選択し、対象のパラメータを入力後、「オブジェクト更新」をクリックします。今回は、GID番号を変更します。

f:id:TechnicalAccountEngineer:20190417164811p:plain

確認画面が表示されるため、内容を確認し「オブジェクト更新」をクリックします。

f:id:TechnicalAccountEngineer:20190417172402p:plain

作成したグループの配下にユーザーを作成します。左ペインからグループを選択し、「子の項目を作成」をクリックします。

f:id:TechnicalAccountEngineer:20190417173102p:plain

「既定値」をクリックします。

f:id:TechnicalAccountEngineer:20190417173324p:plain

必要となるオブジェクトクラスの選択をします。ここでは、「account」と「posixAccount」を選択しています。

f:id:TechnicalAccountEngineer:20190417173556p:plain

オブジェクトクラスを選択後、「進む」をクリックします。

f:id:TechnicalAccountEngineer:20190417173605p:plain

「属性rdnの選択」のプルダウンをクリックし、「userid」を選択します。

f:id:TechnicalAccountEngineer:20190417174248p:plain

パラメータを入力し、「オブジェクトを作成」をクリックします。

f:id:TechnicalAccountEngineer:20190424201746p:plain

確認画面が表示されるため、内容を確認し「コミット」をクリックします。

f:id:TechnicalAccountEngineer:20190417181013p:plain

ログイン確認

【対象サーバー:LDAPSV01,LDAPCL01,LDAPCL02】

プロバイダ(LDAPSV01)上でphpLDAPadminで作成したユーザーのホームディレクトリを作成します。

# mkdir /NAS_home/testuser3
# chown 1003:1001 /NAS_home/testuser3

LDAPCL01にphpLDAPadminで作成したユーザー(testuser3)でログインできることを確認します。

$ uname -n
LDAPCL01
$ whoami
testuser3
$ id
uid=1003(testuser3) gid=1001(testgroup2) groups=1001(testgroup2)
$ pwd
/home/testuser3
$ df -h |grep testuser3
192.168.1.100:/testuser3    99G  60M   99G   1% /home/testuser3

同様にLDAPCL02にtestuser3でログインします。
※実施結果の記載は割愛させて頂きます。

phpLDAPadminで作成したユーザーが、CLIで作成したユーザーと同様にログインできることを確認できました。
検証(1)は以上となります。

検証(2)

LDAPサーバーの冗長化確認

【対象サーバー:LDAPSV01(停止),LDAPCL01,LDAPCL02】

プロバイダ側のLDAPサーバー(LDAPSV01)を停止させて、冗長化が有効となっていることを確認します。

LDAPサーバー(LDAPSV01)を停止します。

f:id:TechnicalAccountEngineer:20190417154954p:plain

LDAPCL01にtestuser1でログインします。

$ uname -n
LDAPCL01
$ whoami
testuser1
$ id
uid=1001(testuser1) gid=1000(testgroup) groups=1000(testgroup)
$ pwd
/home/testuser1
$ df -h |grep testuser1
192.168.1.100:/testuser1    99G  60M   99G   1% /home/testuser1

続いてLDAPCL02にtestuser1でログインします。

$ uname -n
LDAPCL02
$ whoami
testuser1
$ id
uid=1001(testuser1) gid=1000(testgroup) groups=1000(testgroup)
$ pwd
/home/testuser1
$ df -h |grep testuser1
192.168.1.100:/testuser1    99G  60M   99G   1% /home/testuser1

testuser2、testuser3で同様の手順を実施し、問題がないことを確認します。
※実施結果の記載は割愛させて頂きます。

プロバイダのダウン時も問題なくログインできることが確認できました。
検証(2)は以上となります。

まとめ

LDAPサーバー上でリソース情報の一元管理が出来れば、効率化と運用者の負荷軽減が望めると思います。
CLIでのエントリ追加やデータ更新作業は、LDIFファイルを作成して読み込ませるため、慣れるまでは手順が難しく、また作成したエントリのディレクトリツリーが分かりにくいという欠点があります。 phpLDAPadminを使用すれば、GUIでの直感的な操作が行えるため、欠点を補うことが出来ます。
本記事がLDAPサーバーを作成する際の参考になれば幸いです。

注意事項

  • 本記事では検証目的のため、phpLDAPadminへのアクセスはhttps通信を実装していません。実際に検討される場合は、適切な設定のもと実施してください。
  • 本記事ではユーザーのsshでの認証方式をパスワード認証としていますが、環境に応じてセキュリティを考慮し、公開鍵認証の設定を実施してください。
  • 本記事については検証結果の1つとなります。実際に検討される場合は、事前にそれぞれの要件を鑑みて実装するか確認してください。
  • 本記事ではOS上の操作についても記載していますが、ニフクラではOS以上はご利用者様の責任範囲となりますのでご留意ください。