本記事はAsiaQuest Advent Calendarの8日目です。
CentOS Stream 9にOpenLDAPをインストールし、 LDAPサーバにphpLDAPadminをインストールするまでの手順をまとめました。
ログイン情報を管理するツールであり、PHPやJava等と連携しユーザー情報を管理できます。
アカウント周りを独自で作成しなくても良いのが利点です。
また、パスワードのログイン期限等を一括で設定できるため、独自で作成しなくても良いのが利点です。
OS: CentOS Stream 9
CPU: インテル® Celeron® プロセッサー N3050
メモリ: 8GB
OpenLDAP: v2.6.2
OpenLDAPのインストール
ドメイン名は「asia.quest」として進めていきます。
※必要に応じて変更してください
yum -y install openldap-servers openldap-clients
systemctl start slapd
systemctl enable slapd
ls /etc/openldap/slapd.d/cn=config
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
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
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"
getsebool httpd_can_connect_ldap
httpd_can_connect_ldap --> off(onになっている場合はsetseboolを実行しなくてOK)
setsebool -P httpd_can_connect_ldap on
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
※前提条件としてPHP、Apatchが設定されているものとします
yum -y install phpldapadmin
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');
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>
vi /etc/httpd/conf/httpd.conf
(以下一文を最後に追加、存在する場合は不要)
Include conf.d/*.conf
以上でphpLDAPadminの設定が完了です。
ログインDNには、作成したDN(今回の場合は「cn=Manager,dc=asia,dc=quest」)、
パスワードには、先ほど設定したパスワードを入力するとログインができます。
ログイン後の画面は以下となっており、左のdc=asia,dc=questが作成したドメイン情報となります。
簡単ですが以上がphpLDAPadminの使い方です。
次回はPHP(Laravel)かJava(Spring)を使用してLDAP経由のログインを試していけたらと思います。
【Server World】OpenLDAP : LDAPサーバーの設定
【Developers IO】LDAPサーバにphpLDAPadminをインストールして疎通確認する
【Qiita】OpenLDAPをマルチドメインでレプリケーション