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: