web-dev-qa-db-ja.com

username @ domain形式を使用するとDovecotユーザー検索が失敗する

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
14
cigarman

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

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

15
BillThor

Ubuntu Server 12.04を使用していて、上記の解決策を試しました。しかし、私は10-auth.confで設定するのが最も簡単で簡単な方法であることがわかりました

auth_username_format = %n

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

13
Søren Weber

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'
3
beewoolie

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

1
Putnik