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: