私はUbuntu 14.04でspamassassinをrootとして実行しています。CheckやReportSpamなどのメソッドを呼び出すときは、チェックを実行する別のユーザーも渡しています。しかし、権限の問題が発生します。
spamd: Can't locate Mail/SpamAssassin/PerMsgLearner.pm:
Permission denied at /usr/share/perl5/Mail/SpamAssassin.pm line 644, <GEN14> line 7.
そのPerlスクリプトの644行目を見ると、別のPerlファイルをインポートしようとしていることがわかります。
require Mail::SpamAssassin::PerMsgLearner;
これは、root として実行する場合の問題ではありません。関数を root として実行する場合の問題は、bayes ファイル (時間の経過とともにスパムについて学習するためのファイル) が、存在しないディレクトリ (「nobody」ユーザーのホーム ディレクトリ) である /nonexistent に書き込まれることです。
そのため、root または別のユーザーとして SpamAssassin にベイズ ファイルをディスクに書き込ませることができず、学習機能が壊れてしまいます。
答え1
結局、次の行を/etc/mail/spamassassin
設定に追加して、spamassassin を再コンパイルする必要がありました。末尾にファイル名を含めることが重要です (例: bayes)。
bayes_path /path/to/dir/bayes