Ubuntu20.04 で OpenLDAP サーバを構築してみる

# 本記事の目的

Ubuntu 20.04 上に OpenLDAP を構築してその動作確認をおこなったので、整理目的で記事投稿。
    目指すところは・・・以下のように、LDAP サーバーにおける登録情報を元に、LDAP クライアントにログインできるようにしたい。

![environment.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2902882/6cb716bc-30a4-da8d-afe0-4646005b2522.png)

LDAP の構成は以下のようになる。

![ldap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2902882/2ea08c79-36d2-ad58-d6ad-b1f15aa093b4.png)

なお、手順については以下を参照させていただいてます。

https://qiita.com/cffnpwr/items/be903005e291d0ece514

LDAP サーバー・クライアントともに、環境は以下の通り。
<pre>$ lsb_release -a

Distributor ID: Ubuntu
Description:    Ubuntu 20.04.5 LTS
Release:        20.04
Codename:       focal
</pre>

# 手順

## LDAP サーバーでの手順

* slapd と ldap-utils をインストール
<pre>$ sudo apt install -y slapd ldap-utils</pre>
* ドメイン名等を設定する。
    * ここではドメイン名を hoge.example.com、組織名を hoge としておく。
<pre>$ sudo dpkg-reconfigure slapd

Omit OpenLDAP server configuration?: No

DNS domain name?: hoge.example.com

Organization name?: hoge

Administrator password?: [管理者パスワード(インストール時に設定したものを再設定)]
</pre>

* グループの追加
    * 以下の内容を記載のうえ、base.ldif ファイルを作成する。
<pre>$ cd /etc/ldap/
$ sudo nano base.ldif

---以下、base.ldif の内容---
dn: ou=people,dc=hoge,dc=example,dc=com
objectClass: organizationalUnit
ou: people
</pre>
* 以下コマンドにて設定を追加する
<pre> $ ldapadd -x -D cn=admin,dc=hoge,dc=example,dc=com -W -f base.ldif

<想定出力結果>
Enter LDAP Password:
adding new entry "ou=people,dc=hoge,dc=example,dc=com"
</pre>
* ユーザ用のパスワードを生成する
    * パスワードは平文ではなくハッシュ値にてファイルに記載する。パスワードのハッシュ値を生成するためのコマンドとして、slappasswd があるので活用させてもらう。
<pre>$ slappasswd
New password:
Re-enter new password:
{SSHA}xxxxxxxxxxxxxxxxxxxxxxx
</pre>
* ldapuser.ldif ファイルを作成する
    * userPassword については、前手順で作成した {SSHA}... ではじまる文字列を入力する
<pre>$ sudo nano ldapuser.ldif

---以下、ldapuser.ldif の内容---
dn: uid=user001,ou=people,dc=hoge,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: user001
sn: user001
userPassword: {SSHA}xxxxxxxxxxxxxxxxxxxxxxx
loginShell: /bin/bash
uidNumber: 2000
gidNumber: 2000
homeDirectory: /home/user001

dn: cn=user001,ou=groups,dc=hoge,dc=example,dc=com
objectClass: posixGroup
cn: ubuntu
gidNumber: 2000
memberUid: user001
</pre>
* 設定の追加
<pre>$ ldapadd -x -D cn=admin,dc=hoge,dc=example,dc=com -W -f ldapuser.ldif

<想定出力結果>
Enter LDAP Password:
adding new entry "uid=user001,ou=people,dc=hoge,dc=example,dc=com"

adding new entry "cn=user001,ou=groups,dc=hoge,dc=example,dc=com"
</pre>

## LDAP クライアントでの手順

* LDAP クライアントのインストール
<pre>$ sudo apt install -y libnss-ldapd libpam-ldapd ldap-utils
</pre>
インストール時の質問は以下の通り回答
<pre>LDAP server Uniform Resource Identifier: ldap://192.168.56.102 # 構築した LDAP サーバーの IP アドレス

Distinguished name of the search base: dc=hoge,dc=example,dc=com

Name services to configure: [passwd, group, shadow をチェック]
</pre>
* ログイン時に自動でホームディレクトリが作成されるよう、以下を追記する。


<pre>$ sudo nano /etc/pam.d/common-session 

# 最終行に以下を追記
session optional        pam_mkhomedir.so skel=/etc/skel umask=077</pre>

※ 参考

https://www.server-world.info/query?os=Ubuntu_20.04&p=openldap&f=3

* 最後に再起動
<pre>$ sudo reboot
</pre>

## 動作確認

user001 で LDAP クライアントにログインできるかを確認する。
<pre> ssh user001@192.168.56.101
</pre>
うまくいってれば以下みたいにログインできる。
※ group ID でエラー出てしまっているが、LDAP の動作確認としては十分と考えここではスルーさせていただきます。。
<pre>Creating directory '/home/user001'.
Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.15.0-56-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

115 updates can be applied immediately.
85 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

New release '22.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Your Hardware Enablement Stack (HWE) is supported until April 2025.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

groups: cannot find name for group ID 2000
user001@xxxxxx:~$
</pre>