Postfix 认为它位于只读文件系统上?

Postfix 认为它位于只读文件系统上?

我想对我的 mail.log(Ubuntu 20.04 LTS 上的 postfix 3.2.13)运行一些分析,包括更新无法送达电子邮件的数据库,因此我编写了脚本,从通用 /var/log logrotate 脚本中排除了 mail.log 并创建了一个新的 /etc/lorotate.d/mail_log 在后旋转部分运行脚本。尽管脚本被调用,但它无法生成 db 文件:

postfix/postmap[540039]: fatal: open /etc/postfix/bad_recipients.db: Read-only file system

考虑到这实际上可能是一个权限问题,我为 syslog 用户添加了 sudoers 规则(/var/log/mail 文件由 syslog 用户拥有)并修改了 logrotate 脚本:

/var/log/mail.log
{
        rotate 30
        daily
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                /usr/lib/rsyslog/rsyslog-rotate
                sudo /usr/local/sbin/mailfail.sh
        endscript
}

但我仍然在每个 mail.log ( ) 的顶部报告相同的错误,Read-only file system并且数据库未更新。

该脚本正在执行表明它不是脚本上的 chroot 或权限或 sudo 配置错误问题。正在写入的其他文件具有 syslog 用户(拥有日志文件的用户)的权限。

Rsyslogd 似乎是链中唯一受 apparmor 配置文件约束的可执行文件 - 但将路径 /etc/postfix* (rwk) 添加到配置文件并从强制切换到抱怨对错误没有影响。

(从命令运行脚本按预期工作)

答案1

这可能是由 systemd 的保护功能引起的,该功能是为logrotatePostfix 启用的。尤其,ProtectSystem,如果设置为“完整”或“严格”,将导致/etc只读。

您应该将任何您想要修改的内容移至var,或者如果您无法避免更改/etc,请覆盖相关单位 ( systemctl edit) 以更改ProtectSystem为“true”,这会保护/usr但不会/etc

相关内容