我们有一个在 Debian 10 上运行 Postfix (SMTP) 和 Dovecot (POP/IMAP) 的电子邮件服务器。用户不能直接登录它 (SSH),但可以通过 NFS 访问他们的家。
我们想使用 Procmail 对被 SpamAssassin(X-Spam-Flag: YES
标头)标记为垃圾邮件的邮件进行排序,并使用全局文件在每个用户的单独文件夹中/etc/procmailrc
。这似乎很容易做到,如https://serverfault.com/questions/488044/send-spam-mail-to-a-special-folder-using-postfix所示,举个例子。
$HOME/.procmailrc
问题是:出于安全原因,我们不想让我们的用户使用文件。有没有办法阻止 Procmail$HOME/.procmailrc
为大多数用户激活,除了一些受信任的用户?
编辑:
考虑到三人组的回答,我可以编写一个/etc/procmailrc
包含特权用户测试的文件(即允许拥有本地.procmailrc
文件的用户),如下所示:
# /etc/procmailrc
# if the e-mail is flagged as spam, deliver it to $JUNK and stop
:0:
* ^X-Spam-Flag: YES
$JUNK
# if the user is NOT allowed to have a $HOME/.procmailrc,
# then deliver the message to the default mailbox and stop
:0W:
# check whether the user is allowed to have a .procmailrc file
* ! ? check_allowed_user $LOGNAME
$DEFAULT
# else, do nothing (and $HOME/.procmailrc will be activated)
你认为这是要走的路吗?如果是这样,我只需要找到一种简单而可靠的方法来进行check_allowed_user
测试。
一种强制 Procmail 立即停止的方法是简单地传递消息。在里面
/etc/procmailrc
我猜你明确地想DROPPRIVS
先。根据您的本地
DEFAULT
交付操作设置,可能会删除第二个冒号以在交付期间不尝试锁定目的地。如果您的邮箱是传统的/var/spool/mail/username
Mbox 线轴,它们确实需要锁定。作为记录,强制 Procmail 立即终止的另一种方法是为特殊变量赋值
HOST
。(如果使用多个文件名参数调用 Procmail 并且当前文件不是最后一个文件,它仍将处理任何剩余的文件。)也有
DELIVERED=yes
它本身不会阻止 Procmail 处理当前配方文件的其余部分,但结合使用HOST=''
可以强制 Procmail 向调用者报告成功交付。更新:您的
check_allowed_user
脚本似乎是一种可行的方法,但如果您可以直接将检查嵌入其中,它可能会更有效/etc/procmailrc
;如果您的用户群相当有限,也许像其中
arnie
、bertie
和cecilia
是您的允许用户。为每次交付运行外部二进制文件是您通常希望避免的事情,即使今天的服务器可能可以很好地处理它(在一定程度上!)
Procmail 本身对此没有任何规定。您必须自己修改 procmail 代码并重新编译,或者围绕 procmail 制作一些巧妙的包装脚本来满足您的需求。