即使無法讀取其配置文件,procmail 也會返回退出程式碼 0:如何防止?
我是
procmail
第一次處理,所以如果以下問題很愚蠢,我深表歉意。在投入procmail
生產之前,我正在做一些基本的測試。其中一個產生了一個完全出乎意料的結果,這使得它在我的場景中幾乎毫無價值:當
procmail
無法讀取其配置文件時,它仍然會0
在完成時將其退出程式碼設置為 (true)。這是災難性的,因為在我的場景中,我使用procmail
的是從內部執行的 MDAfetchmail
。如果procmail
無法讀取其配置文件,則無法根據需要處理(傳遞)消息,而是0
在完成時設置退出程式碼;fetchmail
將此解釋為成功傳遞並刪除上游相應的消息。總之,這會導致這些消息失去。這種情況下的權限非常複雜(
fetchmail
++ over ,在自己的使用者帳戶下執行,存在and等等procmail
),所以當需要更改某些內容時,很可能有人錯誤地使用了權限。由於上述問題,此類錯誤很可能導致消息失去。cyrdeliver``lmtp``fetchmail``procmail``suid``setgid
因此,如果它無法讀取其配置文件,我想知道如何以
procmail
失敗退出(退出程式碼以外的程式碼)。0
要了解這是關於什麼的,請考慮以下終端會話(刪除了不相關的行)。請注意,配置目錄中的所有權/權限是故意錯誤的,因為這是我的測試案例。
root@morn /etc/fetchmail # whoami root root@morn /etc/fetchmail # dir total 52K drwx------ 2 fetchmail root 4.0K 2022-01-23 10:09 . drwxr-xr-x 123 root root 12K 2022-01-22 17:17 .. -rw------- 1 fetchmail root 2.4K 2022-01-23 10:09 fetchmailrc -rw------- 1 root mail 282 2022-01-23 02:49 procmailrc -rw-r--r-- 1 root root 110 2022-01-23 00:36 testmessage root@morn /etc/fetchmail # dir `which procmail` -rwsr-sr-x 1 root mail 92K 2017-11-16 23:42 /usr/bin/procmail root@morn /etc/fetchmail # cat /etc/systemd/system/pp-fetchmail.service User=fetchmail Group=mail ExecStart=/usr/bin/fetchmail -f /etc/fetchmail/fetchmailrc --pidfile /run/fetchmail/fetchmail.pid --syslog root@morn /etc/fetchmail # cat fetchmailrc poll pop3.example.com proto pop3 bad-header accept user "user1@example.com" ssl pass "supersecret" is "user1" here no rewrite mda "/usr/bin/procmail TARGET=user1 /etc/fetchmail/procmailrc" root@morn /etc/fetchmail # cat testmessage From: nobody@nowhere.com To: somebody@somewhere.com Subject: Test message This is a test message. root@morn /etc/fetchmail # sudo -u fetchmail -g mail /usr/bin/procmail /etc/fetchmail/procmailrc < testmessage && echo "procmail exited 0" procmail: Couldn't read "/etc/fetchmail/procmailrc" procmail exited 0
當然,最後兩行是問題所在。有誰知道如何規避它?當然,修復權限會使其正常工作,但這是我明確不要求的。我希望有一個更強大的解決方案,以防出現錯誤(我的或其他人的)。
如果 Procmail 返回成功,則它成功地將消息傳遞到某個地方,儘管顯然不是您想要的。當它用完備份並且無法在任何地方傳遞時,就會發生故障。要找出消息的去向,請檢查日誌文件(如果您沒有明確配置日誌文件,則會發出標準錯誤)。但是,在沒有任何顯式日誌配置的情況下,您將主要只看到實際的傳遞日誌,例如
From sender@example.com Wed Apr 1, 2022 09:10:11 UTC Subject: Your inheritance from Nigeria Folder: /var/mail/fetchmail 12524
開箱即用的 Procmail 將
DEFAULT
在沒有任何其他說明的情況下簡單地發送到。該-m
選項需要一個配置文件,如果無法讀取,將失敗並顯示錯誤(退出程式碼 73),但會關閉一些正常傳遞功能,這最終可能不是您想要的。總體而言,您的配置似乎相當脆弱。
TARGET=user
它本身對 Procmail 沒有任何意義,所以你真的必須有一個procmailrc
文件來處理這些資訊。正常傳遞機制將用於-d user
明確傳遞給相關使用者,並穩健地處理回退等。(不過,我對 Fetchmail 不夠熟悉,因此無法就在這裡使用什麼是正確的。)