
Я не могу найти полное руководство по Maildir и папкам, в которых находятся владелец и разрешения. Если таковое имеется и вы его уже нашли, пожалуйста, поделитесь.
В любом случае мне интересно, есть ли способ получить вывод ошибок, связанных с конфигурацией Maildir с помощью Postfix, журнала Dovecot или любого другого инструмента, что-то вроде (эй, у этой папки неправильный владелец, или отсутствуют разрешения, или даже если она не создана)
Я знаю, что вы мне скажете: пришлите нам свою папку и конфигурацию, но я хотел бы знать, как отладить это для других будущих случаев.
Например, мне бы очень хотелось узнать: у моих виртуальных пользователей есть /home/user/domain/usermail/Maildir
Какие разрешения и владелец должны иметь home, user, domain, usermail и Maildir
Пожалуйста, помните, что больше всего меня волнует НАУЧИТЬСЯ ОТЛАДЫВАТЬ проблемы, связанные с разрешениями папок.
и у меня в dovecot.conf есть:
verbose_ssl=yes
mail_debug=yes
auth_debug=yes
auth_verbose=yes
и в master.cf postfix conf на этих строках
smtp inet n - n - - smtpd -v
submission inet n - n - - smtpd -v
Кстати, а разрешение drwxr-s--- в порядке с папкой usermail?
решение1
Для виртуальных пользователей необходимо создать системную учетную запись пользователя и назначить ее владельцем почты, а затем настроить UID и GID этого пользователя в Postfix и Dovecot.
Вот соответствующие части моего dovecot.conf
:
userdb {
driver = static
args = uid=8 gid=12 home=/var/spool/mail/%n
}
mail_location = maildir:~
mail_uid = 8
mail_gid = 12
Userdb — это действительно простой файл типа passwd, содержащий только имена пользователей и пароли, а все остальное жестко закодировано в самом userdb {...}
блоке выше, поэтому UID и GID, а также «домашний» адрес пользователя находятся внутри /var/spool/mail
и начинаются с того имени, которое использовалось для входа (при условии, что оно было определено в файле passwd заранее, в противном случае доступ будет запрещен).
mail_location
сообщает ему, что почтовые сообщения находятся в формате maildir и находятся в ~
(home), что соответствует «домашнему» пути, который он получил из userdb выше.
mail_gid/uid
снова устанавливает владельца почты для соответствующего системного пользователя, который должен владеть почтой; очевидно, в Postfix все должно быть так же.
Постфикс main.cf
:
virtual_mailbox_base = /var/spool/mail
virtual_mailbox_maps = hash:/etc/postfix/vmailboxes
virtual_uid_maps = static:8
virtual_gid_maps = static:12
Тот же базовый каталог, что и у Dovecot, /etc/postfix/vmailboxes
просто синтаксис <mail user account> <mail directory>/
такой, например, если он содержит , serverfault serverfault/
то Postfix будет знать, что любая почта, полученная по адресу , serverfault@domain
будет помещена в /var/spool/mail/serverfault
, что соответствует месту, где Dovecot будет искать ее при входе в систему с использованием serverfault
имени пользователя.
Опять же, нам virtual_uid/gid_maps
нужно установить владельца почты для системного пользователя, которого мы выбрали/создали заранее; он должен быть таким же, как у Dovecot.
Я не знаю никаких конкретных параметров ведения журнала, необходимых для отображения ошибок. Если я нарушу права доступа к виртуальной почтовой папке, мой Dovecot начнет кричать в журналах без какой-либо специальной настройки (в моем dovecot.conf нет параметров, связанных с ведением журнала):
Mar 07 12:54:04 sanctuary dovecot[2175]: imap(username): Error: chdir(/var/spool/mail/username/) failed: Permission denied (euid=8(mail) egid=12(mail) missing +x perm: /var/spool/mail/username, dir owned by 0:0 mode=0700)
Mar 07 12:54:04 sanctuary dovecot[2175]: imap(username): Error: chdir(/var/spool/mail/username) failed: Permission denied
Mar 07 12:54:04 sanctuary dovecot[2175]: imap(username): Error: opendir(/var/spool/mail/username) failed: Permission denied (euid=8(mail) egid=12(mail) missing +r perm: /var/spool/mail/username)
Mar 07 12:54:04 sanctuary dovecot[2175]: imap(username): Error: opendir(/var/spool/mail/username) failed: Permission denied (euid=8(mail) egid=12(mail) missing +r perm: /var/spool/mail/username)
Mar 07 12:54:04 sanctuary dovecot[2175]: imap(username): Error: stat(/var/spool/mail/username/tmp) failed: Permission denied (euid=8(mail) egid=12(mail) missing +x perm: /var/spool/mail/username, dir owned by 0:0 mode=0700)
Mar 07 12:54:04 sanctuary dovecot[2175]: imap(username): Error: stat(/var/spool/mail/username/tmp) failed: Permission denied (euid=8(mail) egid=12(mail) missing +x perm: /var/spool/mail/username, dir owned by 0:0 mode=0700)
Mar 07 12:54:04 sanctuary dovecot[2175]: imap(username): Error: stat(/var/spool/mail/username/tmp) failed: Permission denied (euid=8(mail) egid=12(mail) missing +x perm: /var/spool/mail/username, dir owned by 0:0 mode=0700)
Mar 07 12:54:09 sanctuary dovecot[2175]: imap(username): Error: chdir(/var/spool/mail/username/) failed: Permission denied (euid=8(mail) egid=12(mail) missing +x perm: /var/spool/mail/username, dir owned by 0:0 mode=0700)
Mar 07 12:54:09 sanctuary dovecot[2175]: imap(username): Error: chdir(/var/spool/mail/username) failed: Permission denied
Mar 07 12:54:09 sanctuary dovecot[2175]: imap(username): Error: stat(/var/spool/mail/username/.Sent Messages/tmp) failed: Permission denied (euid=8(mail) egid=12(mail) missing +x perm: /var/spool/mail/username, dir owned by 0:0 mode=0700)
Mar 07 12:54:09 sanctuary dovecot[2175]: imap(username): Error: stat(/var/spool/mail/username/tmp) failed: Permission denied (euid=8(mail) egid=12(mail) missing +x perm: /var/spool/mail/username, dir owned by 0:0 mode=0700)
Mar 07 12:54:09 sanctuary dovecot[2175]: imap(username): Error: stat(/var/spool/mail/username/.Sent Messages/tmp) failed: Permission denied (euid=8(mail) egid=12(mail) missing +x perm: /var/spool/mail/username, dir owned by 0:0 mode=0700)
Mar 07 12:54:09 sanctuary dovecot[2175]: imap(username): Error: stat(/var/spool/mail/username/tmp) failed: Permission denied (euid=8(mail) egid=12(mail) missing +x perm: /var/spool/mail/username, dir owned by 0:0 mode=0700)
Mar 07 12:54:10 sanctuary dovecot[2175]: imap(username): Error: stat(/var/spool/mail/username/.Sent Messages/tmp) failed: Permission denied (euid=8(mail) egid=12(mail) missing +x perm: /var/spool/mail/username, dir owned by 0:0 mode=0700)
Mar 07 12:54:10 sanctuary dovecot[2175]: imap(username): Error: stat(/var/spool/mail/username/tmp) failed: Permission denied (euid=8(mail) egid=12(mail) missing +x perm: /var/spool/mail/username, dir owned by 0:0 mode=0700)
То же самое происходит с Postfix, когда я пытаюсь отправить электронное письмо с испорченными разрешениями:
Mar 07 12:56:45 sanctuary postfix/virtual[2736]: warning: maildir access problem for UID/GID=8/12: create maildir file /var/spool/mail/username/tmp/1425729405.P2736.sanctuary: Permission denied
Mar 07 12:56:45 sanctuary postfix/virtual[2736]: warning: perhaps you need to create the maildirs in advance
Mar 07 12:56:45 sanctuary postfix/virtual[2736]: E752F186: to=<username@sanctuary>, relay=virtual, delay=0.05, delays=0.03/0.01/0/0.01, dsn=4.2.0, status=deferred (maildir delivery failed: create maildir file /var/spool/mail/username/tmp/1425729405.P2736.sanctuary: Permission denied)
решение2
Я предполагаю, что вы используете dovecot-lda
для доставки почты в Maildir. IIRC dovecot-lda
показывает вам подробную информацию о том, каких разрешений ему не хватает.
dovecot-lda
не имеет доступа к глобальному средству ведения журнала dovecot. Поэтому вам придется настроить ведение журнала dovecot-lda
отдельно. Поэтому вам придется искать "protocol lda {" в конфигурации dovecot и изменять параметры log_path
в info_log_path
соответствии с вашими потребностями. Если вы поместите сюда файлы, то они должны быть доступны для записи dovecot-lda, а если вы хотите использовать syslog (т. е. оставить параметры пустыми), вам придется изменить разрешение /dev/log.
Более подробную информацию можно найти на вики-сайте Dovecot:http://wiki2.dovecot.org/LDA
Кстати: вам не нужен SMTP и подробный журнал отправки в Postfix, если вы хотите выяснить, в чем проблема с локальной доставкой почты.