ここに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
プリフェッチを使用するときにこの問題を解決する方法に関する提案はありますか?
ありがとう!
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が通常uid
、gid
、およびhome
フィールドを返す場合、passdbはuserdb_uid
、userdb_gid
、およびuserdb_home
フィールドを返す必要があります。