見出し画像

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  526 22:57  .
drwxr-xr-x 5 root root   7  526 22:57  ..
drwxr-x--- 3 ldap ldap   8  526 22:57 'cn=config'
-rw------- 1 ldap ldap 366  526 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  910 23:41 .
drwxr-xr-x 65 root root 149  910 23:41 ..
drwxr-xr-x  2 root root   2 111  2022 certs
-rw-r--r--  1 root root 121  921  2022 check_password.conf
-rw-r--r--  1 root root 900 111  2022 ldap.conf
drwxr-xr-x  2 root root  32  910 23:41 schema
drwxr-x---  3 ldap ldap   4  921  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  54  2022 collective.ldif
-r--r--r-- 1 root root   6191  54  2022 collective.schema
-r--r--r-- 1 root root   1845  54  2022 corba.ldif
-r--r--r-- 1 root root   8063  54  2022 corba.schema
-r--r--r-- 1 root root  20619  54  2022 core.ldif
-r--r--r-- 1 root root  20506  54  2022 core.schema
-r--r--r-- 1 root root  12006  54  2022 cosine.ldif
-r--r--r-- 1 root root  73995  54  2022 cosine.schema <---★これを追加
-r--r--r-- 1 root root   3594  54  2022 dsee.ldif
-r--r--r-- 1 root root   3374  54  2022 dsee.schema
-r--r--r-- 1 root root   4842  54  2022 duaconf.ldif
-r--r--r-- 1 root root  10389  54  2022 duaconf.schema
-r--r--r-- 1 root root   3500  54  2022 dyngroup.ldif
-r--r--r-- 1 root root   3523  54  2022 dyngroup.schema
-r--r--r-- 1 root root   3481  54  2022 inetorgperson.ldif
-r--r--r-- 1 root root   6267  54  2022 inetorgperson.schema <---★これを追加
-r--r--r-- 1 root root   2979  54  2022 java.ldif
-r--r--r-- 1 root root  13901  54  2022 java.schema
-r--r--r-- 1 root root   2082  54  2022 misc.ldif
-r--r--r-- 1 root root   2387  54  2022 misc.schema
-r--r--r-- 1 root root 121865  54  2022 msuser.ldif
-r--r--r-- 1 root root 113752  54  2022 msuser.schema
-r--r--r-- 1 root root   1218  54  2022 namedobject.ldif
-r--r--r-- 1 root root   1574  54  2022 namedobject.schema
-r--r--r-- 1 root root   6809  54  2022 nis.ldif
-r--r--r-- 1 root root   7640  54  2022 nis.schema <---★これを追加
-r--r--r-- 1 root root   3308  54  2022 openldap.ldif
-r--r--r-- 1 root root   1514  54  2022 openldap.schema
-r--r--r-- 1 root root   6904  54  2022 pmi.ldif
-r--r--r-- 1 root root  20467  54  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  919 23:41 .
drwxr-xr-x 6 root root 9  920 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  920 00:30  .
drwxr-xr-x 6 root root    9  920 00:27  ..
drwxr-x--- 3 root root    8  920 00:30 'cn=config'
-rw------- 1 root root 1164  920 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 ~]#


この記事が気に入ったらサポートをしてみませんか?