Сервер IMAP не может читать (открывать) почту с помощью fetchmail, procmail и dovecot

Я пытаюсь настроить почтовый сервер! Кажется, все в порядке (через несколько дней), но когда я попытался прочитать почту с помощью сервера IMAP:

18 апреля, 17:38:48 sd-84941 dovecot: imap (dlp): Error: open (/ data / maildir /dlp/cur/1460993401.13028_0.sd-84941:2,) не удалось: разрешение отклонено (euid = 1000 (michael) egid = 1000 (michael) missing + r perm: /data/maildir/dlp/cur/1460993401.13028_0.sd -84941: 2 ,, мы не в группе 8 (почта), директория принадлежит 0: 8 mode = 0777)

Письма находятся в папке maildir, но я не могу их прочитать из-за разрешений ...

-rw-rw ---- 1 root root 2363 18 апр, 17:55 1460994924.16416_0.sd-84941

Но если chmod 777 работает (но я не могу делать это каждый раз вручную ..):

-rwxrwxrwx 1 root root 2363 18 апр, 17:55 1460994924.16416_0.sd-84941: 2,

Что случилось? Кто дает разрешение на файл? fetchmail, procmail или dovecot?

----- Edit ------

Спасибо за ответы, @tripleee. Я попытаюсь сообщить подробности:

Я установил sendmail, procmail, fetchmail, dovecot и roundcube:

  • Sendmail и Roundcube: установка по умолчанию.

  • Procmail:

В / etc / procmailrc (I предпочитаем глобальную конфигурацию вместо пользовательского), у нас есть:

MAILDIR=/data/mails/
DEFAULT=$MAILDIR/
LOGFILE=/var/log/procmail
VERBOSE=on
  • Fetchmail

В / etc / fetchmailrc:

set syslog
set daemon 120
poll mail.interpc.fr
  with nodns,
  with protocol POP3,
  user "dlp",
  with password mypass
option keep
  • dovecot

Я создал пользователя vmail:

sudo addgroup --gid 5000 vmail
sudo adduser --home /data/mails/ --uid 5000 --gid 5000 --shell /bin/false vmail

В / etc / dovecot / пользователи (с uid и gid vmail):

dlp:{PLAIN}mypass:5000:5000::

В /etc/dovecot/conf.d/10-auth.conf я изменил на:

disable_plaintext_auth = no
#!include auth-system.conf.ext
!include auth-passwdfile.conf.ext

В /etc/dovecot/conf.d/10-mail .conf: mail_location = maildir: / data / mails /

  • Описание проблемы: письма копируются в мою почтовую папку, но с правами root, поэтому Roundcube не может открывать письма
    root@sd-84941:/home/michael# ls -al /data/mails/cur/
    total 48
    drwxr--r-- 2 vmail vmail  4096 Apr 21 15:08 .
    drwxr--r-- 5 vmail vmail  4096 Apr 21 15:08 ..
    -rwxr--r-- 1 root  root  29635 Apr 21 13:31 1461238276.4519_0.sd-84941:2,
    -rwxr--r-- 1 root  root   3740 Apr 21 13:45 1461239150.5706_0.sd-84941:2,
    -rw-r--r-- 1 root  root   2953 Apr 21 15:04 1461243887.17704_0.sd-84941:2,

Спасибо за помощь ...

1
задан 23 April 2016 в 15:28
1 ответ

Ваша комбинация программного обеспечения в наши дни немного необычна (т.е. довольно стандартна 10-20 лет назад). Я предполагаю, что вы используете fetchmail для подключения к POP-серверу, а затем он передает почту в procmail для доставки почты в локальные директории. Такой подход стал необычным отчасти потому, что сейчас не так много серверов, которые поддерживают только POP, а IMAP позволяет лучше переносить почту между серверами после доставки. Если есть возможность использовать IMAP на предыдущем сервере, то посмотрите на imapfilter. Также в наши дни необычно, когда нужно запустить почтовый сервер, который не может принимать прямую доставку, что позволит вам просто установить правило пересылки почты на исходящем сервере.

Скорее всего, вы столкнулись с проблемами, потому что используете procmail для доставки почты непосредственно в локальные директории, и делаете это с запуском процесса procmail от имени root, а не от имени dovecot, поэтому dovecot не может читать файлы.

Вы можете понять, как запустить procmail от имени правильного пользователя или (если запущен от имени root), как сказать ему, чтобы он хранил файлы с правильным владельцем. Вы можете получить некоторую степень совместимости, но, например, dovecot не сможет правильно индексировать письма по мере их поступления, так что поиск будет нарушен.

Я предлагаю вам использовать deliver от dovecot в качестве локального агента доставки. Он может заменить procmail, или его можно назвать procmail 1,2 . В любом случае, вам нужно будет вызвать его с соответствующим аргументом (-d), идентифицирующим пользователя, которому вы доставляете почту. Если вы используете procmail для принятия решения о том, в какую почтовую папку доставлять почту, вы можете использовать для этого аргумент -p, или лучше использовать механизм фильтрации решеток dovecot для принятия таких решений. procmail действительно лучше всего работает с системными пользователями, а не с виртуальными пользователями.

Ситовое решение лучше, чем procmail для виртуальных пользователей, хотя это открытый вопрос с менее приятным синтаксисом фильтрации. У меня было много лет хорошего сервиса от procmail, и в настоящее время я использую немного сита, потому что он работает до доставки, но для передачи почты между серверами после доставки, и где позволяют обстоятельства, я бы предпочёл писать фильтры с помощью imapfilter.

.
2
ответ дан 3 December 2019 в 20:39

Теги

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