Sieve スクリプトから Bash スクリプトを呼び出す

Sieve スクリプトから Bash スクリプトを呼び出す

もし似たような質問をした方がいらっしゃるのかわかりませんね。
現在、電子メールがスパムフォルダの内外に移動したときにスパム/ハムとして認識できるように、電子メールをスパムフィルタにプッシュしようとしています。そのために、私は次のガイドに従いました。https://workaround.org/ispmail/stretch/filtering-out-spam-with-rspamd「ユーザー操作による学習」セクションで。
sieve スクリプトは指示に従って作成され、sievec で処理され、指示に従って権限が付与されました。これにより、2つのシェルスクリプトも作成されました。唯一の違いは、ユーザーまたはグループ「vmail」がないことです。私はそれを私たちのシステムの対応物であるdovecot:rootに設定しました。フォルダは次のとおりです。

drwxr-xr-x 2 dovecot root 4,0K Mai  7 10:52 .
drwxr-xr-x 3 root    root 4,0K Jul 29  2019 ..
-rw-r--r-- 1 dovecot root   85 Mai  7 10:47 learn-ham.sieve
-rw-r--r-- 1 root    root  246 Mai  7 10:47 learn-ham.svbin
-rw-r--r-- 1 dovecot root   86 Mai  7 10:47 learn-spam.sieve
-rw-r--r-- 1 root    root  250 Mai  7 10:47 learn-spam.svbin
-rw-r--r-- 1 dovecot root  509 Mär 16 13:57 mailfilter.sieve
-rw-r--r-- 1 root    root  398 Mai  6 18:02 mailfilter.svbin
-rwx------ 1 dovecot root   41 Mai  7 10:52 rspamd-learn-ham.sh
-rwx------ 1 dovecot root   42 Dez 14 10:42 rspamd-learn-spam.sh

シーブスクリプトが実行されてシェルスクリプトを呼び出すと、次のエラーが発生します。

Mai 12 17:16:28 mail dovecot[4119]: imap(user)<8778><xIGQ8nSlFMZ/AAAB>: Fatal: execvp(/etc/dovecot/sieve/global/rspamd-learn-spam.sh) failed: Permission denied
Mai 12 17:16:28 mail dovecot[4119]: imap(user)<8778><xIGQ8nSlFMZ/AAAB>: Error: write(program stdin) failed: Broken pipe
Mai 12 17:16:28 mail dovecot[4119]: imap(user)<8778><xIGQ8nSlFMZ/AAAB>: program `/etc/dovecot/sieve/global/rspamd-learn-spam.sh' terminated with non-zero exit code 84
Mai 12 17:16:28 mail dovecot[4119]: imap(user)<8778><xIGQ8nSlFMZ/AAAB>: Error: sieve: pipe action: failed to pipe message to program `rspamd-learn-spam.sh': refer to server log for more information. [2020-05-12 17:16:28]
Mai 12 17:16:28 mail dovecot[4119]: imap(user)<8778><xIGQ8nSlFMZ/AAAB>: sieve: left message in mailbox 'Junk'
Mai 12 17:16:28 mail dovecot[4119]: imap(user)<8778><xIGQ8nSlFMZ/AAAB>: Error: sieve: Execution of script /etc/dovecot/sieve/global/learn-spam.sieve failed

「サーバーログ」が何を意味するのか分からないという以外に、問題が何であるかはわかりません。もちろん、これは権限エラーのように見えますが、どうすれば解決できますか?

システム情報:Dovecot 2.3.4.1とpiginghole 0.5.4を含むDebian 10.4
編集する:
間違いを見つけました。 sieve_pipe_bin_dir を無効なフォルダに設定しました。これで、2つの.shファイルを含むフォルダを指していますが、まだ次のエラーが発生します。

Mai 22 15:40:06 mail dovecot[18547]: imap(user)<18686><57dcxDymXJ5/AAAB>: Fatal: execvp(/etc/dovecot/sieve/global/rspamd-learn-spam.sh) failed: Permission denied
Mai 22 15:40:06 mail dovecot[18547]: imap(user)<18686><57dcxDymXJ5/AAAB>: Error: write(program stdin) failed: Broken pipe
Mai 22 15:40:06 mail dovecot[18547]: imap(user)<18686><57dcxDymXJ5/AAAB>: program `/etc/dovecot/sieve/global/rspamd-learn-spam.sh' terminated with non-zero exit code 84
Mai 22 15:40:06 mail dovecot[18547]: imap(user)<18686><57dcxDymXJ5/AAAB>: Error: sieve: pipe action: failed to pipe message to program `rspamd-learn-spam.sh': refer to server log for more information. [2020-05-22 15:40:06]
Mai 22 15:40:06 mail dovecot[18547]: imap(user)<18686><57dcxDymXJ5/AAAB>: sieve: left message in mailbox 'Junk'
Mai 22 15:40:06 mail dovecot[18547]: imap(user)<18686><57dcxDymXJ5/AAAB>: Error: sieve: Execution of script /etc/dovecot/sieve/global/learn-spam.sieve failed

どの所有者を設定しても(root:rootまたはdovecot:root、「人間のユーザー」ではない唯一の他のユーザーは_apt、bin、nslcd、daemon、dovenull、www-dataなど)原因になる可能性があるすべてのアイデアですか?

編集2:
それでは、アプローチを変更してrspamcに直接パイプしようとしています。私のlearn-spam.sieveスクリプトは次のとおりです。

require ["vnd.dovecot.pipe", "copy", "imapsieve"];
pipe :copy "rspamc" ["learn_spam"];

だから私は90-plugin.confを次のように変更しました。

sieve_pipe_bin_dir = /usr/bin/rspamc

rspamc の位置。これでエラーが発生します。

Jun 03 09:48:34 mail dovecot[1536]: imap(user)<10486><xVI6QSmnpLN/AAAB>: Error: sieve: pipe action: failed to pipe message to program: program `rspamc' not found
Jun 03 09:48:34 mail dovecot[1536]: imap(user)<10486><xVI6QSmnpLN/AAAB>: sieve: left message in mailbox 'Junk'
Jun 03 09:48:34 mail dovecot[1536]: imap(user)<10486><xVI6QSmnpLN/AAAB>: Error: sieve: Execution of script /etc/dovecot/sieve/global/learn-spam.sieve failed

何が間違っていますか?それとも、pidgeonholeパイプラインコマンドはシェルスクリプトのみを呼び出すことができますか?

ベストアンサー1

うまくいかないものが見つかったようです。何らかの理由で、dovecotにはシェルスクリプトに対する実行権限がないようです。したがって、解決策は実際にsudo -u dovecot chmod +x *.sh
私の場合の正しいファイル権限は次のとおりです。

/etc/dovecot/sieve/global # ls -la
insgesamt 44K
drwxr-xr-x 2 dovecot root 4,0K Jul  8 07:33 .
drwxr-xr-x 3 root    root 4,0K Jul 29  2019 ..
-rw-r--r-- 1 dovecot root  144 Jun  5 10:06 learn-ham.sieve
-rw-r--r-- 1 root    root  306 Jun  5 10:07 learn-ham.svbin
-rw-r--r-- 1 dovecot root   86 Jun 17 15:45 learn-spam.sieve
-rw-r--r-- 1 root    root  250 Jun 17 15:45 learn-spam.svbin
-rw-r--r-- 1 dovecot root  509 Mär 16 13:57 mailfilter.sieve
-rw-r--r-- 1 dovecot root  462 Jul 29  2019 mailfilter.sieve~
-rw-r--r-- 1 root    root  398 Mai  6 18:02 mailfilter.svbin
-rwxrwxr-x 1 dovecot root   41 Jun  5 10:25 rspamd-learn-ham.sh
-rwxrwxr-x 1 dovecot root   42 Jul  8 07:33 rspamd-learn-spam.sh

おすすめ記事