ラベル OpenLDAP の投稿を表示しています。 すべての投稿を表示
ラベル OpenLDAP の投稿を表示しています。 すべての投稿を表示
2023年12月2日土曜日

ソースからインストールしたOpenLDAPのSSL有効化手順

先日、RHEL 9にOpenLDAPをソースからインストールする手順を記載した。

上記手順ではLDAPのみ有効としており、通信が暗号化されていない。LDAPでは通信を暗号化する方法としてLDAPS (LDAP over SSL/TLS) があり、OpenLDAPにおいても設定を有効化することでLDAPS通信を利用できる。

本記事では、ソースからインストールOpenLDAPに対してSSLを有効化する手順を記載する。

環境

今回は以下の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をソースからインストール

OpenLDAPをソースからインストールする手順は、以下記事の通り実施する。

  • URL

OpenLDAP SSL有効化手順

1. 証明書作成

OpenLDAPをSSLするための公開鍵と秘密鍵を作成する。作成した鍵は/etc/openldap/certs/に配置するため、あらかじめ移動しておく。

# cd /etc/openldap/certs/

秘密鍵を作成する。

# openssl genrsa 2048 > ldaps.key

秘密鍵をもとにCSRを作成する。

# openssl req -new -key ldaps.key > ldaps.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:LDAPS
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

公開鍵に埋め込むSAN (サブジェクト代替名) の情報をテキストファイルで作成しておく。今回はOpenLDAPのドメイン (example.com) とOpenLDAPサーバのIPアドレス (192.168.11.191) で設定した。

# cat << EOF > san.txt
subjectAltName = DNS:*.example.com, IP:192.168.11.191
EOF

最後にCSRとSANの情報を用いて公開鍵を作成する。

# openssl x509 -days 3650 -req -signkey ldaps.key -in ldaps.csr -out ldaps.crt -extfile san.txt
Certificate request self-signature ok
subject=C = JP, ST = Tokyo, L = Default City, O = Default Company Ltd, CN = LDAPS

最終的に以下4つのファイルが作成される。

# ls -l
合計 16
-rw-r--r--. 1 root root 1302 10月 29 08:11 ldaps.crt
-rw-r--r--. 1 root root  997 10月 29 08:10 ldaps.csr
-rw-r--r--. 1 root root 1704 10月 29 08:10 ldaps.key
-rw-r--r--. 1 root root   54 10月 29 08:07 san.txt

2. SSL有効化用LDIFファイルを作成

OpenLDAPの設定は、LDIF (LDAP Interchange Format)と呼ばれる設定ファイルを読み込ませることで行う。

まずは、以下の通りLDIFファイルを作成する。

# cd ~
# cat << EOF > ssl.ldif
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/ldaps.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/ldaps.key
EOF

反映はslapmodifyコマンドで行う。

# /usr/sbin/slapmodify -v -n 0 -F /etc/openldap/slapd.d -l ssl.ldif
modify: "cn=config" (00000001)
Closing DB...

なお、ldapaddコマンドではInsufficient access (50)で失敗するため設定変更できないため注意しよう。

# ldapadd -Y EXTERNAL -H ldapi:// -f ssl.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
ldap_modify: Insufficient access (50)

3. systemdの設定を修正

systemdでOpenLDAPのサービス起動時のコマンドにおいて、LDAPSを受け付けするよう設定追加を行う。

# vi /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:///' ←★「ldaps:///」を追加
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -TERM $MAINPID

[Install]
WantedBy=multi-user.target

設定を反映させる。

# systemctl daemon-reload
# systemctl restart slapd

反映後、LDAPSのポート番号である636が開放されていることを確認する。

# ss -nl | egrep '389|636'
tcp   LISTEN 0      2048        0.0.0.0:389         0.0.0.0:*
tcp   LISTEN 0      2048        0.0.0.0:636         0.0.0.0:*
tcp   LISTEN 0      2048           [::]:389            [::]:*
tcp   LISTEN 0      2048           [::]:636            [::]:*

4. LDP.exeを使った確認

実際に、外部からアクセスできることをWindows ServerのLDP.exeを利用して確認する。なお、LDP.exeは、役割管理ツールの「AD DSおよびAD LDSツール」に含まれる

なお、LDAPSはそのままではLDP.exeにて接続することができず、OpenLDAPサーバにて作成したSSLサーバ証明書の公開鍵であるldaps.crtを「信頼されたルート証明機関」として登録が必要となる。

/etc/openldap/certs/ldaps.crtLDP.exeを実行するサーバにダウンロードし、ファイルをダブルクリックすると証明書の情報を確認することができ、「証明書のインストール」を選択することで「証明書のインポートウィザード」を開始できる。

インポートウィザードでは証明書ストアにて「信頼されたルート証明機関」を選択する。

セキュリティ警告が表示される場合があるが、自己署名証明書による証明書エラーとなることから、そのまま「はい」を選択する。

証明書をインポートしたのち、再度LDP.exeにて接続すると、以下の通りSSLによる接続に成功する。

以上で、ソースからインストールOpenLDAPに対してSSLを有効化する手順は完了となる。

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をソースからインストールする手順は完了となる。

2021年12月4日土曜日

OpenLDAP入門③ (LinuxのSSSDを使ってOpenLDAPと認証連携する) 

前回及び前々回の記事において、OpenLDAPによるLDAPサーバ構築とLDAPS有効化を実現できた。今回は、実際にOpenLDAPサーバーに対してLDAPクライアントから認証を行うことにする。

RHELではLDAPクライアントとして、SSSD (System Security Services Daemon) と呼ばれるソフトウェアを利用できる。SSSDを使うことで、OpenLDAPにて登録したユーザを用いてOSへのログインを行うことができる。

本記事では、LinuxのSSSDを使ってOpenLDAPサーバと認証連携する手順を記載する。

環境

RHEL 7にてOpenLDAPサーバ (LDAPS有効化済み) を構築済みの環境において、同じくRHEL 7にてSSSDの設定を行い認証連携を行う。なお、RHEL 8においても一部手順が異なるだけで、ほぼ本記事に記載の手順でSSSDの設定は可能となる (手順が異なる箇所については本記事でも言及する)。

  • LDAPクライアントOS : Red Hat Enterprise Linux 7.7
  • OpenLDAPサーバOS : Red Hat Enterprise Linux 7.7
  • OpenLDAP : 2.4.44

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

SSSD設定手順

1. SSSDをインストール

yumを用いてSSSDをインストールする。openldap-clientsはLDAP通信が問題なくできることの確認のためにインストールしておく。oddjob-mkhomedirはLDAP認証したユーザのホームディレクトリを自動生成するサービスとなる。

# yum install openldap-clients sssd sssd-ldap oddjob-mkhomedir -y

2. OpenLDAPサーバのサーバ証明書をコピー

LDAPSを使用する場合は、OpenLDAPサーバのサーバ証明書を登録しておく必要がある。前回記事で作成したldaps.crtを以下の通りコピーして配置する。

# cp ldaps.crt /etc/openldap/certs/core-dirsrv.ca.pem

3. OpenLDAPクライアントから認証情報を取得できることを確認

SSSDの設定を行う前に、ldapsearchコマンドでOpenLDAPサーバと問題なく通信できることを確認する。

OpenLDAPのクライアントの設定を行う前にldapsearchコマンドを実行すると、Can't contact LDAP serverのように通信に失敗することがわかる。

# ldapsearch -x -D "uid=user01,ou=group,dc=example,dc=com" -w password -b "dc=example,dc=com" -H "ldaps://192.168.11.117/"
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

以下の通りOpenLDAPのクライアントの設定を追加する。

# cat << EOF >> /etc/openldap/ldap.conf
URI ldap://192.168.11.117/
BASE ou=group,dc=example,dc=com
TLS_CACERT /etc/openldap/certs/core-dirsrv.ca.pem
EOF

再度ldapsearchコマンドを実行し、以下の通り登録されているグループやユーザの情報が出力されればOKとなる。

# ldapsearch -x -D "uid=user01,ou=group,dc=example,dc=com" -w password -b "dc=example,dc=com" -H "ldaps://192.168.11.117/"
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# example.com
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.

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

~(以下略)~

4. SSSDを設定

それではSSSDの設定を行う。SSSDの設定ファイルはsssd.confとなるが、このファイルはデフォルトで存在しないため、以下の通り一から作成する。

# cat << EOF >> /etc/sssd/sssd.conf
[domain/default]
id_provider = ldap
autofs_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://192.168.11.117/
ldap_search_base = ou=group,dc=example,dc=com
ldap_id_use_start_tls = True
cache_credentials = True
ldap_tls_cacertdir = /etc/openldap/certs
ldap_tls_cacert = /etc/openldap/certs/core-dirsrv.ca.pem
ldap_tls_reqcert = hard

[sssd]
services = nss, pam, autofs
domains = default

[nss]
homedir_substring = /home
EOF

この設定ファイルは以下の通りパーミッションを設定することがセオリーのようなので、以下コマンドで設定しておこう。

# chmod 600 /etc/sssd/sssd.conf
# chown root:root /etc/sssd/sssd.conf

5. SSSDの有効化

SSSDの設定ファイルを作成したら、認証プロバイダーとしてSSSDを使用できるようにする。今回はRHEL 7がクライアントとなるため、authconfigコマンドにて設定する。RHEL 8の場合はauthselectコマンドを利用するため注意すること。

以下、RHEL 7とRHEL 8の設定コマンドを記載する。

RHEL 7の場合

# authconfig --update --enablesssd --enablesssdauth --enablemkhomedir

↓★確認コマンド。pam_sssとpam_mkhomedirがenableになっていることを確認
# authconfig --test | egrep 'pam_sss|pam_mkhomedir'
pam_sss is enabled by default
pam_mkhomedir or pam_oddjob_mkhomedir is enabled (umask=0077)

RHEL 8の場合

# authselect select sssd with-mkhomedir --force
プロファイル "sssd" が設定されました。
以下の nsswitch マップはプロファイルで上書きされます:
- passwd
- group
- netgroup
- automount
- services

Make sure that SSSD service is configured and enabled. See SSSD documentation for more information.

- with-mkhomedir is selected, make sure pam_oddjob_mkhomedir module
  is present and oddjobd service is enabled
  - systemctl enable oddjobd.service
  - systemctl start oddjobd.service

6. SSSDを再起動

ここで一度SSSDを再起動して、各種設定を反映させる。

# systemctl restart sssd oddjobd
# systemctl enable sssd oddjobd

今回の手順では問題は発生しないはずだが、SSSD再起動時に、以下のようなstatus=4/NOPERMISSIONのエラーが発生することがある。

# systemctl restart sssd oddjobd
Job for sssd.service failed because the control process exited with error code. See "systemctl status sssd.service" and "journalctl -xe" for details.
# systemctl status sssd -l

~(中略)~

10月 24 06:26:21 localhost.localdomain systemd[1]: Starting System Security Services Daemon...
10月 24 06:26:22 localhost.localdomain systemd[1]: sssd.service: main process exited, code=exited, status=4/NOPERMISSION
10月 24 06:26:22 localhost.localdomain systemd[1]: Failed to start System Security Services Daemon.
10月 24 06:26:22 localhost.localdomain systemd[1]: Unit sssd.service entered failed state.
10月 24 06:26:22 localhost.localdomain systemd[1]: sssd.service failed.

このエラーの原因はsssd.confが正しく記載されていないことが原因となる。authconfigコマンドにて、他オプションを指定して実行した場合は、sssd.confの一部設定が消えることがあるようなので、再度記載に問題がないか確認したうえで、サービス再起動をすること。私の遭遇した事象ではdomainsの設定が本来defaultであるところが空白になっており、サービス再起動に失敗していた。

[sssd]
services = nss, pam, autofs
domains =  ←★本来ここがdefaultになっている必要あり

7. LDAP登録ユーザにてログイン確認

最後に実際にSSHを用いてLDAP登録ユーザでログインできることを確認する。

Tera Termを用いてLDAPに登録されているuser01でログインする。なお、ドメイン名 (本環境ではexample.com) は不要となる。

特に設定に問題がなければ、以下の通りホームディレクトリが自動作成され、ログインに成功する。UIDやGIDを確認するとOpenLDAPサーバにて登録された番号となっていることも確認できる。

Creating home directory for user01.
Last login: Sat Oct 23 20:41:07 2021 from t1081w219.intrat.local
[user01@localhost ~]$ pwd
/home/user01
[user01@localhost ~]$ id
uid=10001(user01) gid=10000(ldapgrp) groups=10000(ldapgrp) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

以上で、SSSDを用いてにてOpenLDAPサーバと認証連携する手順は完了となる。

2021年11月27日土曜日

OpenLDAP入門② (OpenLDAPでLDAPSを有効化する)

前回、RHEL 7にOpenLDAPをインストールして、OpenLDAPサーバを構築する手順を記載した。しかし、LDAPは通信が暗号化されておらず、認証情報が平文でネットワークに流れてしまう。そこで、LDAPをSSLで暗号化するLDAPS (LDAP over SSL) を使い通信の暗号化を行うことで、セキュリティ強化を図る。

本記事では、OpenLDAPサーバに設定追加を行いLDAPSにて通信できるように構成するための手順を記載する。

環境

RHEL 7にてOpenLDAPサーバを構築済みの環境から、LDAPSを有効にする手順を記載する。OpenLDAPサーバの構築手順は前回記事を参照いただきたい。

  • OS : Red Hat Enterprise Linux 7.7
  • OpenLDAP : 2.4.44

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のLDAPS有効化手順

1. LDAPS用のサーバ証明書を作成

LDAPSはLDAP over SSLの略である通り、SSLサーバ証明書の作成が必要となる。OpenLDAPのサーバ証明書は/etc/openldap/certs/に配置する。

まず、SSLサーバ証明書に必要となるSAN (Subject Alternative Name) を設定するためのファイルを作成する。今回は、以下の通り作成した。

# cd /etc/openldap/certs/
# cat << EOF > san.txt
subjectAltName = DNS:*.example.com, IP:192.168.11.117
EOF

サーバ証明書は、以下コマンドで作成する。

# openssl genrsa 2048 > ldaps.key
# openssl req -new -key ldaps.key > ldaps.csr
# openssl x509 -days 3650 -req -signkey ldaps.key -in ldaps.csr -out ldaps.crt -extfile san.txt

実際のコマンド実行結果は以下の通り。CSR作成時に証明書作成に必要な情報を対話式で入力する。

# openssl genrsa 2048 > ldaps.key
Generating RSA private key, 2048 bit long modulus
..............................................................+++
..................+++
e is 65537 (0x10001)

# openssl req -new -key ldaps.key > ldaps.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP ←★JPを入力
State or Province Name (full name) []:Tokyo ←★任意の都市名を入力
Locality Name (eg, city) [Default City]: ←★そのままEnter
Organization Name (eg, company) [Default Company Ltd]: ←★そのままEnter
Organizational Unit Name (eg, section) []: ←★そのままEnter
Common Name (eg, your name or your server's hostname) []:LDAPS ←★任意の名称を入力。今回はLDAPSと入力
Email Address []: ←★そのままEnter

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ←★そのままEnter
An optional company name []: ←★そのままEnter

# openssl x509 -days 3650 -req -signkey ldaps.key -in ldaps.csr -out ldaps.crt -extfile san.txt
Signature ok
subject=/C=JP/ST=Tokyo/L=Default City/O=Default Company Ltd/CN=LDAPS
Getting Private key

2. LDAPS有効化に必要な設定を追加

OpenLDAPサーバの設定ファイルに以下の通りLDAPSに必要となる設定を追加する。

# cp /etc/sysconfig/slapd{,.org}
# vi /etc/sysconfig/slapd
SLAPD_URLS="ldapi:/// ldap:/// ldaps:///" ←★「ldaps:///」を追加

次にssl.ldifというLDIFファイルを作成し、LDAPS用の証明書及び秘密鍵となるファイルの指定を行う。このLDIFファイルをldapaddコマンドにて設定追加する。

# cd ~
# cat << EOF > ssl.ldif
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/ldaps.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/ldaps.key
EOF

# ldapadd -Y EXTERNAL -H ldapi:// -f ssl.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

3. OpenLDAPを再起動

ここまで設定したら、OpenLDAPを再起動し、LDAPSの636ポートが開放されることを確認する。

# systemctl restart slapd

# ss -nl | egrep '389|636'
tcp    LISTEN     0      128       *:636                   *:*
tcp    LISTEN     0      128       *:389                   *:*
tcp    LISTEN     0      128    [::]:636                [::]:*
tcp    LISTEN     0      128    [::]:389                [::]:*

4. LDP.exeを使った確認

LDAPSはそのままではLDP.exeにて接続することができず、OpenLDAPサーバにて作成したSSLサーバ証明書の公開鍵であるldaps.crtを「信頼されたルート証明機関」として登録が
必要
となる。

/etc/openldap/certs/ldaps.crtLDP.exeを実行するサーバにダウンロードし、ファイルをダブルクリックすると証明書の情報を確認することができ、「証明書のインストール」を選択することで「証明書のインポートウィザード」を開始できる。

インポートウィザードでは証明書ストアにて「信頼されたルート証明機関」を選択する。

セキュリティ警告が表示される場合があるが、自己署名証明書による証明書エラーとなることから、そのまま「はい」を選択する。

証明書をインポートしたのち、再度LDP.exeにて接続すると、以下の通りSSLによる接続に成功する。

以上でOpenLDAPでLDAPSを有効化する手順は完了となる。次回は、LinuxのSSSDを使って本サーバに対して認証連携を行うことにする。

2021年11月20日土曜日

OpenLDAP入門① (OpenLDAP初期構築手順)

Red Hat Enterprise Linux 7 (RHEL7) で利用できるOpenLDAPは、ユーザやパスワード情報を一元管理し、認証機能を提供することができる。ただし、Red Hat Enterprise Linux 8 (RHEL8) になってから、OpenLDAPは非サポートとなり、代わりに「Red Hat Directory Server (RHDS)」が利用できるようになった。

なお、RHEL 8でもしOpenLDAPを利用したい要件がある場合の選択肢としては、OSSTech製のOpenLDAPを利用するという方法もある。

そのような状況ではあるが、本記事では純粋な「RHEL 7のOpenLDAP」を使ってLDAPサーバを構築する手順を記載する。内容が多いため、以下の3回に分けて記載する。

環境

前述した通り、今回はRHEL 7のOpenLDAPを構築する。

  • OS : Red Hat Enterprise Linux 7.7
  • OpenLDAP : 2.4.44

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を使うためには、yumを使用してopenldap-serversopenldap-clientsをインストールするだけでよい。

# yum install openldap-servers openldap-clients -y

~(中略)~

インストール:
  openldap-clients.x86_64 0:2.4.44-21.el7_6
  openldap-servers.x86_64 0:2.4.44-21.el7_6

完了しました!

特に依存関係もないため、rpmを使って直接インストールすることも可能。RHEL 7のインストールメディアからインストールする場合は、以下の通り実行する。

# rpm -ivh openldap-servers-2.4.44-21.el7_6.x86_64.rpm
# rpm -ivh openldap-clients-2.4.44-21.el7_6.x86_64.rpm

2. OpenLDAPの起動

インストールをしたら、とりあえずOpenLDAPを起動させる。

# systemctl start slapd
# systemctl enable slapd

3. 管理用パスワードの設定

いよいよOpenLDAPの設定を実施していく。まず、設定ファイルをディレクトリ丸ごとバックアップしておこう。

# cp -pr /etc/openldap/slapd.d{,_20211016}
# ls -ld /etc/openldap/slapd.d*
drwxr-x---. 3 ldap ldap 45  7月 18 14:49 /etc/openldap/slapd.d
drwxr-x---. 3 ldap ldap 45  7月 18 14:49 /etc/openldap/slapd.d_20210718

OpenLDAPはldapaddldapmodifyldapdeleteコマンドを使用して設定する。これらのコマンドに「LDIF」と呼ばれるLDAP用の設定情報が記載されたファイルを読み込ませることで、直接設定ファイルを編集しなくとも設定することができる

今回はldapaddコマンドにて設定を行う。構文は以下と覚えておく。

ldapadd -Y EXTERNAL -H ldapi:/// -f [ファイル名].ldif

-Y EXTERNAL : root作業時のパスワード入力をスキップ
-H ldapi:/// : ローカルのLDAPに対する作業

まずOpenLDAPに必要となる管理用パスワードを設定する。パスワードは平文ではなくハッシュ値にてLDIFファイルに記載する。パスワードのハッシュ値を生成するためのコマンドとして、slappasswdが用意されているため、こちらを利用してパスワードのハッシュ値を生成する。

生成されたパスワードはソルト付きのSHA-1のハッシュ値となり、{SSHA}という文字が先頭に付いた32文字となる。

# slappasswd
New password:
Re-enter new password:
{SSHA}XXX~(省略)~XXX

以下の通りLDIFファイルを作成して、ldapaddコマンドにて設定する。

# cat << EOF > rootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootDN
olcRootDN: cn=config
-
add: olcRootPW
olcRootPW: {SSHA}XXX~(省略)~XXX
EOF

# ldapadd -Y EXTERNAL -H ldapi:/// -f rootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

設定内容を確認するコマンドとしてはldapsearchを使う。指定するオプションは以下の通り。

オプション 説明
-LLL LDIF バージョンを表示させないため、Lオプションを3つ付与する。
-b LDAPの検索位置を指定する。

実際に確認した結果は以下の通りとなる。

# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'olcDatabase={0}config,cn=config'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth" manage by * none
olcRootDN: cn=config
olcRootPW: {SSHA}XXX~(省略)~XXX

4. 管理者パスワードの設定

管理者パスワードとして、monitorとhdbのパスワードを設定する。monitorはモニターデータベース、hdbはLDAPのデータベース本体と理解しておこう。

今回、それぞれの管理ユーザは「cn=Manager,dc=example,dc=com」で設定する。この管理ユーザをRootDNと呼ぶ。

以下の通りLDIFファイルを作成して、ldapaddコマンドにて設定する。

# cat << EOF > hdbpw.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=example,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com
-
replace: olcRootDN
olcRootDN: cn=Manager,dc=example,dc=com
-
add: olcRootPW
olcRootPW: {SSHA}XXX~(省略)~XXX
EOF

# ldapadd -Y EXTERNAL -H ldapi:/// -f hdbpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

5. スキーマの追加

LDAPで利用するスキーマを設定する。スキーマは、cosine.ldifinetorgperson.ldifnis.ldifを登録すればLDAPサーバとして利用できる。

登録コマンドは以下の通り。

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

実際の実行結果は以下の通り。

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"

6. BaseDN、OU、グループを登録

ここまで設定すれば、LDAPサーバにBaseDNや、OU、グループが登録できる。

設定項目 設定値
ドメイン dc=example,dc=com
OU ou=group,dc=example,dc=com
グループ cn=ldapgrp,ou=group,dc=example,dc=com

以下の通り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コマンドを利用することは変わらないが、少しオプションが異なり、先ほど設定した管理者 (cn=Manager,dc=example,dc=com) を指定して登録を行う点に注意する。

# ldapadd -x -D "cn=Manager,dc=example,dc=com" -w '[RootDNのパスワード]' -f base.ldif
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"

7. ユーザを登録

ユーザを登録する。

設定項目 設定値
ユーザ1 uid=user01,ou=group,dc=example,dc=com
ユーザ2 uid=user01,ou=group,dc=example,dc=com

以下の通りLDIFファイルを作成して、ldapaddコマンドにて設定する。

# 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}XXX~(省略)~XXX
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}XXX~(省略)~XXX
loginShell: /bin/bash
uidNumber: 10002
gidNumber: 10000
homeDirectory: /home/user02
EOF

# ldapadd -x -D "cn=Manager,dc=example,dc=com" -w '[RootDNのパスワード]' -f user.ldif
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 'ou=group,dc=example,dc=com'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: ou=group,dc=example,dc=com ←★OU「group」の情報
objectClass: organizationalUnit
ou: Group

dn: cn=ldapgrp,ou=group,dc=example,dc=com ←★グループ「ldapgrp」の情報
objectClass: posixGroup
gidNumber: 10000
cn: ldapgrp

dn: uid=user01,ou=group,dc=example,dc=com ←★ユーザ「user01」の情報
uid: user01
cn: Hoge Hoge
sn: user01
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword:: e1NTSEF9TFdVQXZyNzUvQlBpUDJ2MWZ5amxFdDlEVlB0d0lVYmU=
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10000
homeDirectory: /home/user01

dn: uid=user02,ou=group,dc=example,dc=com ←★ユーザ「user02」の情報
uid: user02
cn: Hoge Hoge
sn: user02
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword:: e1NTSEF9TFdVQXZyNzUvQlBpUDJ2MWZ5amxFdDlEVlB0d0lVYmU=
loginShell: /bin/bash
uidNumber: 10002
gidNumber: 10000
homeDirectory: /home/user02

8. LDP.exeを使った確認

ここまでの設定を行ったことで、OpenLDAPサーバに対してLDAPによる接続が可能となる。

実際に、外部からアクセスできることをWindows ServerのLDP.exeを利用して確認する。なお、LDP.exeは、役割管理ツールの「AD DSおよびAD LDSツール」に含まれる。

「ファイル名を指定して実行」にてldpを入力し「OK」を押すと、LDP.exeが起動する。

「ファイル」→「接続」を選択し、OpenLDAPサーバのIPアドレスとポート番号「389」を指定する。また、今回はLDAPSを使用しないため、SSLのチェックを外しておく。

次に、「表示」→「ツリー」を選択し、「ou=group,dc=example,dc=com」を入力する。

以下の通りOUに登録されているグループとユーザが表示されれば、問題なくOpenLDAPの設定は完了となる。

なお、バインドせずともOpenLDAPサーバに登録されているグループとユーザが表示される理由は、LDAPのデータベースに対してアクセス権を設定していない場合は、デフォルトで匿名ユーザの参照権限が有効となるためである。権限の設定方法は、別記事で紹介することとし、今回は割愛する。

以上で、OpenLDAPサーバの構築は完了となる。次回以降は今回構築したOpenLDAPサーバに対して、LDAPSの有効化やLinuxのSSSDを使って認証連携を行うことにする。

参考

人気の投稿