FreeBSDサーバーにDovecot v2.0.11がインストールされていて、受信メールアドレスのユーザールックアップは失敗していますが、システムユーザーのルックアップは成功しています。
Dovecotはシステムユーザーを使用するように設定されているので、私のdovecot.confには
userdb {
driver = passwd
}
そして
passdb {
driver = passwd
}
認証デバッグを有効にしました。
たとえば、webmasterというユーザーがいて、 "webmaster"にdoveadmユーザーを使用すると、次のように機能します。
#doveadm user webmaster
userdb: webmaster
system_groups_user: webmaster
uid : 1020
gid : 1020
home : /home/webmaster
ただし、doveadmユーザーを使用して[email protected]を検索すると、次のように失敗します。
# doveadm user [email protected]
userdb lookup: user [email protected] doesn't exist
これにより、webmaster @ myregisteredname.com宛の受信メールが「不明なユーザー」エラーで返送されます。
/ var/log/maillogに記録されたエラーは次のとおりです。
Apr 16 20:13:35 www dovecot: auth: passwd([email protected]): unknown user
/var/log/debug.logに記録された失敗は次のとおりです。
Apr 16 20:13:35 www dovecot: auth: Debug: master in: USER 1 [email protected] service=doveadm
Apr 16 20:13:35 www dovecot: auth: Debug: passwd([email protected]): lookup
Apr 16 20:13:35 www dovecot: auth: Debug: master out: NOTFOUND 1
ユーザーとそのホームディレクトリは別のサーバーからインポートされ、ユーザーはvipwツールを使用して設定されました。システムユーザーとdovecotルックアップを「リンク」しないインポートで見逃したものがあると確信しています。
その何かが何であるかについてのアイデアはありますか?
編集:BillThorのアドバイスを使用して、dovecot.confを次のように更新しました。
#doveconf -n passdb userdb
passdb {
args = username_format=%n
driver = passwd
}
userdb {
args = username_format=%n
driver = passwd
}
ただし、現在、doveadmユーザーは別の方法で失敗します。
#doveadm user [email protected]
doveadm(root): Error: userdb lookup([email protected]): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for [email protected]
また、ドメインのないユーザーには機能しなくなります。
#doveadm user webmaster
doveadm(root): Error: userdb lookup(webmaster): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for webmaster
上記のメッセージが表示されたら、/ var/log/maillogに次の内容が含まれています。
Apr 17 17:30:02 www dovecot: auth: Fatal: passdb passwd: Unknown setting: username_format=%u
Apr 17 17:30:02 www dovecot: master: Error: service(auth): command startup failed, throttling
Passdbを使用するdovecotのユーザーIDにドメインが含まれていません。ユーザーが使用する必要があるユーザーIDは、完全な電子メールアドレスではなく、ローカル部分です。
合格および不合格のチェックは期待どおりに機能しています。設定auth_username_format=%n
パスワードdb定義が機能する前。ただし、ドメインは検証されません。
Ubuntu Server 12.04を使用していて、上記の解決策を試しました。しかし、私は10-auth.confで設定するのが最も簡単で簡単な方法であることがわかりました
auth_username_format = %n
Ubuntu 12.04のデフォルトである認証にはPAMを使用します。
Dovecot 2.1がこの解決策を破ったか、予想される動作を変更したのではないかと思います。
同じ認証エラーをuserdbまで追跡しました。
userdb {
driver = passwd
}
ローカルユーザー(非仮想)がexim-> lmtpを介して電子メールを受信すると、ドメインが含まれます。 auth_username_format =%Lnを定義すると、ローカル配信は修正されますが、仮想配信が中断されます。 args = username_formatを追加するという提供された修正は無視されているようです:
userdb {
driver = passwd
args = username_format=%n
}
ログには警告が含まれています
Apr 4 11:24:57 moe dovecot: auth: Warning: userdb passwd: Move templates args to override_fields setting
興味深いことに、passwd-file does workを使用していますが、authは、passwdファイルがrootによって所有されていることに怒っています。
userdb {
driver = passwd-file
args = username_format=%n /etc/passwd
}
Apr 4 11:26:12 moe dovecot: auth: Error: passwd-file /etc/passwd: User root has invalid UID '0'
Apr 4 11:26:12 moe dovecot: auth-worker(6855): Error: passwd-file /etc/passwd: User root has invalid UID '0'
passwd-file: Unknown setting: username_format
私にとっての理由は余分なスペースでした:
passdb {
driver = passwd-file
args = scheme=SHA256-CRYPT **extra-space-here**username_format=%u /etc/dovecot/users
}
つまり、CRYPTとuesrnameの間に2つのスペースがありました。