procmail が設定ファイルを読み込めない場合でも終了コード 0 を返します。これを防ぐ方法は?

procmail が設定ファイルを読み込めない場合でも終了コード 0 を返します。これを防ぐ方法は?

この問題に対処するのは今回が初めてprocmailなので、次の質問が愚かであればお詫び申し上げます。製作に入るprocmail前にいくつかの基本的なテストをしています。そのうちの1つは完全に予期しない結果をもたらし、これは私のシナリオではほとんど役に立たなくなりました。

構成ファイルが読み取れない場合でも、終了時にprocmail終了コードを(true)に設定します。0私のシナリオでは、procmail設定ファイルが読み取れfetchmailない場合procmailは必要に応じてメッセージを処理(配信)できませんが、完了時に終了コードが0設定されます。fetchmailアップストリームが正常に配信され削除されました。全体的に、これはこれらのメッセージを失います。

この場合、権限は非常に複雑なので(fetchmail++以上、自分のユーザーアカウントで実行するなど)、何かを変更する必要があるときにprocmail誰かが権限に間違いを犯した可能性があります。これらのエラーは、上記の問題によってメッセージが失われる可能性があります。cyrdeliverlmtpfetchmailprocmailsuidsetgid

だから、設定ファイルを読み取れない場合は、どのように失敗して終了するのか疑問に思います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 "[email protected]"
ssl
pass "supersecret"
is "user1" here
no rewrite
mda "/usr/bin/procmail TARGET=user1 /etc/fetchmail/procmailrc"

root@morn /etc/fetchmail # cat testmessage
From: [email protected]
To: [email protected]
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

もちろん最後の2行が問題だ。誰でもそれをバイパスする方法を知っていますか?もちろん、権限を変更すると機能しますが、私が明示的に要求するわけではありません。私はエラー(私のエラーや他の人のエラー)が発生した場合は、より強力な解決策が必要です。

ベストアンサー1

Procmailが成功を返した場合は、明らかに意図した場所ではなく、どこかにメッセージを正常に配信しました。置換が使い果たされてどこにも渡せない場合、失敗が発生します。メッセージがどこに行くのかを知るには、ログファイルを確認してください。ログファイルを明示的に設定しないと、標準エラーとして送信されます。ただし、明示的なログ設定がない場合は、主に実際の転送ログのみが表示されます。

From [email protected]  Wed Apr 1, 2022 09:10:11 UTC
 Subject: Your inheritance from Nigeria
  Folder: /var/mail/fetchmail                       12524

デフォルトでは、Procmailは追加の指示DEFAULTなしに単に送信されます。この-mオプションは設定ファイルを必要とし、読み取れない場合はエラー(終了コード73)で失敗しますが、最終的には目的の機能ではない可能性があるいくつかの一般的な配信機能がオフになります。

全体的に、あなたの構成は非常に脆弱なようです。それ自体はProcmailでは理解されていないため、実際にはその情報を処理するファイルがTARGET=user必要です。問題のユーザーに明示的に配信し、ロールバックなどを強力に処理するprocmailrcために、定期的な配信メカニズムが使用されます。-d user(しかし、私はFetchmailについて十分に知らないので、ここで適切に使用するものに関する情報を得ることはできません。)

おすすめ記事