Ubuntu

Postfix 認為它在只讀文件系統上?

  • September 22, 2021

我想對我的 mail.log(Ubuntu 20.04 LTS 上的 postfix 3.2.13)執行一些分析,包括更新無法送達的電子郵件數據庫,所以我編寫了腳本,從通用 /var/log logrotate 腳本中排除了 mail.log 並創建了一個新的 /etc/lorotate.d/mail_log 在 post-rotate 部分執行腳本。雖然腳本被呼叫,但它無法生成 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) 添加到配置文件並從強制切換到抱怨對錯誤沒有影響。

(從命令執行腳本按預期工作)

這可能是由 systemd 的保護功能引起的,這些功能為logrotatePostfix 啟用。特別是ProtectSystem,如果設置為“full”或“strict”,將導致/etc只讀。

您應該將任何您希望能夠修改的內容移動到var,或者如果您無法避免更改/etc,請覆蓋相關單位 ( systemctl edit) 以更改ProtectSystem為“true”,這將保護/usr但不會/etc

引用自:https://unix.stackexchange.com/questions/670080