2023年11月25日土曜日

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

OpenLDAPはRHEL 7までは、リポジトリからyumコマンドを使ってインストールすることができたが、RHEL 8になってからOpenLDAPは含まれないようになってしまい、RHELのサポート範囲外のソフトウェアとなってしまった。

RHEL 8以降は、OpenLDAPからRed Hat Directory Server (RHDS) を利用することができる。しかし、RHDSは389 Directory Serverがベースとなっており、OpenLDAPや構築方法や運用方法が異なってしまう。

以上より、RHEL 8以降においてもOpenLDAPが利用するため、本記事では、RHEL 9にOpenLDAPをソースからインストールする手順を記載する。

環境

今回は以下のOSに対してインストールを行った。OpenLDAPは本記事作成時のLTSリリースの最新版である2.5.16をダウンロードした。

  • OS : RHEL 9
  • OpenLDAP : 2.5.16

OpenLDAPのドメイン等の情報は以下とする。

設定項目 設定値
ドメイン dc=example,dc=com
RootDN cn=Manager,dc=example,dc=com
OU ou=group,dc=example,dc=com
グループ cn=ldapgrp,ou=group,dc=example,dc=com
ユーザ1 uid=user01,ou=group,dc=example,dc=com
ユーザ2 uid=user01,ou=group,dc=example,dc=com

OpenLDAPインストール

1. OpenLDAPのソースを入手

OpenLDAPのソースは以下からダウンロードできる。今回はLTSリリースである2.5.16をダウンロードした。

ファイル名はopenldap-2.5.16.tgzとなる。以下の通り解凍して、解凍後のディレクトリ内に移動しておく。

# tar zxf openldap-2.5.16.tgz
# cd openldap-2.5.16

2. 前提パッケージインストール

ビルド時にエラーや警告が表示されないように、以下前提パッケージのインストールを行う。

# dnf install gcc make cyrus-sasl-devel openssl-devel systemd-devel -y

3. Makefile作成

./configureを実行してMakefileを作成する。オプションは以下の通り設定する。なお、設定可能なオプションは他にも多数あり、./configure --helpにて確認することができる。

オプション 説明
--with-tls SSL/TLSを有効化。
--with-cyrus-sasl SASLによる認証を有効化。
--enable-crypt パスワードの暗号化を有効化。
--prefix=/usr インストールディレクトリを変更。デフォルトは/usr/local/となる。
--sysconfdir=/etc 設定ファイル配置ディレクトリを変更。デフォルトは/usr/local/etcとなる。

./configureの実行結果を以下に記載する。

# ./configure --with-tls --with-cyrus-sasl --enable-crypt --with-systemd --prefix=/usr --sysconfdir=/etc
Configuring OpenLDAP 2.5.16-Release ...
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking configure arguments... done
checking for cc... cc
checking for ar... ar
checking for strip... strip
checking whether make sets $(MAKE)... yes

~(中略)~

config.status: executing libtool commands
config.status: executing default commands
Making servers/slapd/backends.c
    Add config ...
    Add ldif ...
    Add monitor ...
    Add mdb ...
    Add relay ...
Making servers/slapd/overlays/statover.c
    Add syncprov ...
Please run "make depend" to build dependencies

Makefileが作成されていることを確認しておく。

# ls -l Makefile
-rw-r--r--. 1 root root 9256 10月 14 07:16 Makefile

4. 依存関係チェック

作成したMakfefileで依存関係をチェックする。特にエラーがなければ問題ない。

# make depend
Making depend in /root/openldap-2.5.16
  Entering subdirectory include
make[1]: ディレクトリ '/root/openldap-2.5.16/include' に入ります
Making ldap_config.h
make[1]: ディレクトリ '/root/openldap-2.5.16/include' から出ます

~(中略)~

  Entering subdirectory man8
make[3]: ディレクトリ '/root/openldap-2.5.16/doc/man/man8' に入ります
make[3]: 'depend' に対して行うべき事はありません.
make[3]: ディレクトリ '/root/openldap-2.5.16/doc/man/man8' から出ます

make[2]: ディレクトリ '/root/openldap-2.5.16/doc/man' から出ます

make[1]: ディレクトリ '/root/openldap-2.5.16/doc' から出ます

5. ビルド実行

ビルド実行する。1~2分程度で完了する。

#make
Making all in /root/openldap-2.5.16
  Entering subdirectory include
make[1]: ディレクトリ '/root/openldap-2.5.16/include' に入ります
make[1]: 'all' に対して行うべき事はありません.
make[1]: ディレクトリ '/root/openldap-2.5.16/include' から出ます

~(中略)~

make[3]: ディレクトリ '/root/openldap-2.5.16/doc/man/man8' から出ます

make[2]: ディレクトリ '/root/openldap-2.5.16/doc/man' から出ます

make[1]: ディレクトリ '/root/openldap-2.5.16/doc' から出ます

6. インストール

ビルド後、インストールを実行する。なお、インストール前にmake testコマンドでインストール前のテストを行うことができるので、安全にインストールを進めたい場合は実行すること。make testは数分~数十分時間を要する。

# make install
Making all in /root/openldap-2.5.16
  Entering subdirectory include
make[1]: ディレクトリ '/root/openldap-2.5.16/include' に入ります
make[1]: 'all' に対して行うべき事はありません.
make[1]: ディレクトリ '/root/openldap-2.5.16/include' から出ます

~(中略)~

installing slappasswd.8 in /usr/share/man/man8
installing slapschema.8 in /usr/share/man/man8
installing slaptest.8 in /usr/share/man/man8
make[3]: ディレクトリ '/root/openldap-2.5.16/doc/man/man8' から出ます

make[2]: ディレクトリ '/root/openldap-2.5.16/doc/man' から出ます

make[1]: ディレクトリ '/root/openldap-2.5.16/doc' から出ます

以上で、OpenLDAPのソースからのインストールは完了となる。続けて初期設定を行う。

OpenLDAP初期設定

1. 初期設定

設定ファイルをバックアップしておく。

# cd ~
# cp -R /etc/openldap ~/openldap.org
# ls -ld  ~/openldap.org
drwxr-xr-x. 4 root root 163 10月 14 07:37 /root/openldap.org

OpenLDAPの管理用ユーザーのパスワードをslappasswdを使って生成する。

# slappasswd
New password:
Re-enter new password:
{SSHA}7B1EpVxClcKpBwnlqG73YtB7IrUXhTLM

設定ファイルを以下の通り追記・変更を行う。includeではOpenLDAPで必要となるスキーマを追加している。olcSuffixolcRootDNはOpenLDAPのドメインに変更を行う。olcRootPWは先ほど生成したパスワードを指定する。

# vi /etc/openldap/slapd.ldif

~(中略)~

include: file:///etc/openldap/schema/core.ldif
include: file:///etc/openldap/schema/cosine.ldif  #<-★追記
include: file:///etc/openldap/schema/inetorgperson.ldif  #<-★追記
include: file:///etc/openldap/schema/nis.ldif  #<-★追記

~(中略)~

dn: olcDatabase=mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: mdb
olcDbMaxSize: 1073741824
olcSuffix: dc=example,dc=com  #<-★変更
olcRootDN: cn=Manager,dc=example,dc=com  #<-★変更
# Cleartext passwords, especially for the rootdn, should
# be avoided.  See slappasswd(8) and slapd-config(5) for details.
# Use of strong authentication encouraged.
olcRootPW: {SSHA}7B1EpVxClcKpBwnlqG73YtB7IrUXhTLM  #<-★変更

~(以下略)~

設定ファイルの前後でdiffした結果は以下の通り。

# diff /etc/openldap/slapd.ldif{,.default}
44,46d43
< include: file:///etc/openldap/schema/cosine.ldif
< include: file:///etc/openldap/schema/inetorgperson.ldif
< include: file:///etc/openldap/schema/nis.ldif
87,88c84,85
< olcSuffix: dc=example,dc=com
< olcRootDN: cn=Manager,dc=example,dc=com
---
> olcSuffix: dc=my-domain,dc=com
> olcRootDN: cn=Manager,dc=my-domain,dc=com
92c89
< olcRootPW: {SSHA}7B1EpVxClcKpBwnlqG73YtB7IrUXhTLM
---
> olcRootPW: secret

OpenLDAPのデータ格納に必要となるディレクトリを作成する。

# mkdir /usr/var/openldap-data
# mkdir /etc/openldap/slapd.d

slapaddコマンドで設定反映を行う。

# /usr/sbin/slapadd -v -n 0 -F /etc/openldap/slapd.d -l /etc/openldap/slapd.ldif
added: "cn=config" (00000001)
added: "cn=schema,cn=config" (00000001)
added: "cn={0}core,cn=schema,cn=config" (00000001)
added: "cn={1}cosine,cn=schema,cn=config" (00000001)
added: "cn={2}inetorgperson,cn=schema,cn=config" (00000001)
added: "cn={3}nis,cn=schema,cn=config" (00000001)
added: "olcDatabase={-1}frontend,cn=config" (00000001)
added: "olcDatabase={1}mdb,cn=config" (00000001)
added: "olcDatabase={2}monitor,cn=config" (00000001)
Closing DB...

2. OpenLDAP起動確認

まずは手動でOpenLDAPを起動し、正常に起動することを確認する。

# /usr/libexec/slapd -F /etc/openldap/slapd.d -h 'ldapi:/// ldap:/// ldaps:///'

起動後に、ldapsearchで問題なく情報の参照ができるか確認する。

# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts

# extended LDIF
#
# LDAPv3
# base <> with scope baseObject
# filter: (objectclass=*)
# requesting: namingContexts
#

#
dn:
namingContexts: dc=example,dc=com ←★設定したドメインが表示されることを確認

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

確認後、一度OpenLDAPを停止しておく。

# ps -ef | grep slapd | grep -v grep
root       69944       1  0 08:29 ?        00:00:00 /usr/libexec/slapd -F /etc/openldap/slapd.d -h ldapi:/// ldap:/// ldaps:///
# pkill slapd
# ps -ef | grep slapd | grep -v grep
#

3. systemdへ登録

RHELの場合、systemdでサービスの起動・停止を制御できた方が便利となる。以下の通り、systemdにOpenLDAPのサービスを登録するための設定ファイルを作成する。

# cat << 'EOF' > /etc/systemd/system/slapd.service
[Unit]
Description=OpenLDAP server
After=syslog.target network.target

[Service]
Type=forking
User=root
Group=root
PIDFile=/usr/var/run/slapd.pid
ExecStart=/usr/libexec/slapd -F /etc/openldap/slapd.d -h 'ldapi:/// ldap:/// ldaps:///'
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -TERM $MAINPID

[Install]
WantedBy=multi-user.target
EOF

上記ファイルを作成後、systemctlコマンドで起動停止が問題なくできることを確認しておく。

# systemctl daemon-reload
# systemctl start slapd
# systemctl enable slapd
# systemctl status slapd
● slapd.service - OpenLDAP server
     Loaded: loaded (/etc/systemd/system/slapd.service; enabled; preset: disabled)
     Active: active (running) since Sat 2023-10-14 08:43:52 JST; 8s ago
   Main PID: 70011 (slapd)
      Tasks: 2 (limit: 23166)
     Memory: 5.0M
        CPU: 8ms
     CGroup: /system.slice/slapd.service
             mq70011 /usr/libexec/slapd -F /etc/openldap/slapd.d -h "ldapi:/// ldap:/// ldaps:///"

10月 14 08:43:52 t1191rhel systemd[1]: Starting OpenLDAP server...
10月 14 08:43:52 t1191rhel slapd[70010]: @(#) $OpenLDAP: slapd 2.5.16 (Oct 14 2023 07:29:29) $
                                                  root@t1191rhel:/root/openldap-2.5.16/servers/slapd
10月 14 08:43:52 t1191rhel slapd[70011]: slapd starting
10月 14 08:43:52 t1191rhel systemd[1]: Started OpenLDAP server.

# systemctl stop slapd
# systemctl status slapd
○ slapd.service - OpenLDAP server
     Loaded: loaded (/etc/systemd/system/slapd.service; enabled; preset: disabled)
     Active: inactive (dead) since Sat 2023-10-14 18:28:23 JST; 1s ago
   Duration: 9h 44min 31.510s
    Process: 70408 ExecStop=/bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
   Main PID: 70011 (code=exited, status=0/SUCCESS)
        CPU: 14ms

10月 14 08:44:24 t1191rhel slapd[70011]: conn=1001 op=3 ADD dn="cn=ldapgrp,ou=group,dc=example,dc=com"
10月 14 08:44:24 t1191rhel slapd[70011]: conn=1001 op=3 RESULT tag=105 err=0 qtime=0.000010 etime=0.000472 text=
10月 14 08:44:24 t1191rhel slapd[70011]: conn=1001 op=4 UNBIND
10月 14 08:44:24 t1191rhel slapd[70011]: conn=1001 fd=13 closed
10月 14 18:28:23 t1191rhel systemd[1]: Stopping OpenLDAP server...
10月 14 18:28:23 t1191rhel slapd[70011]: daemon: shutdown requested and initiated.
10月 14 18:28:23 t1191rhel slapd[70011]: slapd shutdown: waiting for 0 operations/tasks to finish
10月 14 18:28:23 t1191rhel slapd[70011]: slapd stopped.
10月 14 18:28:23 t1191rhel systemd[1]: slapd.service: Deactivated successfully.
10月 14 18:28:23 t1191rhel systemd[1]: Stopped OpenLDAP server.

起動・停止が問題なくできることが確認できたら、OpenLDAPは起動させておこう。

# systemctl start slapd

4. ユーザー登録確認

ここからは実際にOpenLDAPにグループやユーザーの登録を行ってみよう。

まずは、ドメイン、OU、グループの登録を行うためのLDIFファイルを作成する。

# cat << EOF > base.ldif
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.

dn: ou=group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group

dn: cn=ldapgrp,ou=group,dc=example,dc=com
objectClass: posixGroup
gidNumber: 10000
cn: ldapgrp
EOF

ldapaddコマンドで登録を行う。パスワードは初期設定時に生成したパスワードとなる。

# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f base.ldif
Enter LDAP Password:
adding new entry "dc=example,dc=com"

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

adding new entry "cn=ldapgrp,ou=group,dc=example,dc=com"

次にユーザー登録を行う。以下の通りLDIFファイルを作成する。

# cat << EOF > user.ldif
dn: uid=user01,ou=group,dc=example,dc=com
uid: user01
cn: Hoge Hoge
sn: user01
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword: {SSHA}7B1EpVxClcKpBwnlqG73YtB7IrUXhTLM
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10000
homeDirectory: /home/user01

dn: uid=user02,ou=group,dc=example,dc=com
uid: user02
cn: Hoge Hoge
sn: user02
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword: {SSHA}7B1EpVxClcKpBwnlqG73YtB7IrUXhTLM
loginShell: /bin/bash
uidNumber: 10002
gidNumber: 10000
homeDirectory: /home/user02
EOF

ldapaddコマンドで登録を行う。

# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f user.ldif
Enter LDAP Password:
adding new entry "uid=user01,ou=group,dc=example,dc=com"

adding new entry "uid=user02,ou=group,dc=example,dc=com"

最後に、ldapsearchコマンドで登録状況を確認して完了となる。

# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'dc=example,dc=com'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.

dn: ou=group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group

dn: cn=ldapgrp,ou=group,dc=example,dc=com
objectClass: posixGroup
gidNumber: 10000
cn: ldapgrp

dn: uid=user01,ou=group,dc=example,dc=com
uid: user01
cn: Hoge Hoge
sn: user01
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword:: e1NTSEF9WFhY772eKOecgeeVpSnvvZ5YWFg=
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10000
homeDirectory: /home/user01

dn: uid=user02,ou=group,dc=example,dc=com
uid: user02
cn: Hoge Hoge
sn: user02
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword:: e1NTSEF9WFhY772eKOecgeeVpSnvvZ5YWFg=
loginShell: /bin/bash
uidNumber: 10002
gidNumber: 10000
homeDirectory: /home/user02

以上で、RHEL 9にOpenLDAPをソースからインストールする手順は完了となる。

0 件のコメント:

コメントを投稿

人気の投稿