もし似たような質問をした方がいらっしゃるのかわかりませんね。
現在、電子メールがスパムフォルダの内外に移動したときにスパム/ハムとして認識できるように、電子メールをスパムフィルタにプッシュしようとしています。そのために、私は次のガイドに従いました。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