У меня Dovecot v2.0.11 установлен на сервере FreeBSD, и поиск пользователей для входящих адресов электронной почты дает сбой, но поиск пользователей системы проходит успешно.
Dovecot настроен на использование системных пользователей, поэтому в моем dovecot.conf
userdb {
driver = passwd
}
и
passdb {
driver = passwd
}
У меня включена отладка аутентификации.
Например, у меня есть пользователь с именем веб-мастер, и использование пользователя doveadm в качестве «веб-мастера» работает следующим образом:
#doveadm user webmaster
userdb: webmaster
system_groups_user: webmaster
uid : 1020
gid : 1020
home : /home/webmaster
Однако использование пользователя doveadm для поиска webmaster@myregisteredname.com не работает следующим образом:
# doveadm user webmaster@myregisteredname.com
userdb lookup: user webmaster@myregisteredname.com doesn't exist
Это приводит к тому, что входящая почта для webmaster@myregisteredname.com возвращается с ошибкой «неизвестный пользователь».
Вот ошибка, записанная в / var / log / maillog:
Apr 16 20:13:35 www dovecot: auth: passwd(webmaster@myregisteredname.com): unknown user
Вот ошибка, записанная в /var/log/debug.log:
Apr 16 20:13:35 www dovecot: auth: Debug: master in: USER 1 webmaster@myregisteredname.com service=doveadm
Apr 16 20:13:35 www dovecot: auth: Debug: passwd(webmaster@myregisteredname.com): lookup
Apr 16 20:13:35 www dovecot: auth: Debug: master out: NOTFOUND 1
Пользователи и их домашние каталоги были импортированы с другого сервера, и пользователи были настроены с помощью инструмента vipw. Я уверен, что есть кое-что, что я пропустил при импорте, что не «связывает» системного пользователя с поиском dovecot.
Есть идеи о том, что это может быть?
РЕДАКТИРОВАТЬ: Используя совет BillThor, я обновил dovecot.conf следующим образом:
#doveconf -n passdb userdb
passdb {
args = username_format=%n
driver = passwd
}
userdb {
args = username_format=%n
driver = passwd
}
Однако теперь пользователь doveadm не работает по-другому:
#doveadm user webmaster@pantronx.com
doveadm(root): Error: userdb lookup(webmaster@myregisteredname.com): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for webmaster@myregisteredname.com
И он больше не работает для пользователей без домена:
#doveadm user webmaster
doveadm(root): Error: userdb lookup(webmaster): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for webmaster
Когда я получаю вышеуказанные сообщения, в / var / log / maillog находится следующее:
Apr 17 17:30:02 www dovecot: auth: Fatal: passdb passwd: Unknown setting: username_format=%u
Apr 17 17:30:02 www dovecot: master: Error: service(auth): command startup failed, throttling
Идентификаторы пользователя в dovecot с использованием passdb не включают домен. ID пользователя, который должен использовать пользователь, является локальной частью, а не полным адресом электронной почты.
Проверки, которые проходят и не проходят, работают должным образом. Настройка auth_username_format=%n
до того, как определение пароля db действительно сработает. Однако домен не подтвержден.
Я использую Ubuntu Server 12.04 и пробовал вышеуказанные решения. Однако я обнаружил, что самый простой и легкий способ - установить в 10-auth.conf
auth_username_format = %n
Я использую PAM для аутентификации, которая используется по умолчанию в Ubuntu 12.04.
Я подозреваю, что Dovecot 2.1 либо сломал это решение, либо изменил ожидаемое поведение.
Я проследил ту же ошибку авторизации для userdb:
userdb {
driver = passwd
}
Когда локальный пользователь (не виртуальный) получает электронное письмо через exim-> lmtp, он включает домен. Определение auth_username_format =% Ln исправляет локальную доставку, но нарушает виртуальную доставку. Предлагаемое исправление добавления args = username_format, похоже, игнорируется:
userdb {
driver = passwd
args = username_format=%n
}
и в журналах есть предупреждение
Apr 4 11:24:57 moe dovecot: auth: Warning: userdb passwd: Move templates args to override_fields setting
Интересно, что используя passwd-file работает, но auth злится, что файл passwd принадлежит пользователю root.
userdb {
driver = passwd-file
args = username_format=%n /etc/passwd
}
Apr 4 11:26:12 moe dovecot: auth: Error: passwd-file /etc/passwd: User root has invalid UID '0'
Apr 4 11:26:12 moe dovecot: auth-worker(6855): Error: passwd-file /etc/passwd: User root has invalid UID '0'
passwd-file: Unknown setting: username_format
Для меня причиной было лишнее пространство:
passdb {
driver = passwd-file
args = scheme=SHA256-CRYPT **extra-space-here**username_format=%u /etc/dovecot/users
}
т.е. у меня было два пробела между CRYPT и именем пользователя.