この問題に対処するのは今回が初めてprocmail
なので、次の質問が愚かであればお詫び申し上げます。製作に入るprocmail
前にいくつかの基本的なテストをしています。そのうちの1つは完全に予期しない結果をもたらし、これは私のシナリオではほとんど役に立たなくなりました。
構成ファイルが読み取れない場合でも、終了時にprocmail
終了コードを(true)に設定します。0
私のシナリオでは、procmail
設定ファイルが読み取れfetchmail
ない場合procmail
は必要に応じてメッセージを処理(配信)できませんが、完了時に終了コードが0
設定されます。fetchmail
アップストリームが正常に配信され削除されました。全体的に、これはこれらのメッセージを失います。
この場合、権限は非常に複雑なので(fetchmail
++以上、自分のユーザーアカウントで実行するなど)、何かを変更する必要があるときに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 "[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について十分に知らないので、ここで適切に使用するものに関する情報を得ることはできません。)
答え2
この場合、呼び出しはラップします"/usr/bin/procmail TARGET=user1 /etc/fetchmail/procmailrc"
が、事前にプロファイル権限チェックを実行するラッパーシェルスクリプトを作成します。設定ファイルが読み取れない場合は1が返され、読み込めば呼び出しが"/usr/bin/procmail TARGET=user1 /etc/fetchmail/procmailrc"
実行されて返されます。
次に、fetchmailrc
ファイルで次の操作を行います。
mda "/path/to/your/wrapper/script"