Maildir 文件夹的 Postix 或 Dovecot 调试日志、虚拟用户邮件文件夹所有者和权限

Maildir 文件夹的 Postix 或 Dovecot 调试日志、虚拟用户邮件文件夹所有者和权限

我无法找到有关 Maildir 以及文件夹所在位置所有者和权限的完整教程(如果有并且您已经找到),请分享。

无论如何,我想知道是否有办法使用 Postfix、Dovecot 日志或任何其他工具获取与 Maildir 配置相关的错误输出,例如(嘿,这个文件夹的所有者错误或缺少权限,甚至没有创建)

我知道你会告诉我:将你的文件夹和配置发送给我们,但我想知道如何在未来的其他情况下调试这个问题。

我真正想知道的是例如:我的虚拟用户有 /home/user/domain/usermail/Maildir

主目录、用户、域、用户邮件和 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--- 用户邮件文件夹的权限是否正确?

答案1

对于虚拟用户,您需要创建一个系统用户帐户并让其拥有邮件,然后在 Postfix 和 Dovecot 中配置该用户的 UID 和 GID。

以下是我的相关部分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 以及用户的“home”都在其中/var/spool/mail并以所使用的任何登录名开始(假设它事先在 passwd 文件中定义,否则访问将被拒绝)。

mail_location告诉它邮件采用 maildir 格式并位于~(home),这对应于它从上面的 userdb 获得的“home”路径。 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。IIRCdovecot-lda会向您显示有关缺少哪些权限的详细信息。

dovecot-lda无法访问 dovecot 的全局日志记录功能。因此,您必须单独配置日志记录。因此,您必须在 dovecot 配置中查找“protocol lda {”并根据需要dovecot-lda更改参数。如果您在此处放置文件,那么这些文件应该可以由 dovecot-lda 写入,如果您想使用 syslog(即保留参数为空),您必须修改 /dev/log 的权限。log_pathinfo_log_path

dovecot wiki 有更多详细信息:http://wiki2.dovecot.org/LDA

顺便说一句:如果您想找出本地邮件传递的问题,则不需要 smtp 和提交详细登录 postfix。

相关内容