CentOS9でLDAP環境構築をしてみた
本記事はAsiaQuest Advent Calendarの8日目です。
LDAPの環境構築
CentOS Stream 9にOpenLDAPをインストールし、 LDAPサーバにphpLDAPadminをインストールするまでの手順をまとめました。
LDAPとは
ログイン情報を管理するツールであり、PHPやJava等と連携しユーザー情報を管理できます。
アカウント周りを独自で作成しなくても良いのが利点です。
また、パスワードのログイン期限等を一括で設定できるため、独自で作成しなくても良いのが利点です。
環境情報
OS: CentOS Stream 9
CPU: インテル® Celeron® プロセッサー N3050
メモリ: 8GB
OpenLDAP: v2.6.2
LDAPサーバの環境構築手順
OpenLDAPのインストールと構築
OpenLDAPのインストール
ドメイン名は「asia.quest」として進めていきます。
※必要に応じて変更してください
yum -y install openldap-servers openldap-clients
- OpenLDAPの起動とOS起動時の自動起動を設定
systemctl start slapd
systemctl enable slapd
- 初期化を行う
ls /etc/openldap/slapd.d/cn=config
- 上記コマンドを実施し、olcDatabase={2}の値を確認
mdb.ldifかhdb.ldifとなっているので覚えておいてください。
今回はmdb.ldifであるためmdb.ldifとして進めていきます。
systemctl stop slapd
rm -fr /etc/openldap/slapd.d/cn=config/olcDatabase={2}mdb.ldif
rm -fr /var/lib/ldap
install -d -o ldap -g ldap -m 0700 /var/lib/ldap
install -d -o ldap -g ldap -m 0700 /var/lib/ldap/asia.quest
systemctl start slapd
- デフォルトのドメインがmy-domain.comとなっているためasia.questに変更
sudo ldapmodify <<__EOD__
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external
,cn=auth" read by dn.base="cn=Manager,dc=asia,dc=quest" read by * none
__EOD__
(以下内容が表示されれば成功)
modifying entry "olcDatabase={1}monitor,cn=config"
- 基本的なスキーマの読み込み
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
- ドメイン用DB情報を作成
※初期化時にhdbであった場合はmdbの部分をhdbに置き換えてください
ldapadd -Y EXTERNAL -H ldapi:/// <<__EOD__
dn: olcDatabase={2}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {2}mdb
olcDbDirectory: /var/lib/ldap/asia.quest
olcSuffix: dc=asia,dc=quest
olcRootDN: cn=Manager,dc=asia,dc=quest
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=asia,dc=quest" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=asia,dc=quest" write by * read
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
__EOD__
(以下内容が表示されれば成功)
adding entry "olcDatabase={2}mdb,cn=config"
- データベースのチューニング
ldapmodify -Y EXTERNAL -H ldapi:/// <<__EOD__
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcDbConfig
olcDbConfig: set_cachesize 0 67108864 1
olcDbConfig: set_lg_dir .
olcDbConfig: set_lg_bsize 33554432
olcDbConfig: set_lk_max_objects 3000
olcDbConfig: set_lk_max_locks 3000
olcDbConfig: set_lk_max_lockers 3000
olcDbConfig: set_flags DB_LOG_AUTOREMOVE
__EOD__
(以下内容が表示されれば成功)
modifying entry "olcDatabase={2}mdb,cn=config"
- パスワードの暗号化
slappasswd
New password:(パスワードを入力)
Re-enter new password:(パスワードを再度入力)
{SSHA}XXXXXXXXXX(こちらを{SSHA}からコピーする)
- ドメインのパスワードを設定
ldapmodify -Y EXTERNAL -H ldapi:/// <<__EOD__
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}XXXXXXXXXX(先ほど作成したパスワードを貼り付け)
__EOD__
(以下内容が表示されれば成功)
modifying entry "olcDatabase={2}mdb,cn=config"
- ドメイン情報の作成
ldapadd -x -D cn=Manager,dc=asia,dc=quest -W <<__EOD__
dn: dc=asia,dc=quest
objectClass: top
objectClass: dcObject
objectclass: organization
o: Asia Quest(企業情報のため好きな名前に変更してください)
dc: AQ(企業情報のため好きな名前に変更してください)
__EOD__
(以下内容が表示されれば成功)
adding new entry "dc=asia,dc=quest"
- OpenLDAPがHTTP通信でのデータ閲覧を無効化している場合、phpLDAPadminでログインできないため、
OpenLDAPのHTTP通信でのデータ閲覧を有効化する
getsebool httpd_can_connect_ldap
httpd_can_connect_ldap --> off(onになっている場合はsetseboolを実行しなくてOK)
setsebool -P httpd_can_connect_ldap on
- 外部からアクセスを許可したい場合Firewallの設定を行う
firewall-cmd --add-service=ldap --permanent
firewall-cmd --reload
以上でOpenLDAPの設定が完了です。
もしドメインを追加する場合は、以下を実施しドメイン用DB情報を作成から進めていただければ問題ないです。
systemctl stop slapd
install -d -o ldap -g ldap -m 0700 /var/lib/ldap/(ドメイン名)
systemctl start slapd
phpLDAPadminのインストール
※前提条件としてPHP、Apatchが設定されているものとします
- phpLDAPadminのインストール
yum -y install phpldapadmin
- ログインをuidからdnでログインするよう変更
vi /etc/phpldapadmin/config.php
(以下場所を変更)
// $servers->setValue('login','attr','dn');
$servers->setValue('login','attr','uid');
↓
$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid');
- 外部からアクセスを許可したい場合以下の設定を行う
※指定方法はスラッシュ表記法でも可(例:192.168.255.255/16)
apatchによって記載する箇所は片方でも良いですが、面倒であれば両方記載すれば確実です
vi /etc/httpd/conf.d/phpldapadmin.conf
(以下場所を変更)
<Directory /usr/share/phpldapadmin/htdocs>
<IfModule mod_authz_core.c>
# Apache 2.4
Require local
Require ip (IPアドレスを指定)
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 (IPアドレスを指定)
Allow from ::1
</IfModule>
</Directory>
- phpLDAPadminをapatchに連携するよう設定
vi /etc/httpd/conf/httpd.conf
(以下一文を最後に追加、存在する場合は不要)
Include conf.d/*.conf
以上でphpLDAPadminの設定が完了です。
phpLDAPadminの使い方
- http://localhost/phpldapadmin(別サーバーの場合localhostの部分はサーバーのIPかドメイン名)でphpLDAPadminに遷移する
ログインDNには、作成したDN(今回の場合は「cn=Manager,dc=asia,dc=quest」)、
パスワードには、先ほど設定したパスワードを入力するとログインができます。
ログイン後の画面は以下となっており、左のdc=asia,dc=questが作成したドメイン情報となります。
OUの作成
- ドメイン情報の「子の項目を作成」を押下
- 「Generic: Organisational Unit」を押下
- OUの名前を設定
- 問題ない場合はコミットを押下
- OU情報が作成される
ユーザーの作成
- OU情報の「子の項目を作成」を押下
- 「Generic: Simple Security Object」または「Generic: User Account」を押下
今回は「Generic: Simple Security Object」を選択 - ユーザー名、パスワードを設定
- 問題ない場合はコミットを押下
- ユーザーが作成される
- 削除する場合は「この項目を削除」を押下すると削除できる
簡単ですが以上がphpLDAPadminの使い方です。
次回はPHP(Laravel)かJava(Spring)を使用してLDAP経由のログインを試していけたらと思います。
参考文献
【Server World】OpenLDAP : LDAPサーバーの設定
【Developers IO】LDAPサーバにphpLDAPadminをインストールして疎通確認する
【Qiita】OpenLDAPをマルチドメインでレプリケーション
アジアクエスト株式会社では一緒に働いていただける方を募集しています。
興味のある方は以下のURLを御覧ください。