OpenLDAPの基本的な構築方法

概要

OpenLDAPの基本的な構築方法を記載します。

今回は本当に基礎的なことしか書いていませんが、まずOpenLDAPを立ててみたい方、大まかに構築方法を知りたい方など、参考にしていただければと思います。

環境

OSRHEL7.5
認証管理openldap-2.4.44-13.el7.x86_64

構築の流れ

  1. インストール
  2. サービス起動
  3. 設定変更
  4. データ追加・検索
  5. 自動起動設定

構築方法

[1] インストール

  • インストール

RHELではOpenLDAPパッケージが提供されているため、yumコマンドでインストール可能です。
OpenLDAPにはサーバプロダクト(データ保管)とクライアントプロダクト(データ接続・取得)の2つが存在します。
OpenLDAPは動的設定で管理しているため、2つともインストールしておくと便利です。

# rpm -q postfix

コマンドを実行するとパッケージ内容・依存関係の一覧が表示され、問題ないか確認されるので問題なければ「y」を入力します。
「完了しました!」と表示されればインストール完了です。

  • 状況確認

確認コマンドを実行し、OpenLDAPのrpm名が出力されれば正常にインストール出来ていることが確認できます。

# rpm -q openldap
openldap-2.4.44-13.el7.x86_64

[2] サービス起動

OpenLDAPの場合、大部分の設定は設定ファイルではなく動的設定で管理しています。
動的設定はOpenLDAPが起動している状態でないと設定を反映できないため、サービスを起動する必要があります。

  • サービス状態確認
# systemctl status slapd
● slapd.service - OpenLDAP Server Daemon
~省略~
   Active: inactive (dead)
  • サービス起動
# systemctl start slapd
  • サービス状態確認

サービスの状態を確認します。
エラーがなければ正常に起動されています。

# systemctl status slapd
● slapd.service - OpenLDAP Server Daemon
~省略~
   Active: active (running)
~省略~

[3] 設定変更

どんな構成にするかで設定内容は変わってきますが、今回は必要最低限の値を設定します。

  • 設定ディレクトリのバックアップ

前述した通り、OpenLDAPの場合は大部分の設定を動的設定で管理しています。
そのため、ファイルではなく設定を保管しているディレクトリごとまとめてバックアップを取っておいた方が安全です。
なるべくバックアップを取るようにしてください。

# cp -pr /etc/openldap/slapd.d /etc/openldap/slapd.d.org

また、今回は説明を省略しますが、動的設定以外にも設定ファイルで管理している項が目もあります。
設定ファイルを変更する場合は出来るだけバックアップを取るようにしてください。

  • スキーマ追加

データを追加するためには属性データをあらかじめ追加しておく必要があります。
属性データ情報群をschema(スキーマ)と言います。
何のスキーマを使うべきかは要件によって異なりますが、下記スキーマは必要になることが多いです。

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

エラーが出力されず、「adding new entry "DN値"」が出力された場合、正常に追加されています。

  • スキーマ確認

現在追加されているスキーマを確認します。

# ls /etc/openldap/slapd.d/cn\=config/cn\=schema/
cn={0}core.ldif  cn={1}cosine.ldif  cn={2}inetorgperson.ldif

自分で追加したスキーマ名が存在することが確認できます。

  • パスワード生成

管理者用のパスワードを設定するため、コマンドで暗号化されたパスワードを生成します。

# slappasswd
  • 設定の変更

コマンドライン上でも設定を変更させることは出来ますが、操作の容易さを考慮して設定変更用のファイルを準備します。

# vi /etc/openldap/setting.ldif

ファイルの中に記載する設定について説明します。

  • 管理者DN、パスワード

「olcDatabase={0}config」とは、OpenLDAPの動的設定を主に保持します。
設定するのは全体の管理者DNと管理者パスワードの設定値です。
管理者パスワードはコマンド生成したパスワードを使用します。

通常はdn値、changetype、変更内容が1グループとなっており、テキストを1行改行することによって別グループだと認識させます。
同じdn先を変更したい場合、「-」をつけてまとめて指定することが出来ます。

dn: olcDatabase={1}monitor,cn=config
changetype: modify
add: olcRootDN
olcRootDN: cn=monitor
-
add: olcRootPW
olcRootPW: {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-
replace: olcAccess
olcAccess: to *
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
  by * none
  • ドメイン、hdb管理者DN、パスワード、インデックス、アクセス制御

データの持ち方はhdbとbdbがあり、デフォルトはhdbです。
ユーザデータなど、様々なデータを追加、管理するのはこのhdbになります。
設定するのはドメイン、hdbの管理者DNと管理者パスワード、インデックス、アクセス制御です。
ドメインは適当な名前でも問題ないですが、どんなデータ構造で管理すべきかを事前に考えることが一番重要です。
インデックスはデフォルトで追加されるものもありますが、それ以外に必要なuid、同期機能を使用する場合に必要なentryCSNやentryUUIDは設定することを推奨します。

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=testdomain,dc=com
-
replace: olcRootDN
olcRootDN: cn=Manager,dc=testdomain,dc=com
-
add: olcRootPW
olcRootPW: {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-
add: olcDbIndex
olcDbIndex: uid eq
olcDbIndex: entryCSN,entryUUID eq
-
replace: olcAccess
olcAccess: to *
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
  by * none
  • その他設定値

他にもログレベルやキャッシュ設定など様々な設定値があります。

それ以外にも、設定値はどんな要件か(どんなことをしたいか)によって何を設定すべきかが変わってきます。
技術情報ページにてTIPSを載せていますので、そちらも参考にしてください。

  • 設定反映

すべての設定値を記述したテキストファイルをOpenLDAPに反映させます。
エラーが出力されず、「adding new entry "DN値"」が出力された場合、正常に追加されています。

# ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/setting.ldif

これで必要最低限の構築は完了しました。

[4] データ追加・検索

実際にデータを追加し、検索してみます。

  • データ追加用ldif準備

コマンドライン上でも設定を変更させることは出来ますが、操作の容易さを考慮してデータ追加用のファイルを準備します。

# vi /etc/openldap/testdata.ldif
  • データ

テスト用のデータとして下記を用意しました。
olcSuffixパラメータで設定したドメインを必ず設定するようにしてください。
ただし、管理者DNとして設定したDNはわざわざデータ登録しなくても使用可能です。

dn: dc=testdomain,dc=com
dc: testdomain
o: example
objectClass: dcObject
objectClass: organization
 
dn: ou=Users,dc=testdomain,dc=com
ou: Users
objectClass: organizationalUnit
 
dn: uid=test,ou=Users,dc=testdomain,dc=com
uid: test
userPassword: {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
cn: test
sn: test
objectClass: inetOrgPerson
  • 設定反映

すべての設定値を記述したテキストファイルをOpenLDAPに反映させます。
エラーが出力されず、「adding new entry "DN値"」が出力された場合、正常に追加されています。

# ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/testdata.ldif
  • 検索

"dc=testdomain,dc=com"配下を検索します。
アクセス制限で許可されているEXTERNAL接続で検索させるか、管理者DNで接続させて検索させることが可能です。

# ldapsearch -Y EXTERNAL -H ldapi:/// -b "dc=testdomain,dc=com"
または
# ldapsearch -x -D "cn=Manager,dc=testdomain,dc=com" -w 設定したパスワード -b "dc=testdomain,dc=com"

エラーが出力されず、「adding new entry "DN値"」が出力された場合、正常に追加されています。

  • 結果確認

登録したデータが出力されることを確認します。

# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
 
# testdomain.com
dn: dc=testdomain,dc=com
dc: testdomain
o: example
objectClass: dcObject
objectClass: organization
 
# Users, testdomain.com
dn: ou=Users,dc=testdomain,dc=com
ou: Users
objectClass: organizationalUnit
 
# test, Users, testdomain.com
dn: uid=test,ou=Users,dc=testdomain,dc=com
uid: test
userPassword:: e1NTSEF9cDBINEQwT0R6ZmVCOHJsU3BGR2RVTXZlQXdFTW1KaS8=
cn: test
sn: test
objectClass: inetOrgPerson
 
# search result
search: 2
result: 0 Success
 
# numResponses: 4
# numEntries: 3

登録したすべてのデータが出力されていることが確認できました。

[5] 自動起動設定

OSが再起動した際に自動的に起動するよう設定をします。

  • 自動起動設定

自動起動設定をします。

# systemctl enable slapd
  • 自動起動状態確認

自動起動が「enable」になっていることを確認します。

# systemctl is-enabled slapd
enabled

技術情報

商標について

関連サービス

OSS導入支援
OSS保守サポート

お気軽にお問い合わせください。応対時間 9:30-17:30 [ 土・日・祝日除く ]

お問い合わせ