web-dev-qa-db-ja.com

エラー:権限を削除できませんでした:ユーザーにUIDがありません(mail_uid設定を参照)

ここにISPMailガイドの周りに大まかにセットアップされた電子メールシステムがあります- https://workaround.org/ispmail/buster/

パスワードスキームの自動移行用のスクリプトを設定しようとしていますが、問題が発生しています。私はこれに似たガイドに従ってきました: https://wiki.dovecot.org/HowTo/ConvertPasswordSchemes

Userdbプリフェッチを有効にすると、Couldn't drop privileges: User is missing UID (see mail_uid setting)エラーが表示されます。

私のuser_queryとpassword_queryは次のとおりです。

user_query = SELECT user, \ concat('*:bytes=', quota) AS quota_rule, \ '/var/vmail/%d/%n' AS home, \ 5000 AS uid, 5000 AS gid \ FROM users WHERE user='%u';

password_query = SELECT user, password, \ '%w' AS userdb_plain_pass, \ concat('*:bytes=', quota) AS quota_rule, \ '/var/vmail/%d/%n' AS home, \ 5000 AS uid, 5000 AS gid \ FROM users WHERE user='%u';

次の構成があります:(この順序で)

passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = prefetch } userdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext }

デバッグログを見て、プリフェッチを削除すると、すべてが期待どおりに機能します。

Jan 5 15:21:38 m1 dovecot: auth: Debug: master userdb out: USER#0114090494977#[email protected]#011plain_pass=Password1234#011quota_rule=*:bytes=0#011home=/var/vmail/example.com/aaron#011uid=5000#011gid=5000#011auth_token=bdxxxxx

ただし、プリフェッチが有効になっている場合、passdbのuidとgidは取得されません。

Jan 5 15:18:36 m1 dovecot: auth: Debug: master userdb out: USER#0113382444033#[email protected]#011plain_pass=Password1234#011auth_token=bdxxxx

プリフェッチを使用するときにこの問題を解決する方法に関する提案はありますか?

ありがとう!

1
Aaron A

Passdbクエリにuserdb_プレフィックスがないことがわかりました。次のように調整すると問題が解決しました。

password_query = SELECT user, password, \
  '%w' AS userdb_plain_pass, \
   concat('*:bytes=', quota) AS quota_rule, \
   '/var/vmail/%d/%n' AS home, \
   5000 AS userdb_uid, 5000 AS userdb_gid \
   FROM users WHERE user='%u';

Dovecot Prefetch User Database に関するドキュメント:

プリフェッチは基本的に、passdbがuserdb_プレフィックス付きの追加フィールドでuserdb情報を返すことを要求することによって機能します。たとえば、userdbが通常uidgid、およびhomeフィールドを返す場合、passdbはuserdb_uiduserdb_gid、およびuserdb_homeフィールドを返す必要があります。

1
Aaron A