====== Exim + dovecot = missing +r permission ======
После обновления Ubuntu 10.04LTS до 12.04LTS, появилась такая ошибка в логе dovecot-deliver.log:
Nov 24 06:10:12 lda: Error: userdb lookup: connect(/var/run/dovecot/auth-userdb) failed: Permission denied (euid=5000(vmail) egid=5000(vmail) missing +r perm: /var/run/dovecot/auth-userdb, UNIX perms appear ok (
ACL/MAC wrong?))
и доставка в ящик пользователя не выполняется.
Проблема №1 решилась достаточно просто: обновление ОС повлекло обновление Dovecot c версии 1 до версии 2. Достаточно переконвертировать конфигфайл dovecot. Идем далее.
Действительно, только владелец (root) может делать с файлом что хочет:
ls -l /var/run/dovecot/auth-userdb
srw------- 1 root root 0 Nov 24 06:44 /var/run/dovecot/auth-userdb
А вот что делает exim в момент доставки писем в dovecot (описание транспорта):
dovecot_delivery:
driver = pipe
debug_print = "T: dovecot_delivery for $local_part@$domain"
command = /usr/lib/dovecot/deliver -d $local_part@$domain
message_prefix =
message_suffix =
delivery_date_add
envelope_to_add
return_path_add = false
log_output = true
user = vmail
Т.е. вызов dovecot-lda от имени пользователя vmail вызывает подобную ошибку в логе dovecot-deliver. Попытка прописать пользователя root в транспорте не увенчается успехом, т.к. этот пользователь находится в списке запрещенных пользователей.
Временно проблема решается так:
# chown vmail: /var/run/dovecot/auth-userdb
После перезагрузки dovecot опять меняется владелец на root для файла auth-userdb.
А еще: у меня в секции service auth довкота:
service auth {
unix_listener auth-master {
group = vmail
mode = 0660
user = vmail
}
user = root
}
Т.е. режим mode, и явно заданные user и group не имеют никакой силы, файл все равно создается с правами, как описано выше.
Решение: в блоке service auth меняем auth-master на auth-userdb (см. http://wiki2.dovecot.org/LDA)
service auth {
unix_listener auth-userdb {
group = vmail
mode = 0600
user = vmail
}
user = root
}
TAG: {{tag>dovecot}}