После обновления Ubuntu с 14.04 до 16.04 я больше не могу использовать программу доставки dovecot в procmail для системной доставки от имени пользователя root, потому что она утверждает, что не может открыть файл auth-userdb, хотя обычные пользователи могут это сделать, а сервер imap в остальном работает нормально.
Я очистил и переустановил голубятню безрезультатно. Права доступа к файлам кажутся нормальными, но вызов dovcot delivery как корень не выполняется, и единственная ошибка, которая регистрируется (со всеми включенными флагами отладки dovecot):
%# cat /tmp/testmail | /usr/lib/dovecot/deliver -d username
Error 75
%# tail -n2 /var/log/dovecot.log
Error: userdb lookup: connect(/var/run/dovecot/auth-userdb) failed: Permission denied (euid=0(root) egid=8(mail) UNIX perms appear ok (ACL/MAC wrong?))
Aug 24 22:05:14 lda: Fatal: Internal error occurred. Refer to server log for more information.
Права доступа к файлам в сокете установлены так, что любой может читать / писать в него. В сообщении об ошибке даже говорится, что разрешения выглядят нормально.
%# ls -l /var/run/dovecot/auth-userdb
srwxrwxrwx 1 root mtagroup 0 Aug 24 00:47 /var/run/dovecot/auth-userdb=
Запуск strace при доставке при запуске от имени пользователя root показывает, что не удалось подключиться к сокету непосредственно перед прерыванием программы, но затем проверяются разрешения r / w и все в порядке:
connect(7, {sa_family=AF_LOCAL, sun_path="/var/run/dovecot/auth-userdb"}, 110) = -1 EACCES (Permission denied)
close(7) = 0
...
stat("/var/run/dovecot", {st_mode=S_IFDIR|0755, st_size=740, ...}) = 0
getuid() = 0
geteuid() = 0
access("/var/run/dovecot", X_OK) = 0
getuid() = 0
geteuid() = 0
access("/var/run/dovecot/auth-userdb", R_OK) = 0
getuid() = 0
geteuid() = 0
access("/var/run/dovecot/auth-userdb", W_OK) = 0
geteuid() = 0
getegid() = 0
open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 7
fstat(7, {st_mode=S_IFREG|0644, st_size=3585, ...}) = 0
fstat(7, {st_mode=S_IFREG|0644, st_size=3585, ...}) = 0
read(7, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0\7\0\0\0\0"..., 4096) = 3585
lseek(7, -2281, SEEK_CUR) = 1304
read(7, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0\7\0\0\0\0"..., 4096) = 2281
close(7) = 0
write(6, "Aug 24 00:01:05 lda(cwolf): Erro"..., 180) = 180
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3585, ...}) = 0
write(6, "Aug 24 00:01:05 lda: Fatal: Inte"..., 95) = 95
exit_group(75) = ?
+++ exited with 75 +++
В системном журнале нет полезных сообщений, и ВСЕ профили приложения находятся в режиме только для жалоб. я жестяная банка подключитесь к сокету как root, используя небольшую программу на Perl.
Netstat показывает, что сокет активен:
%# netstat -nvlap | fgrep auth-userdb
unix 2 [ ACC ] STREAM LISTENING 1874526 12031/auth [0 wait, /var/run/dovecot/auth-userdb
Поскольку права доступа к сокету / файлу кажутся прекрасными, а сокет активен, я не знаю, как отладить это глубже. У кого-нибудь есть идеи, как это исправить?
Dovecot пытается доставлять каждое электронное письмо с разрешения пользователя в его почтовый ящик файловой системы.
Так что пользователь может читать свою электронную почту, не будучи root через IMAP или POP или через клиент веб-почты.
Таким образом, ошибки разрешений при доставке в вашей системе заключаются в том, что dovecot пытается изменить права пользователей на доставку электронной почты в их папку.
Для этого программа dovecot-delivery пытается прочитать из auth-userdb соответствующие разрешения. Если это не настроено правильно, это не сработает с сообщением выше.
PS: Я действительно думаю, что запуск всего от имени пользователя root - правильный способ сделать это.