Appendix OpenLDAPの設定 slapd.conf
OpenLDAPの設定方法
~slapd.confを編集する~
slapd.confを編集してslapdサービスを再起動する。
この方法はOpenLDAP2.3から非推奨となっている。
slaptestコマンドでslapd-config形式に変換することができる。
~slapd-configを使う~
OpenLDAP2.3からサポートされた方法。
slapd(OpenLDAPサーバー)を再起動することなく設定が動的に反映される。
slapdの設定ファイルは/etc/openldap/slapd.d以下にテキストファイルで格納されているが、これを直接編集することはできずLDIFファイルを作成しldapadd、ldapdelete、ldapmodifyコマンドを使って設定する。
[root@rocky9-ldap27 ~]#
[root@rocky9-ldap27 ~]# ls -la /etc/openldap/slapd.d
合計 5
drwxr-x--- 3 ldap ldap 4 5月 26 22:57 .
drwxr-xr-x 5 root root 7 5月 26 22:57 ..
drwxr-x--- 3 ldap ldap 8 5月 26 22:57 'cn=config'
-rw------- 1 ldap ldap 366 5月 26 22:57 'cn=config.ldif'
[root@rocky9-ldap27 ~]#
[root@rocky9-ldap27 ~]#
[root@rocky9-ldap27 ~]# tree /etc/openldap/slapd.d
/etc/openldap/slapd.d
├─ cn=config
│ ├─ cn=schema
│ │ └─ cn={0}core.ldif
│ ├─ cn=schema.ldif
│ ├─ olcDatabase={-1}frontend.ldif
│ ├─ olcDatabase={0}config.ldif
│ ├─ olcDatabase={1}monitor.ldif
│ └─ olcDatabase={2}mdb.ldif
└─ cn=config.ldif
2 directories, 7 files
[root@rocky9-ldap27 ~]#
初期設定
以下の操作例ではslapd.confを使った設定方法をご紹介します。
設定ファイルは/etc/openldapに保存をすることにします。
[root@rocky9-ldap27 ~]#
[root@rocky9-ldap27 ~]# cd /etc/openldap/
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# pwd
/etc/openldap
[root@rocky9-ldap27 openldap]#
★ 初期設定前 ★
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# ls -la
合計 12
drwxr-xr-x 5 root root 7 9月 10 23:41 .
drwxr-xr-x 65 root root 149 9月 10 23:41 ..
drwxr-xr-x 2 root root 2 11月 1 2022 certs
-rw-r--r-- 1 root root 121 9月 21 2022 check_password.conf
-rw-r--r-- 1 root root 900 11月 1 2022 ldap.conf
drwxr-xr-x 2 root root 32 9月 10 23:41 schema
drwxr-x--- 3 ldap ldap 4 9月 21 2022 slapd.d
[root@rocky9-ldap27 openldap]#
管理者パスワードを生成
管理者パスワードをslappasswdコマンドで生成します。
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# slappasswd
New password: ********
Re-enter new password: ********
{SSHA}ufMho5BOMGg2AL4bzuVCGm3iN1/RvsVP
[root@rocky9-ldap27 openldap]#
追加するスキーマを確認する
スキーマとは、OpenLDAPで管理できる項目を事前に定義したもの。
用途に応じてスキーマを追加することでOpenLDAPで管理できる情報を拡張することができる。
OpenLDAPのパッケージをインストールすると/etc/openldap/schemaディレクトリに格納されているが、オリジナルのスキーマを作成して拡張することもできる。
ユーザー名、パスワード、メールアドレスなどの一般的なユーザー情報であればcosine、inetorgperson、nisで対応可能。
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# ls -l /etc/openldap/schema/
合計 169
-r--r--r-- 1 root root 2036 5月 4 2022 collective.ldif
-r--r--r-- 1 root root 6191 5月 4 2022 collective.schema
-r--r--r-- 1 root root 1845 5月 4 2022 corba.ldif
-r--r--r-- 1 root root 8063 5月 4 2022 corba.schema
-r--r--r-- 1 root root 20619 5月 4 2022 core.ldif
-r--r--r-- 1 root root 20506 5月 4 2022 core.schema
-r--r--r-- 1 root root 12006 5月 4 2022 cosine.ldif
-r--r--r-- 1 root root 73995 5月 4 2022 cosine.schema <---★これを追加
-r--r--r-- 1 root root 3594 5月 4 2022 dsee.ldif
-r--r--r-- 1 root root 3374 5月 4 2022 dsee.schema
-r--r--r-- 1 root root 4842 5月 4 2022 duaconf.ldif
-r--r--r-- 1 root root 10389 5月 4 2022 duaconf.schema
-r--r--r-- 1 root root 3500 5月 4 2022 dyngroup.ldif
-r--r--r-- 1 root root 3523 5月 4 2022 dyngroup.schema
-r--r--r-- 1 root root 3481 5月 4 2022 inetorgperson.ldif
-r--r--r-- 1 root root 6267 5月 4 2022 inetorgperson.schema <---★これを追加
-r--r--r-- 1 root root 2979 5月 4 2022 java.ldif
-r--r--r-- 1 root root 13901 5月 4 2022 java.schema
-r--r--r-- 1 root root 2082 5月 4 2022 misc.ldif
-r--r--r-- 1 root root 2387 5月 4 2022 misc.schema
-r--r--r-- 1 root root 121865 5月 4 2022 msuser.ldif
-r--r--r-- 1 root root 113752 5月 4 2022 msuser.schema
-r--r--r-- 1 root root 1218 5月 4 2022 namedobject.ldif
-r--r--r-- 1 root root 1574 5月 4 2022 namedobject.schema
-r--r--r-- 1 root root 6809 5月 4 2022 nis.ldif
-r--r--r-- 1 root root 7640 5月 4 2022 nis.schema <---★これを追加
-r--r--r-- 1 root root 3308 5月 4 2022 openldap.ldif
-r--r--r-- 1 root root 1514 5月 4 2022 openldap.schema
-r--r--r-- 1 root root 6904 5月 4 2022 pmi.ldif
-r--r--r-- 1 root root 20467 5月 4 2022 pmi.schema
[root@rocky9-ldap27 openldap]#
管理するドメインを決定する
ここでは、OpenLDAPで管理するドメインは example.co.jp とする。
LDAPではexample.co.jpというドメインをdc=example,dc=co,dc=jpと表記する。
ドメイン管理者を決定する
ここでは、OpenLDAPで管理するドメインの管理者ユーザーは Manager とする。
LDAPではドメイン管理者のManagerはcn=Manager,dc=example,dc=co,dc=jpと表記する。
ドメイン管理者のパスワードを生成
ドメイン管理者パスワードをslappasswdコマンドで生成します。
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# slappasswd
New password: ********
Re-enter new password: ********
{SSHA}QBGJJEMP1rLuEqNTeoNH5oRINY+Nysph
[root@rocky9-ldap27 openldap]#
slapd.confを作成する
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# vi slapd.conf
# 管理者パスワードを設定
database config
rootpw {SSHA}ufMho5BOMGg2AL4bzuVCGm3iN1/RvsVP <---★slappasswdで生成した管理者パスワード
# スキーマ設定
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
# モニターデータベース設定(LDAPの利用統計情報などを格納するためのデータベース)
database monitor
access to *
by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
by dn.base="cn=Manager,dc=example,dc=co,dc=jp" read
by * none
# 管理するドメインの設定
database mdb
directory /var/lib/ldap
suffix "dc=example,dc=co,dc=jp"
# ドメイン管理者の設定
rootdn "cn=Manager,dc=example,dc=co,dc=jp"
rootpw {SSHA}QBGJJEMP1rLuEqNTeoNH5oRINY+Nysph <---★slappasswdで生成したドメイン管理者パスワード
# アクセス制御の設定
access to attrs=userPassword
by self write
by anonymous auth
by * none
access to *
by self write
by * read
[root@rocky9-ldap27 openldap]#
スキーマ確認
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "cn=schema,cn=config" dn
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config <---★追加された
dn: cn={2}inetorgperson,cn=schema,cn=config <---★追加された
dn: cn={3}nis,cn=schema,cn=config <---★追加された
[root@rocky9-ldap27 openldap]#
ドメイン確認
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "olcDatabase={1}monitor,cn=config"
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={1}monitor,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {1}monitor
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=externa
l,cn=auth" read by dn.base="cn=manager,dc=example,dc=co,dc=jp" read by * no
ne
olcAddContentAcl: FALSE
olcLastMod: TRUE
olcLastBind: FALSE
olcLastBindPrecision: 0
olcMaxDerefDepth: 15
olcReadOnly: FALSE
olcSyncUseSubentry: FALSE
olcMonitoring: FALSE
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "olcDatabase={2}mdb,cn=config"
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={2}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {2}mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=example,dc=co,dc=jp
olcAccess: {0}to attrs=userPassword by anonymous auth by self write by * no
ne
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by * read
olcAddContentAcl: FALSE
olcLastMod: TRUE
olcLastBind: FALSE
olcLastBindPrecision: 0
olcMaxDerefDepth: 15
olcReadOnly: FALSE
olcRootDN: cn=Manager,dc=example,dc=co,dc=jp
olcRootPW: {SSHA}QBGJJEMP1rLuEqNTeoNH5oRINY+Nysph
olcSyncUseSubentry: FALSE
olcMonitoring: TRUE
olcDbNoSync: FALSE
olcDbMaxReaders: 0
olcDbMaxSize: 10485760
olcDbMode: 0600
olcDbSearchStack: 16
olcDbMaxEntrySize: 0
olcDbRtxnSize: 10000
[root@rocky9-ldap27 openldap]#
初期データ投入
ここからはslapd-configと同じ
ドメインツリーを定義する
管理するドメインの情報を格納するツリー構造を定義する。
以下の操作例ではユーザー情報をou=Users,dc=example,dc=co,dc=jpに、グループ情報をou=Groups,dc=example,dc=co,dc=jpに格納するように 定義している。
LDIFファイルを作成します。
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# vi setup-domaintree.ldif
dn: dc=example,dc=co,dc=jp
objectClass: top
objectClass: dcObject
objectclass: organization
o: example.co.jp
dc: example
dn: cn=Manager,dc=example,dc=co,dc=jp
objectClass: organizationalRole
cn: Manager
description: OpenLDAP Manager
dn: ou=Users,dc=example,dc=co,dc=jp
objectClass: organizationalUnit
ou: Users
dn: ou=Groups,dc=example,dc=co,dc=jp
objectClass: organizationalUnit
ou: Groups
[root@rocky9-ldap27 openldap]#
ldapaddコマンドで設定追加をします。
★ 変更前 ★
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# ldapsearch -LLL -x -b "dc=example,dc=co,dc=jp" ou
No such object (32)
[root@rocky9-ldap27 openldap]#
★ ldapaddコマンドでドメインツリーを定義 ★
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# ldapadd -x -W -D "cn=Manager,dc=example,dc=co,dc=jp" -f setup-domaintree.ldif
Enter LDAP Password:
adding new entry "dc=example,dc=co,dc=jp"
adding new entry "cn=Manager,dc=example,dc=co,dc=jp"
adding new entry "ou=Users,dc=example,dc=co,dc=jp"
adding new entry "ou=Groups,dc=example,dc=co,dc=jp"
[root@rocky9-ldap27 openldap]#
★ 変更後 ★
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# ldapsearch -LLL -x -b "dc=example,dc=co,dc=jp" ou
dn: dc=example,dc=co,dc=jp
dn: cn=Manager,dc=example,dc=co,dc=jp
dn: ou=Users,dc=example,dc=co,dc=jp
ou: Users
dn: ou=Groups,dc=example,dc=co,dc=jp
ou: Groups
[root@rocky9-ldap27 openldap]#
ユーザーを追加する
ドメイン管理者の定義、ドメインの定義、ドメインツリーの定義が完了したのでユーザーを追加してみる。
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# slappasswd
New password: ********
Re-enter new password: ********
{SSHA}eLOuc3SirH8ip2GPLtLIhQtkDtAR3AlG
[root@rocky9-ldap27 openldap]#
LDIFファイルを作成します。
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# vi setup-adduser-user00.ldif
dn: uid=user00,ou=Users,dc=example,dc=co,dc=jp
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: user00
sn: example
userPassword: {SSHA}eLOuc3SirH8ip2GPLtLIhQtkDtAR3AlG
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/user00
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0
dn: cn=user00,ou=Groups,dc=example,dc=co,dc=jp
objectClass: posixGroup
cn: user00
gidNumber: 1000
memberUid: user00
[root@rocky9-ldap27 openldap]#
ldapaddでユーザーを追加します。
★ 変更前 ★
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# ldapsearch -LLL -x -W -D "cn=Manager,dc=example,dc=co,dc=jp" -b "dc=example,dc=co,dc=jp" uid=user00
Enter LDAP Password: ********
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# ldapsearch -LLL -x -W -D "cn=Manager,dc=example,dc=co,dc=jp" -b "dc=example,dc=co,dc=jp" cn=user00
Enter LDAP Password: ********
[root@rocky9-ldap27 openldap]#
★ ldapaddコマンドでユーザーを追加 ★
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# ldapadd -x -W -D "cn=Manager,dc=example,dc=co,dc=jp" -f setup-adduser-user00.ldif
Enter LDAP Password: ********
adding new entry "uid=user00,ou=Users,dc=example,dc=co,dc=jp"
adding new entry "cn=user00,ou=Groups,dc=example,dc=co,dc=jp"
[root@rocky9-ldap27 openldap]#
★ 変更後 ★
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# ldapsearch -LLL -x -W -D "cn=Manager,dc=example,dc=co,dc=jp" -b "dc=example,dc=co,dc=jp" uid=user00
Enter LDAP Password:
dn: uid=user00,ou=Users,dc=example,dc=co,dc=jp
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: user00
sn: example
userPassword:: e1NTSEF9ZUxPdWMzU2lySDhpcDJHUEx0TEloUXRrRHRBUjNBbEc=
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/user00
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0
uid: user00
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# ldapsearch -LLL -x -W -D "cn=Manager,dc=example,dc=co,dc=jp" -b "dc=example,dc=co,dc=jp" cn=user00
Enter LDAP Password:
dn: uid=user00,ou=Users,dc=example,dc=co,dc=jp
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: user00
sn: example
userPassword:: e1NTSEF9ZUxPdWMzU2lySDhpcDJHUEx0TEloUXRrRHRBUjNBbEc=
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/user00
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0
uid: user00
dn: cn=user00,ou=Groups,dc=example,dc=co,dc=jp
objectClass: posixGroup
cn: user00
gidNumber: 1000
memberUid: user00
[root@rocky9-ldap27 openldap]#
補足(1) slaptestコマンドでslapd.confを変換する
slaptestコマンドを使ってslapd.confをslapd-config形式に変換することができる。
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# systemctl stop slapd
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# rm -rf slapd.d/*
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# ls -la slapd.d/
合計 2
drwxr-x--- 2 ldap ldap 2 9月 19 23:41 .
drwxr-xr-x 6 root root 9 9月 20 00:27 ..
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# tree slapd.d/
slapd.d/
0 directories, 0 files
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
config file testing succeeded
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# ls -la slapd.d/
合計 5
drwxr-x--- 3 ldap ldap 4 9月 20 00:30 .
drwxr-xr-x 6 root root 9 9月 20 00:27 ..
drwxr-x--- 3 root root 8 9月 20 00:30 'cn=config'
-rw------- 1 root root 1164 9月 20 00:30 'cn=config.ldif'
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# tree slapd.d/
slapd.d/
├─ cn=config
│ ├─ cn=schema
│ │ ├─ cn={0}core.ldif
│ │ ├─ cn={1}cosine.ldif
│ │ ├─ cn={2}inetorgperson.ldif
│ │ └─ cn={3}nis.ldif
│ ├─ cn=schema.ldif
│ ├─ olcDatabase={-1}frontend.ldif
│ ├─ olcDatabase={0}config.ldif
│ ├─ olcDatabase={1}monitor.ldif
│ └─ olcDatabase={2}mdb.ldif
└─ cn=config.ldif
2 directories, 10 files
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# chown -R ldap:ldap /etc/openldap/slapd.d
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# chmod -R 000 /etc/openldap/slapd.d
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# chmod -R u+rwX /etc/openldap/slapd.d
[root@rocky9-ldap27 openldap]#
[root@rocky9-ldap27 openldap]# systemctl start slapd
[root@rocky9-ldap27 openldap]#
補足(2) ldapコマンド
ldapadd、ldapmodify、ldapsearchコマンドのオプションについて
~ldapadd、ldapmodify~
-Y EXTERNAL
EXTERNALメカニズムでSASLバインド(セキュアな接続)を試みる。-x
SASLの代わりに簡易認証を使う。-W
-xオプションで簡易認証を使用する際にパスワード入力を求める。-w
-xオプションで簡易認証を使用する際にコマンドのオプションとしてパスワードを指定する。-H
バインドするサーバーを指定する。
ローカルホストの場合:ldapi:///
リモートホストの場合:ldap://ip.add.re.ss:port/-D
バインド(接続)するDN(Distinguished Name:識別名)を指定する。-f
読み込むLDIFファイルを指定する。
~ldapsearch~
-LLL
コマンド結果の出力にLDIFバージョンなどのヘッダ情報を表示させない。-Y EXTERNAL
EXTERNALメカニズムでSASLバインド(セキュアな接続)を試みる。-x
SASLの代わりに簡易認証を使う。-W
-xオプションで簡易認証を使用する際にパスワード入力を求める。-w
-xオプションで簡易認証を使用する際にコマンドのオプションとしてパスワードを指定する。-H
バインドするサーバーを指定する。
ローカルホストの場合:ldapi:///
リモートホストの場合:ldap://ip.add.re.ss:port/-D
バインド(接続)するDNを指定する。-b
検索の起点となるDNを指定する。フィルタ
検索対象を絞り込むフィルタを指定する。
補足(3) DB_CONFIG
CentOS7ではOpenLDAPのデータベースをチューニングするためのDB_CONFIGファイルがないと起動時にエラーになるが、Rocky9のOpenLDAP2.6ではDB_CONFIGファイルがなくても問題なく起動できた。
★ CentOS7の場合 ★
[root@centos7 ~]#
[root@centos7 ~]# cp -p /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@centos7 ~]# chown ldap:ldap /var/lib/ldap/DB_CONFIG
[root@centos7 ~]#
または
[root@centos7 ~]#
[root@centos7 ~]# touch /var/lib/ldap/DB_CONFIG
[root@centos7 ~]# chown ldap:ldap /var/lib/ldap/DB_CONFIG
[root@centos7 ~]#
この記事が気に入ったらサポートをしてみませんか?