Назад | Перейти на главную страницу

Ошибка: не удалось сбросить привилегии: у пользователя отсутствует 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#011aaron@example.com#011plain_pass=Password1234#011quota_rule=*:bytes=0#011home=/var/vmail/example.com/aaron#011uid=5000#011gid=5000#011auth_token=bdxxxxx

Однако, когда предварительная выборка включена, он не получает uid и gid в passdb:

Jan 5 15:18:36 m1 dovecot: auth: Debug: master userdb out: USER#0113382444033#011aaron@example.com#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 в основном работает, требуя, чтобы passdb возвращал информацию userdb в дополнительных полях с userdb_ префиксы. Например, если userdb обычно возвращает uid, gid и home полей, passdb должен будет вернуть userdb_uid, userdb_gid и userdb_home поля.