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。