username @ domain形式を使用すると、Dovecotユーザールックアップが失敗する


14

Dovecot v2.0.11をFreeBSDサーバーにインストールしていますが、受信メールアドレスのユーザー検索は失敗しますが、システムユーザーの検索は成功します。

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ユーザーを使用してwebmaster@myregisteredname.comを検索すると、次のように失敗します。

# doveadm user webmaster@myregisteredname.com
userdb lookup: user webmaster@myregisteredname.com doesn't exist

これにより、webmaster @ myregisteredname.com宛の受信メールが「不明なユーザー」エラーでバウンスすることになります。

/ var / log / maillogに記録された障害は次のとおりです。

Apr 16 20:13:35 www dovecot: auth: passwd(webmaster@myregisteredname.com): unknown user

/var/log/debug.logに記録される障害は次のとおりです。

Apr 16 20:13:35 www dovecot: auth: Debug: master in: USER       1       webmaster@myregisteredname.com  service=doveadm
Apr 16 20:13:35 www dovecot: auth: Debug: passwd(webmaster@myregisteredname.com): 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 webmaster@pantronx.com
doveadm(root): Error: userdb lookup(webmaster@myregisteredname.com): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for webmaster@myregisteredname.com

また、ドメインのないユーザーでは機能しなくなりました。

#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

回答:


15

passdbを使用するdovecotのユーザーIDにはドメインが含まれていません。ユーザーが使用するユーザーIDはローカルの部分であり、完全なメールアドレスではありません。

合格および不合格のチェックは期待どおりに機能しています。auth_username_format=%nパスワードdb定義の前の設定は機能します。ただし、ドメインは検証されません。


返信いただきありがとうございますが、それでもうまくいきません。更新された結果で質問を編集しました。
シガーマン

1
@Coleman:Dovecot 1.2の実用的なソリューションを見つけました。Dovecot 2でも動作するはずです。返信の編集をご覧ください。ubuntuのデフォルト設定ファイルで解決策を見つけました。
-BillThor

13

Ubuntu Server 12.04を使用していますが、上記のソリューションを試しました。ただし、最も簡単で簡単な方法は10-auth.confで設定することです

auth_username_format = %n

Ubuntu 12.04のデフォルトである認証にはPAMを使用します。


3

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を使用しても機能します、passwdファイルがrootによって所有されていることにauthが怒っています。

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'

1

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つのスペースがありました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.