能書き
自宅サーバー構築譚:基本構想に基づく自宅サーバー構築、Ubuntu22.04LTSインストールその2の続きです。
前回と前々回でDovecotの基本的な設定は終わりましたが、今回はSSSDを設定してLDAPユーザーもメールを受信できるようにします。
目標
- Dovecotが動いているLXDコンテナにSSSDをインストールしてLDAPと連携させる。
- LDAPで登録したアカウントにメールを送信し、受信を確認する。
参考文献
- 自宅サーバー構築譚:LDAPサーバー OpenLDAP・SSSD を利用したログイン・Xubuntu 22.04 LTS - Qiita
- 自宅サーバー構築譚:LAN内DNSサーバー Unbound・Ubuntu 22.04 - Qiita
- 自宅サーバー構築譚:LXD - Qiita
- 自宅サーバー構築譚:LXDコンテナにDovecotをインストール / LMTP
- 自宅サーバー構築譚:LXDコンテナにDovecotをインストール / IMAP
スナップショット
コンテナdovecot1(IPアドレス192.168.0.4)について、まずは現時点でのスナップショットを撮ります。
まずはコンテナ名とIPアドレスを変数に設定。ここは環境に合わせた値を設定して下さい。
CONTAINER=dovecot1
IPADDRESS=192.168.0.4
スナップショット名はbefore_SSSDとします。
SSNAME=before_SSSD
コンテナを停止してスナップショットを撮ります。稼働中でも撮れるようですが、変に面倒臭い何かが起こってもイヤなので。
lxc stop $CONTAINER
lxc snapshot $CONTAINER $SSNAME
スナップショットの一覧表示。
lxc info $CONTAINER
スナップショットの操作が終わったら、起動させましょう。
lxc start $CONTAINER
名前解決の確認
LXDコンテナのDNSはホストマシンに向いているようです。何も設定しなくてもホストマシン名secondary.home
を解決できます。
lxc exec $CONTAINER -- ping -c2 secondary.home
外の名前も解決できます。例えばexample.com
など。
lxc exec $CONTAINER -- ping -c2 example.com
SSSD インストールと設定
インストール
まずはコンテナに入ります。
lxc shell $CONTAINER
クライアントマシンに関連パッケージをインストールします。
apt install -y sssd-ldap
/etc
の差分を確認します。
svn st /etc
今回の/etc
差分は下記の通り。
# svn st /etc
? /etc/apparmor.d/force-complain/usr.sbin.sssd
? /etc/apparmor.d/local/usr.sbin.sssd
? /etc/apparmor.d/usr.sbin.sssd
? /etc/cracklib
? /etc/cron.daily/cracklib-runtime
? /etc/default/sssd
M /etc/group
M /etc/gshadow
? /etc/init.d/sssd
M /etc/ld.so.cache
? /etc/libnl-3
? /etc/logcheck/ignore.d.paranoid
? /etc/logrotate.d/sssd-common
? /etc/magic
? /etc/magic.mime
M /etc/nsswitch.conf
M /etc/pam.d/common-account
M /etc/pam.d/common-auth
M /etc/pam.d/common-password
M /etc/pam.d/common-session
? /etc/pam.d/sssd-shadowutils
M /etc/passwd
? /etc/rc0.d/K01sssd
? /etc/rc1.d/K01sssd
? /etc/rc2.d/S01sssd
? /etc/rc3.d/S01sssd
? /etc/rc4.d/S01sssd
? /etc/rc5.d/S01sssd
? /etc/rc6.d/K01sssd
? /etc/security/pwquality.conf
M /etc/shadow
? /etc/sssd
? /etc/systemd/system/multi-user.target.wants/sssd.service
? /etc/systemd/system/sssd.service.wants
これらの検討は、今回もサボります。面倒臭くなりました。このままSubversion登録します。
svn st /etc | grep "^?" | cut -b9- | xargs -I{} find {} -type f -or -type d -or -type l | xargs -t svn add
svn ci /etc -m"SSSD install"
初期設定
コンテナ内のSSSDを初期設定します。
/etc/sssd/sssd.conf
を作成し、パーミッションを0600
、所有権をroot:root
にします。
なおLDAPサーバーはsecondary.home
とします。
cat >/etc/sssd/sssd.conf <<___
[sssd]
config_file_version = 2
domains = home
[domain/home]
id_provider = ldap
auth_provider = ldap
ldap_uri = ldaps://secondary.home
cache_credentials = True
ldap_search_base = dc=home
___
chmod 600 /etc/sssd/sssd.conf
svn add /etc/sssd/sssd.conf
svn ci /etc -m"add SSSD setting"
後でコンテナを再起動させるので、この時点でのsssd
の起動は省略します。
ホームディレクトリの自動作成を有効にします。
pam-auth-update --enable mkhomedir
これによって変化する設定がありますので、ここでもSubversion登録しておきます。
svn ci /etc -m"setting mkhomedir"
ここまで出来たら、一度コンテナを抜けます。
exit
オレオレ認証局の信頼
鍵の配置
以前の鍵作成の通りならば、ホスト側に下記のように認証局と証明書の鍵が配置されています。
認証局:
- 秘密鍵
/opt/CA/demoCA/pki/private/ca.key
- 公開鍵
/opt/CA/demoCA/pki/ca.crt
サーバーマシン secondary.home の証明書:
- 秘密鍵
/opt/CA/demoCA/pki/private/secondary.home.key
- 公開鍵
/opt/CA/demoCA/pki/issued/secondary.home.crt
コンテナへは認証局の公開鍵ca.crt
を送付して信頼します。
オレオレ認証局の公開鍵を信頼
まずはディレクトリを作成。
lxc exec $CONTAINER mkdir /usr/share/ca-certificates/demoCA
オレオレ認証局の公開鍵をコンテナ内に送付。
sudo lxc file push /opt/CA/demoCA/pki/ca.crt $CONTAINER/usr/share/ca-certificates/demoCA/demoCA.crt
公開鍵を追記して処理します。
lxc exec $CONTAINER -- tee -a /etc/ca-certificates.conf <<< demoCA/demoCA.crt
lxc exec $CONTAINER update-ca-certificates
ここでも/etc
に変化があります。
lxc exec $CONTAINER svn st /etc | grep "^?" | cut -b9- | xargs -I{} lxc exec $CONTAINER -- find {} -type f -or -type d -or -type l | xargs -t lxc exec $CONTAINER svn add
lxc exec $CONTAINER -- svn ci /etc -m"ssl settings"
コンテナを再起動
ここまで出来たらコンテナを再起動します。
lxc restart $CONTAINER
LDAPユーザーでログイン
コンテナのコンソールに接続して、一度、ログインします。ログインする事によってホームディレクトリも作られます。
以前の設定の通りならば、LDAPにはユーザー名taro
が登録されています。
USERID=taro
下記のコマンドならばtaro
のパスワード入力は省略できます。
lxc exec $CONTAINER -- login -f $USERID
成功すれば下記のように表示され、よく見ると最後にCreating directory '/home/taro'.
というメッセージが表示されています。
$ lxc exec $CONTAINER -- login -f $USERID
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-71-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'.
特にする事も無いので、確認できたらexit
しましょう。
exit
残念ながらlogin
コマンドはコンソールからの入出力しか受け付けないようです。exit
は手で入力しなければなりません。自動化できませんね。残念。
LDAPユーザーのメールの確認
送信
LDAPユーザーtaro
のホームディレクトリが作成されたら、dovecotでメール配送できる筈です。
以前の設定の通りならば、ポート番号は24になります。
LMTP_PORT=24
メールを送信します。
nc -C 172.16.1.3 $LMTP_PORT <<___
lhlo sender.home
mail from:<test@sender.home>
rcpt to:<$USERID@secondary.home>
data
From: test@sender.home
To: $USERID@secondary.home
Subject: test mail
hello, world
.
quit
___
着信確認
メールが正しく届いていれば、LDAPユーザーtaro
に対してもIMAPで確認できる筈です。
IMAPS_PORT=993
openssl s_client -connect 172.16.1.3:$IMAPS_PORT
1 login taro Ma9H%6jg
2 list "" *
3 select INBOX
4 fetch 1 body[]
5 logout
仕舞い
これでLDAPユーザーへのメールも取り扱えるようになりました。やったね