我将邮件网关服务器配置为使用此处所述的 MailScanner + Postfix + SpamAssassin,并将MailWatch作为 Web 前端。
从 MailWatch 运行 sa-learn 时(它以 postfix 用户身份运行),它会抛出以下错误:
SA Learn: config: path "/root/.spamassassin" is inaccessible: Permission denied, Learned tokens from 0 message(s) (1 message(s) examined)
运行“sudo -u postfix 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 中禁用“per-user”配置并全局设置 Baysean DB,但一个快速的补丁是将“-H”选项添加到 sudo 以使用 postfix 的主目录,它应该有权写入为后缀。
这不是错误,而是因为您正在使用无效用户运行 sa-learn 命令。例如,我的设置使用标准的 debian-spamd 用户。
对于帐户
我在服务器上有 20 个电子邮件帐户和 crons 来匹配火腿和垃圾邮件,而从来没有错误。确保您的设置和用户:组在相关文件/目录上正确。
链接到有关如何修复 https://www.devcu.com/forums/topic/745-spamassassin-is-inaccessible-permission-denied/的快速教程
这可能是一种解决方法:
你不应该改用 spamassassin 守护进程spamd吗?然后你会使用spamc命令而不是 spamassassin。基本上,从它的启动脚本运行spamd ,并从你的邮件扫描器中使用spamc。
您是否尝试像这样添加 --dbpath 参数?
原因
原因是 spamassassin(由 sa-learn、spamc、spamd、spampd 等调用)试图从 $HOME 读取每个用户的配置文件。
即使配置选项allow_user_rules设置为 0 也会发生这种情况(IMO 这可能是一个错误,并且已经存在了很长时间)。
由于找不到此文件夹(由于权限),因此它会尝试创建该文件夹。
那些在 cron 中运行 sa-learn 的人都知道这很烦人,因为即使成功运行我们也会收到一封失败的电子邮件。只需谷歌错误配置:路径“/root/.spamassassin”不可访问:权限被拒绝,看看有多少人受到影响(以及他们建议的不安全修复)。cron 唯一安全的解决方案是忽略它并将 stdout 和 stderr 管道传输到 /dev/null,但这有点极端。
无论传递什么 -C 或 -p 或 --dbpath 选项,它都会执行此操作,因此您无法在命令行选项或全局配置中修复它。
对我有用
的解决方案是调用 sa-learn 并传递一个临时 $HOME 环境变量,指向运行 spamassassin 的非 root 用户可以写入的位置,在我的情况下是 /var/cache/spampd :例如