メールゲートウェイサーバーは、説明されているようにMailScanner + Postfix + SpamAssassinを使用するように構成されています ここ 、および MailWatch をWebフロントエンドとして使用します。
Sa-learnをMailWatchから実行すると(postfixユーザーとして実行されます)、次のエラーがスローされます。
SA Learn: config: path "/root/.spamassassin" is inaccessible: Permission denied, Learned tokens from 0 message(s) (1 message(s) examined)
「Sudo-upostfix spamassassin --lint -D」を実行すると、次の情報が得られます。
dbg: config: read file /etc/mail/spamassassin/mailscanner.cf
warn: config: path "/root/.spamassassin" is inaccessible: Permission denied
dbg: config: mkdir /root/.spamassassin failed: mkdir /root/.spamassassin: Permission denied at /usr/lib/Perl5/site_Perl/5.8.8/Mail/SpamAssassin.pm line 1577
dbg: config: Permission denied
dbg: config: using "/etc/MailScanner/spam.assassin.prefs.conf" for user prefs file
ベイズトークンは正しく学習されますが、このエラーは小さな煩わしさであり、修正したいと思います... SpamAssassinに構成と設定の/root/.spamassassin/ディレクトリをチェックしないように強制するか、MailWatchを修正しますそのため、sa-learnを正しく呼び出し、このエラーをスローしません。
本当の修正は、spamassassinで「ユーザーごとの」設定を無効にし、Baysean DBをグローバルに設定することですが、簡単なパッチは、Sudoに「-H」オプションを追加して、postfixのホームディレクトリを使用することです。接尾辞。
これはバグではありません。無効なユーザーでsa-learnコマンドを実行しているためです。たとえば、私のセットアップでは標準のdebian-spamdユーザーを使用しています。
# sa-learn -u debian-spamd --dbpath /var/lib/spamassassin/.spamassassin/bayes --dump magic
0.000 0 3 0 non-token data: bayes db version
0.000 0 84 0 non-token data: nspam
0.000 0 6565 0 non-token data: nham
0.000 0 15128 0 non-token data: ntokens
0.000 0 1510837441 0 non-token data: oldest atime
0.000 0 1519232775 0 non-token data: newest atime
0.000 0 0 0 non-token data: last journal sync atime
0.000 0 0 0 non-token data: last expiry atime
0.000 0 0 0 non-token data: last expire atime delta
0.000 0 0 0 non-token data: last expire reduction count
そしてアカウントの場合
# sa-learn --ham -u debian-spamd --showdots --dir /var/vmail/mydomain.com/support/cur/*
.
Learned tokens from 1 message(s) (1 message(s) examined)
サーバーとcronに20の電子メールアカウントがあり、ハムとスパムを照合しますが、エラーは発生しません。セットアップとuser:groupが関連するファイル/ディレクトリで正しいことを確認してください。
修正方法に関するクイックチュートリアルへのリンク https://www.devcu.com/forums/topic/745-spamassassin-is-inaccessible-permission-denied/
これは回避策になる可能性があります。
# chmod o+x /root
# mv -f /root/.spamassassin /root/.spamassassin.err
# ln -s /var/spool/MailScanner/spamassassin /root/.spamassassin
# mkdir -p /var/spool/MailScanner/spamassassin
# chown postfix.Apache /var/spool/MailScanner/spamassassin
# chmod 770 /var/spool/MailScanner/spamassassin
代わりにspamassassinデーモンspamdを使用するべきではありませんか?次に、spamassassinの代わりにspamcコマンドを使用します。基本的に、起動スクリプトからspamdを実行し、メールスキャナーからspamcを使用します。
このように--dbpathパラメータを追加してみましたか?
sa-learn --dbpath /var/lib/amavis/.spamassassin/ ....
原因
原因は、spamassassin(sa-learn、spamc、spamd、spampdなどによって呼び出されます)が$ HOMEからユーザーごとの構成ファイルを読み取ろうとすることです。
これは、構成オプションallow_user_rulesが0に設定されている場合でも発生します(IMOこれはおそらくバグであり、long時間)。
(権限のために)このフォルダーが見つからないため、フォルダーの作成を試みます。
Cron内でsa-learnを実行する人は、実行が成功した場合でも失敗の電子メールを受け取るため、これは非常に煩わしいことを知っています。エラーをグーグルで検索してくださいconfig:path "/root/.spamassassin" is inaccessible:Permission deniedそしてこれが影響する人の数(そして彼らが提案する安全でない修正)を見てください。 cronの唯一の安全な解決策は、cronを点火し、stdoutとstderrを/ dev/nullにパイプすることでしたが、それは少し極端です。
これは、渡される-C、-p、または--dbpathオプションに関係なく行われるため、コマンドラインオプションまたはグローバル構成で修正することはできません。
修正
私にとってうまくいった解決策は、sa-learnを呼び出して、spamassassinを実行しているroot以外のユーザーが書き込むことができる場所を指す一時的な$ HOME環境変数を渡すことです。私の場合、これは/ var /です。キャッシュ/ spampd:例.
HOME=/var/cache/spampd sa-learn --spam /var/vmail/jason/.SPAM/cur