dovecot / usr / lib / dovecot / delivery не работает только для root

После обновления Ubuntu с 14.04 до 16.04 я могу больше не использовать программу доставки dovecot в procmail для системной доставки от имени пользователя root, поскольку она утверждает, что не может открыть файл auth-userdb, хотя обычные пользователи могут и сервер imap в остальном работает нормально.

Я очистил и переустановил dovecot без эффекта. Права доступа к файлам кажутся нормальными, но вызов dovcot delivery от имени пользователя root завершается неудачно, и единственная ошибка, которая регистрируется (со всеми включенными отладочными флагами 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 показывает, что не удалось подключиться к сокету непосредственно перед тем, как программа прервется, но права чтения / записи затем проверяются и все в порядке:

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 +++

В syslog нет полезных сообщений, и ВСЕ профили apparmor находятся в режиме только для жалоб. Я могу подключиться к сокету как root, используя небольшую программу Perl.

Netstat показывает, что сокет активен:

%# netstat -nvlap | fgrep auth-userdb
unix  2      [ ACC ]     STREAM     LISTENING     1874526  12031/auth [0 wait, /var/run/dovecot/auth-userdb

Поскольку с разрешениями сокета / файла все в порядке, и сокет активен, я не Я не знаю, как отладить это глубже. У кого-нибудь есть идеи, как это исправить?

0
задан 25 August 2016 в 08:09
1 ответ

Dovecot пытается доставлять каждое электронное письмо с разрешение пользователя на его почтовый ящик файловой системы.

Чтобы пользователь мог читать свою электронную почту, не будучи root через IMAP, POP или через почтовый клиент.

Таким образом, ошибка разрешения при доставке в вашей системе заключается в том, что dovecot пытается изменить себя к разрешениям пользователей на доставку электронной почты в их папку.

Для этого программа dovecot-delivery пытается прочитать из auth-userdb соответствующие разрешения. Если это не настроено правильно, то это не сработает с приведенным выше сообщением.

PS: Я действительно думаю, что запуск всего от имени пользователя root - правильный способ сделать это.

0
ответ дан 24 November 2019 в 05:58

Теги

Похожие вопросы