私的サーバー構築日誌：LDAPサーバー OpenLDAP・SSSD

# 能書き

[私的サーバー構築日誌：仕切り直し](https://qiita.com/katz_engineer/items/1f21de2bd9072c260ae6)からの自宅サーバー構築の続きです。

LDAPとSSSDの連携でログイン設定をする、その手順の確認です。[以前もやりました](https://qiita.com/katz_engineer/items/e51104d04549dcf2842c)が、今回はクライアントマシン代わりにLXDコンテナを活用して、手軽に手順の確認だけ実施します。

# 目標

- SSSDを利用したログイン
- それをクライアントマシン代わりのLXDコンテナで実施
- LDAPアクセスに必要な認証局を信頼

# 参考文献

## 前提

OpenLDAPのサーバーをDockerコンテナで立てる事を目指して、前回と前々回に記事を書きました。これらの作業が済んでいる事が前提になります。

- [私的サーバー構築日誌：LDAPサーバー OpenLDAP over TLS とログ確認 - Qiita](https://qiita.com/katz_engineer/items/7ad51c3a8f1ff98efdd1)
- [私的サーバー構築日誌：LDAPサーバー OpenLDAP・ユーザー登録 - Qiita](https://qiita.com/katz_engineer/items/d576dddbe6a4d8b65fca)

## 過去記事

XubuntuなどにSSSDを仕込むのは、過去、実施した事があります。この手順を、今回はLXDコンテナで確認します。

- [自宅サーバー構築譚：LDAPサーバー OpenLDAP・SSSD を利用したログイン・Xubuntu 22.04 LTS - Qiita](https://qiita.com/katz_engineer/items/e51104d04549dcf2842c)
- [自宅サーバー構築譚：LDAPサーバー OpenLDAP・SSSD を利用したログイン](https://qiita.com/katz_engineer/items/693ab241fc6aa8452b0d)

## その他

- [OpenLDAPとSSSDを利用したユーザー認証 - Qiita](https://qiita.com/mypaceshun/items/9c3b3f0ef9580c6d60ea)

# LXDコンテナにSSSDを設定

SSSD利用のクライアントマシンを別に立てる方法を模倣する為、少々回りくどい手順になります。

## オレオレ認証局の公開鍵を用意

[オレオレ認証局は既に作成しました](https://qiita.com/katz_engineer/items/7a1c16b086a832d9ca8b#サーバーの鍵の配置)。[以前確立した転送の手順](https://qiita.com/katz_engineer/items/fc02e92d1315d6a51a7c)に従って、必要なディレクトリに公開鍵を配置します。

```console:サーバー側
sudo -u cert cp -p /home/cert/demoCA/pki/ca.crt /tmp/demoCA.crt
```

```console:サーバー側
sudo chown transporter: /tmp/demoCA.crt
```

```console:サーバー側
sudo -u transporter mv /tmp/demoCA.crt /srv/transport/publickey/
```

## LXDコンテナ起動

LXDコンテナを立てます。ちょっとした悪戯で、タイムゾーンとロケールを日本向けに初期設定します。

```console:サーバー側
lxc init images:ubuntu/jammy/cloud sssd-ldap --device eth0,ipv4.address=192.168.0.2

```

```console:サーバー側
lxc config set sssd-ldap cloud-init.user-data="$(cat <<___
#cloud-config
timezone: Asia/Tokyo
locale: ja_JP.utf8
package_upgrade: true
___
)"
```

LXDコンテナ起動。

```console:サーバー側
lxc start sssd-ldap
```

起動が終わるのを待ちます。

```console:サーバー側
lxc exec sssd-ldap -- cloud-init status --wait
```

LXDコンテナの中へ入ります。

```console:サーバー側
lxc shell sssd-ldap
```

## オレオレ認証局を信頼

用意したオレオレ認証局の公開鍵を取得します。私のサーバーの名前は```primary.home```です。

```console:コンテナ内
mkdir /usr/share/ca-certificates/demoCA
cd /usr/share/ca-certificates/demoCA
sftp transporter@primary.home
```

```console:sftp
cd publickey
get demoCA.crt
rm demoCA.crt
exit
```

取得したオレオレ認証局の公開鍵を信頼します。

```console:コンテナ内
chmod 644 demoCA.crt
echo demoCA/demoCA.crt >>/etc/ca-certificates.conf
update-ca-certificates
```

信頼できた事を確認しましょう。

```console:コンテナ内
ls -l /etc/ssl/certs/ | grep demoCA
ls -l /etc/ssl/certs/ca-certificates.crt
```

## SSSD設定

SSSD関連パッケージをインストールします。

```console:コンテナ内
apt update
apt install -y sssd-ldap
```

```/etc/sssd/sssd.conf```を作成し、パーミッションを```0600```、所有権を```root:root```にします。
なおLDAPサーバーは```primary.home```とします。

```console:コンテナ内
cat <<___ >/etc/sssd/sssd.conf
[sssd]
config_file_version = 2
domains = home

[domain/home]
id_provider = ldap
auth_provider = ldap
ldap_uri = ldaps://primary.home
cache_credentials = True
ldap_search_base = dc=home
ldap_default_bind_dn = cn=readonly,dc=home
___
chmod 600 /etc/sssd/sssd.conf
```

この```/etc/sssd/sssd.conf```に```ldap_default_authtok```というパラメータを追記するとパスワードを平文で設定できます。権限がrootの600なのでそれでも良いような気がしますが、難読化するツールがあるようなので、それを使いましょう。

```console:コンテナ内
apt install -y sssd-tools
```

```console:コンテナ内
sss_obfuscate -d home
```

パスワード入力を2回要求されますので、それに従って入力すると、```sssd.conf```に自動的に設定されます。

この後にSSSDサービスを開始する事を忘れないように。

```console:コンテナ内
systemctl start sssd
```

起動を確認します。

```console:コンテナ内
systemctl status sssd
```

## mkhomedir設定

ホームディレクトリの自動作成を有効にします。

```console:コンテナ内
pam-auth-update --enable mkhomedir
```

# LXDコンテナにコンソールログイン

参考文献のLDAPへのユーザー登録手順に従っていると、ユーザーtaroでパスワードMa9H%6jgとなっています。これでログインできる事を確認します。

## getentで確認

まずは疎通確認。

```console:コンテナ内
getent passwd taro
id taro
```

下記のように表示されればOKです。

```console:コンテナ内
# getent passwd taro
taro:*:10000:10000:taro:/home/taro:/bin/bash
# id taro
uid=10000(taro) gid=10000(taro) groups=10000(taro)
```

## コンソールログイン

一度、LXDコンテナから抜けます。

```console:コンテナ内
exit
```

さて、ログインできるでしょうか。

```console:サーバー側
lxc console sssd-ldap
```

```taro```とそのパスワード```Ma9H%6jg```を入力して、下記のように表示されればOKです。

```console:サーバー側
$ lxc console sssd-ldap
To detach from the console, press: <ctrl>+a q
taro
Password:
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-88-generic x86_64)

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

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.


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.

Creating directory '/home/taro'.
```

ディレクトリ```/home/taro```が作成され、そこがカレントディレクトリになっています。

```console:コンテナ内
$ pwd
/home/taro
```

確認が終わったらコンテナから抜けます。

```console:コンテナ内
exit
```

下記のようにプロンプトが表示されますで、ここでctrl+aの後にqを入力します。

```console:コンテナ内
$ exit
logout

Ubuntu 22.04.3 LTS sssd-ldap console

sssd-ldap login:
```

# 仕舞い

作成したLXDコンテナは導入手順の確認用ですので、これで用済みです。消しましょう。

```console:サーバー側
lxc stop sssd-ldap
lxc rm sssd-ldap
```

XubuntuなどでSSSDを設定する場合も、同様の手順で実施すればOKでしょう。たぶん。