CentOS9でLDAP環境構築をしてみた

    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に遷移する

    20231208_CentOS9_01

    ログインDNには、作成したDN(今回の場合は「cn=Manager,dc=asia,dc=quest」)、
    パスワードには、先ほど設定したパスワードを入力するとログインができます。

    ログイン後の画面は以下となっており、左のdc=asia,dc=questが作成したドメイン情報となります。
    20231208_CentOS9_02

    OUの作成

    • ドメイン情報の「子の項目を作成」を押下
      20231208_CentOS9_03
    • 「Generic: Organisational Unit」を押下
      20231208_CentOS9_04
    • OUの名前を設定
      20231208_CentOS9_05
    • 問題ない場合はコミットを押下
      20231208_CentOS9_06
    • OU情報が作成される
      20231208_CentOS9_07

    ユーザーの作成

    • OU情報の「子の項目を作成」を押下
      20231208_CentOS9_08
    • 「Generic: Simple Security Object」または「Generic: User Account」を押下
      今回は「Generic: Simple Security Object」を選択20231208_CentOS9_09
    • ユーザー名、パスワードを設定
      20231208_CentOS9_10
    • 問題ない場合はコミットを押下
      20231208_CentOS9_11
    • ユーザーが作成される
      20231208_CentOS9_12
    • 削除する場合は「この項目を削除」を押下すると削除できる
      20231208_CentOS9_13

    簡単ですが以上がphpLDAPadminの使い方です。

    次回はPHP(Laravel)かJava(Spring)を使用してLDAP経由のログインを試していけたらと思います。

    参考文献

    【Server World】OpenLDAP : LDAPサーバーの設定
    【Developers IO】LDAPサーバにphpLDAPadminをインストールして疎通確認する
    【Qiita】OpenLDAPをマルチドメインでレプリケーション

     

    アジアクエスト株式会社では一緒に働いていただける方を募集しています。
    興味のある方は以下のURLを御覧ください。