У меня есть почтовый сервер, настроенный на использование dovecot с виртуальными пользователями:
passdb {
driver = passwd-file
args = username_format=%n /etc/vmail/%d/users
}
userdb {
driver = static
args = uid=109 gid=111 home=/home/vmail/%d/%n
}
Теперь мне нужно установить квоты хранилища для некоторых пользователей. По-видимому, это невозможно с драйвером static
, поэтому я решил, что самый простой способ включить его - это переключиться на файл passwd
. Однако мне сложно заставить его работать.
Используя тот же passdb
, как указано выше, и
userdb {
driver = passwd-file
args = username_format=%n /etc/vmail/%d/users
default_fields = uid=vmail gid=vmail home=/home/vmail/%d/%n
}
93.184.216.34 Я получаю следующие ошибки:
dovecot: imap: Ошибка: аутентифицированный пользователь не найден из userdb, auth lookup id = 345505793 (client-pid = 30121 client-id = 1)
dovecot: auth: Error: (скрыто ) пользователь не найден в userdb
Я пробовал много вариантов и прочитал много страниц вики dovecot, включая AuthDatabase / PasswdFile , но я не могу правильно интерпретировать документацию.
Как это сделать. Я переношу свою статическую
конфигурацию в файл passwd
с минимальными изменениями?
/ etc / vmail /% d / users
файлы имеют стандартную форму
user:{SHA512}…
А вот результат dovecot userdb
для этих настроек:
userdb {
args = username_format=%n /etc/vmail/%d/users
auth_verbose = default
default_fields = uid=vmail gid=vmail home=/home/vmail/%d/%n
driver = passwd-file
name =
override_fields =
result_failure = continue
result_internalfail = continue
result_success = return-ok
skip = never
}
Я ошибочно предположил, что поля, отличные от пользователя
и пароля
, необязательны, поскольку default_fields
позаботятся о них.
] Фактически, в документации говорится (выделено мной)
[Файл паролей] имеет следующий формат:
пользователь: пароль: uid: gid: (gecos): home: (shell): extra_fields
Для базы паролей достаточно иметь только пользователя и поля пароля. Для пользовательской базы данных необходимо также установить uid, gid и, желательно, также home (см. VirtualUsers). Поля (gecos) и (shell) Dovecot не используются.
Таким образом, эти поля фактически являются обязательными. Но поскольку они уже установлены default_fields
, они могут быть пустыми:
user:{SHA512}pwd:::
Я понял это случайно, потому что единственная рабочая учетная запись была той, на которой я тестировал квоту (с использованием для каждого пользователя userdb_quota_rule
дополнительное поле)…
Пользователь doveadm (скрытый) также был очень полезен для отладки этой проблемы.
Просто чтобы дополнить ваш ответ, вам нужно только два двоеточия после поля пароля, чтобы значения по умолчанию
в userdb
были подобрал.
/etc/dovecot/local.conf
-----------------------
passdb {
driver = passwd-file
args = scheme=CRYPT username_format=%u /etc/dovecot/passwd
}
userdb {
driver = passwd-file
args = username_format=%u /etc/dovecot/passwd
default_fields = uid=vmail gid=vmail home=/srv/vmail/%u
# driver = static
# args = uid=vmail gid=vmail home=/srv/vmail/%u
}
/etc/dovecot/passwd
-------------------
user@example.com:{SHA512}longPasswordHash::
Проверка с помощью doveadm
дает также домашнюю папку:
$ doveadm user user@example.com
field value
uid 5000
gid 5000
home /srv/vmail/user@example.com
mail maildir:/srv/vmail/user@example.com/Maildir