OpenLDAPをソースインストールする

#RHEL8へOpenLDAPをインストール
OSのバージョンを確認

```
# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.1 (Ootpa)
```
https://www.openldap.org/
から最新のソースコードをダウンロードしてマシンへ送信

```
# ls /tmp/openldap-2.5.5.tgz
/tmp/openldap-2.5.5.tgz
```
ソースコードを展開する

```
# cd /tmp

# tar xfz openldap-2.5.5.tgz

# cd openldap-2.5.5/
```
スクリプトを実行
`--with-tls`　TLS/SSLによる暗号通信を有効にします
`-enable-crypt` cryptパスワードを有効にします
`--with-cyrus-sasl` Cyrus SASLによるSASL認証を有効にします
`-enable-rwm` 書き換え機能(Rewrite/Remap)を有効にします

```
# ./configure --with-tls -enable-crypt --with-cyrus-sasl -enable-rwm
...
Please run "make depend" to build dependencies
```
ワーニングメッセージがなければコンパイルの実行

```
# make depend

# make
```
インストールの実行

```
# make install
```
設定ファイルの確認

```
# cat /usr/local/etc/openldap/slapd.conf |egrep -v '^#|^$'
include         /usr/local/etc/openldap/schema/core.schema	#①LDAPのデータベースで利用する属性を定義するスキーマファイルを読み込むます
pidfile         /usr/local/var/run/slapd.pid				#②slapdのプロセス番号を保管するファイルを指定します
argsfile        /usr/local/var/run/slapd.args				#③slapdが起動された引数の情報を保管するファイルを指定します
database config
database        mdb											#④LDAPデータを管理するデータベースを指定します
maxsize         1073741824									#⑤データベースで使用するデータベースサイズの最大サイズをバイト単位で指定します
suffix          "dc=my-domain,dc=com"						#⑥LDAPデータの識別名を指定します
rootdn          "cn=Manager,dc=my-domain,dc=com"			#⑦LDAPディレクトリ管理者(ルートDN)を設定します
rootpw          secret										#⑧ディレクトリ管理パスワード(ルートDNのパスワード)を設定します
directory       /usr/local/var/openldap-data				#⑨データベースを保管するディレクトリを指定します
index   objectClass     eq									#⑩インデックスを管理すべき属性を指定します
database monitor
```
⑥～⑧を変更

ルートDNのパスワード設定

```
# slappasswd
New password:
Re-enter new password:
{SSHA}904gvYMd0lwUC9Vtj5FzkG2DnbvRWOg4
※passwd
```
設定を変更

```
# cp -p /usr/local/etc/openldap/slapd.conf /usr/local/etc/openldap/slapd.conf.org

# vi /usr/local/etc/openldap/slapd.conf

# cat /usr/local/etc/openldap/slapd.conf
include         /usr/local/etc/openldap/schema/core.schema
pidfile         /usr/local/var/run/slapd.pid
argsfile        /usr/local/var/run/slapd.args
			##動的更新を行うための機能を有効にする設定
database config
rootdn   cn=admin,cn=config
access   to *
         by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage
         by * break
			##
database        mdb
maxsize         1073741824
suffix          "dc=example,dc=com"
rootdn          "cn=Manager,dc=example,dc=com"
rootpw          {SSHA}904gvYMd0lwUC9Vtj5FzkG2DnbvRWOg4
directory       /usr/local/var/openldap-data
index   objectClass     eq
```
設定ディレクトリへの変換

```
# cd /usr/local/etc/openldap/

# rm -rf slapd.d

# mkdir slapd.d

# mkdir -p /usr/local/var/openldap-data

# slaptest -u -v -f slapd.conf
config file testing succeeded

# slaptest -f slapd.conf -F slapd.d
mdb_db_open: database "dc=example,dc=com" cannot be opened: No such file or directory (2). Restore from backup!
backend_startup_one (type=mdb, suffix="dc=example,dc=com"): bi_db_open failed! (2)
slap_startup failed (test would succeed using the -u switch)

・エラーが表示されていても以下が作成されていれば問題なし
# ls slapd.d
'cn=config'  'cn=config.ldif'
```
syslogの設定

```
# cp -p /etc/rsyslog.conf /etc/rsyslog.conf.org

・最下行に追記
# vi /etc/rsyslog.conf
+#openldap slapd log
+local4.*                                                 /var/log/slapd

# systemctl restart rsyslog.service
```
slapdを起動

```
# /usr/local/libexec/slapd

# ps aux |grep slapd |grep -v grep
root     10608  0.0  0.1 1137884 5432 ?        Ssl  20:03   0:00 /usr/local/libexec/slapd

・ログを確認
# cat /var/log/slapd
```
slapdを停止

```
# cat /usr/local/var/run/slapd.pid
10608

# kill -TERM 10608

# ps aux |grep slapd |grep -v grep
```
自動起動の設定

```
# vi /lib/systemd/system/slapd.service

# cat /lib/systemd/system/slapd.service
[Unit]
Description=OpenLDAP Server
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/usr/local/var/run/slapd.pid
ExecStart=/usr/local/libexec/slapd -h "ldap:/// ldapi:///"
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -TERM $MAINPID

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload

・systemctlコマンドで起動と停止が可能になる
# systemctl start slapd.service

# systemctl stop slapd.service

# systemctl enable --now slapd.service
Created symlink /etc/systemd/system/multi-user.target.wants/slapd.service → /usr/lib/systemd/system/slapd.service.

# systemctl status slapd.service
● slapd.service - OpenLDAP Server
   Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2021-06-19 20:25:55 JST; 1min 38s ago
  Process: 10917 ExecStart=/usr/local/libexec/slapd -h ldap:/// ldapi:/// (code=exited, status=0/SUCCESS)
 Main PID: 10918 (slapd)
    Tasks: 2 (limit: 23376)
   Memory: 2.7M
   CGroup: /system.slice/slapd.service
           mq10918 /usr/local/libexec/slapd -h ldap:/// ldapi:///
```
基本データの投入

```
# mkdir -p /usr/local/etc/openldap/ldif

# vi /usr/local/etc/openldap/ldif/init.ldif

# cat /usr/local/etc/openldap/ldif/init.ldif
dn: dc=example,dc=com
objectClass: organization
objectClass: dcObject
o: example, INC.
dc: example

dn: cn=Manager,dc=example,dc=com
objectClass: organizationalRole
cn: Manager

# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f /usr/local/etc/openldap/ldif/init.ldif
Enter LDAP Password:
adding new entry "dc=example,dc=com"

adding new entry "cn=Manager,dc=example,dc=com"

# cat /usr/local/etc/openldap/ldif/people-service.ldif
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Services,dc=example,dc=com
objectClass: organizationalUnit
ou: Services

# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f /usr/local/etc/openldap/ldif/people-service.ldif
Enter LDAP Password:
adding new entry "ou=People,dc=example,dc=com"

adding new entry "ou=Services,dc=example,dc=com"

```

ここまで

#参考
・『入門LDAP/OpenLDAP ディレクトリサービス導入・運用ガイド 第3版』