0
0

More than 1 year has passed since last update.

自宅サーバー構築譚:LXDコンテナにDovecotをインストール / SSSDでLDAPと連携

Last updated at Posted at 2023-05-21

能書き

自宅サーバー構築譚:基本構想に基づく自宅サーバー構築、Ubuntu22.04LTSインストールその2の続きです。

前回前々回でDovecotの基本的な設定は終わりましたが、今回はSSSDを設定してLDAPユーザーもメールを受信できるようにします。

目標

  • Dovecotが動いているLXDコンテナにSSSDをインストールしてLDAPと連携させる。
  • LDAPで登録したアカウントにメールを送信し、受信を確認する。

参考文献

スナップショット

コンテナ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
openssl
1 login taro Ma9H%6jg
2 list "" *
3 select INBOX
4 fetch 1 body[]
5 logout

仕舞い

これでLDAPユーザーへのメールも取り扱えるようになりました。やったね:thumbsup_tone1:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0