由于只读文件系统导致 Postfix Maildir 传递失败

由于只读文件系统导致 Postfix Maildir 传递失败

Postfix 无法传递消息并出现错误“只读文件系统”:

status=bounced (maildir delivery failed: create maildir file /home/deploy/Maildir/tmp/... : Read-only file system)

我的目录权限设置为 700 和 750,所有者设置为 deploy:deploy,正如此问题所建议的那样Postfix 无法传送到用户的 Maildir

    +-- /home/deploy: 700
        +-- Maildir: 750
            +-- cur: 750
            +-- new: 750
            +-- tmp: 750

编辑1:

的输出mount如下。rw除 外,其余均为tmpfs,即ro

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=240844k,nr_inodes=60211,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio,net_cls)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/vda1 on / type ext4 (rw,relatime,data=ordered)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=32,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=50044k,mode=700,uid=1000,gid=1000)

编辑2:

/home/deploy/Maildir/tmp/正在播放dev/vda1

$ df -h /home/deploy/Maildir/tmp
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G  2.7G   16G  15% /

编辑3:

重新启动服务器并运行dmesg -H以查看是否存在任何读/写或 I/O 错误。dmesg -H打印以下内容vda1

EXT4-fs (vda1): mounted filesystem with ordered data mode. Opts: (null)
EXT4-fs (vda1): re-mounted. Opts: (null)

编辑4:

的状态为SELinux已禁用:

$ sestatus
SELinux status:                 disabled

用户postfix无法写入/home/deploy/Maildir/tmp/

$ sudo -H -u postfix bash -c 'pwd && touch test'
/home/deploy/Maildir/tmp
touch: cannot touch ‘test’: Permission denied

答案1

初始错误消息似乎具有误导性,因为通过您最近的编辑,我们可以清楚地表明这是一个权限问题。

从您自己的答案链接到:

为了传递邮件,postfix 必须能够进入用户的主目录,

你说:

我的目录权限设置为 700 和 750,所有者设置为 deploy:deploy

但是 Postfix 以用户“postfix”的身份运行,因此显然没有/home/deploy具有权限rwx-------和所有者/组的postfix 进程可以进入deploy:deploy

所以你需要修复它。

如果/home/deploy仅用于电子邮件而不用于其他任何用途(没有用户访问),最简单的方法是将postfix所有文件的所有权授予用户。

相反,如果用户访问/home/deploy(我假设一个用户调用了deploy,并且你下面还有许多其他人/home,但如果可以的话,最好将用户的电子邮件存储在他们自己的目录之外,如果他们也应该将其用于其他需求),我会推荐类似的东西:

/home/deploy deploy:postfix rwxr-x---
    Maildir postfix:postfix rwx------
        cur postfix:postfix rwx------
        new postfix:postfix rwx------
        tmp postfix:postfix rwx------

或者

/home/deploy deploy:postfix rwxr-x---
     Maildir deploy:postfix rwxrwxs---
         cur deploy:postfix rwxrwxs---
         new deploy:postfix rwxrwxs---
         tmp deploy:postfix rwxrwxs---

(请注意s与上面的一个很大的区别,要确保所有文件都是用后缀组创建的,因此可由其读取/写入)

但这也取决于您是否希望用户使用其 shell 访问 Maildir。这还取决于电子邮件是如何被拾取的,也许是通过某个 IMAP 守护程序?

另一个选项是将 Postfix 配置为使用用户帐户 UID 进行传递,这样您就无需处理权限问题。这取决于 Postfix 使用的 MDA。

相关内容