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

Переход Dovecot со статического на драйвер userdb в файле passwd

У меня есть почтовый сервер для использования 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-file. Однако я изо всех сил пытаюсь заставить его работать.

Используя тот же 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, идентификатор поиска аутентификации = 345505793 (client-pid = 30121 client-id = 1)

dovecot: auth: Error: passwd-file (username @ example.org, 93.184.216.34,): пользователь не найден из userdb

Я перепробовал много вариантов и прочитал много страниц вики dovecot, включая AuthDatabase / PasswdFile, но я не могу правильно интерпретировать документацию.

Как мне транспонировать мой static конфигурация в passwd-file с минимальными доработками?

/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
}

Я ошибочно предположил, что поля кроме user и password были необязательными, так как default_fields позаботится о них.

Фактически, документация состояния (выделено мной)

[Файл паролей] имеет следующий формат:

user:password:uid:gid:(gecos):home:(shell):extra_fields

Для базы паролей достаточно иметь только поля пользователя и пароля. Для базы данных пользователей необходимо также установить uid, gid и желательно также home (см. VirtualUsers). Поля (gecos) и (shell) Dovecot не используются.

Так что эти поля на самом деле обязательны. Но поскольку они уже установлены default_fields, они могут быть пустыми:

user:{SHA512}pwd:::

Я понял это случайно, потому что единственная рабочая учетная запись была той, на которой я тестировал квоту (используя для каждого пользователя userdb_quota_rule дополнительное поле)…

В doveadm user user@example.org также был очень полезен для устранения этой проблемы.