LoginSignup
0
0

Postfixの構築 - queue file write error

Posted at

はじめに

Dockerベースでpostfixの環境を作成しており、その際のつまづきポイントを記録として残す。

構成(前提条件)

環境としてはLinuxベースのhost(debian)にDockerにてイメージをフルスクラッチで作成。ベースイメージとしてはdebianのbookwormを採用。最初はminimumのイメージで作成していたが色々パッケージ不足等々で躓くところが多いので普通のイメージベースを採用しています。またLDAPにてユーザー管理を行う。

なにが起きたか

とりあえず正常に起動するところまでは設定を行いメールクライアントから送信テストを行った際に下記のエラーが出た。

image.png

まず疑った部分

logを見ると

error: unsupported dictionary type: ldap

が出ている。つまりLDAPが有効になっていない。しかしインストールしたパッケージを確認すると下記のようにpostfix-ldapは入れてある

# dpkg -l|grep postfix
ii  postfix                     3.7.10-0+deb12u1               amd64        High-performance mail transport agent
ii  postfix-ldap                3.7.10-0+deb12u1               amd64        LDAP map support for Postfix
ii  postfix-policyd-spf-python  3.0.4-2                        all          Postfix policy server for SPF checking
# dpkg -l|grep ldap   
ii  dovecot-ldap                1:2.3.19.1+dfsg1-2.1           amd64        secure POP3/IMAP server - LDAP support
ii  libldap-2.5-0:amd64         2.5.13+dfsg-5                  amd64        OpenLDAP libraries
ii  libsasl2-modules-ldap:amd64 2.1.28+dfsg-10                 amd64        Cyrus SASL - pluggable authentication modules (LDAP)
ii  postfix-ldap                3.7.10-0+deb12u1               amd64        LDAP map support for Postfix
# dpkg -l|grep libc6
ii  libc6:amd64                 2.36-9+deb12u7                 amd64        GNU C Library: Shared libraries
ii  libc6-dev:amd64             2.36-9+deb12u7                 amd64        GNU C Library: Development Libraries and Header Files

そしてモジュールのロードの設定としては下記のものを記載している。

# cat /etc/postfix/dynamicmaps.cf
# dict-type     so-name (pathname)      dict-function   mkmap-function
ldap    postfix-ldap.so dict_ldap_open

仮にこの記載が反映されていないのであれば

dynamicmaps=yes

でビルドされた物であればこの設定によりLDAPサポートが有効化されるはずなのでおそらくそこが問題?と思ったが結論としては下記のものが問題だった。

ふと有効な機能の確認をしていた際に最初は見逃していたが一行目に設定ファイル絡みのwarningが出ている。

# postconf -m
postconf: warning: /etc/postfix/dynamicmaps.cf: file is owned or writable by non-root users -- skipping this file
btree
cidr
environ
fail
hash
inline
internal
memcache
nis
pipemap
proxy
randmap
regexp
socketmap
static
tcp
texthash
unionmap
unix

設定ファイルのownerをrootにしてサービス再起動後確認するとldapが出てきた

# postconf -m
btree
cidr
environ
fail
hash
inline
internal
ldap
memcache
nis
pipemap
proxy
randmap
regexp
socketmap
static
tcp
texthash
unionmap
unix

ポイントとしてはDockerでホストのボリュームをマウントして設定ファイルを読み込ませているので、ここのファイルの権限が変化していたという事。最初にQueueに書けないというエラーの段階でQueueとMailDirの権限は疑っていて確認したが設定ファイルの権限はwarningが出ているだけで読み込まれていると思ったのでまさかの原因だった。

結論

Dockerを使用すると内部のUID/GIDに引きずられて色々な事が起きるのでファイルの権限系は適当にせずにしっかり設定しましょうという話・・・。

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