防止某些用户使用 procmailrc

防止某些用户使用 procmailrc

我们有一个在 Debian 10 上运行 Postfix(SMTP)和 Dovecot(POP/IMAP)的电子邮件服务器。用户无法直接登录(SSH),但可以通过 NFS 访问他们的家。

我们希望使用 Procmail 对 SpamAssassin ( X-Spam-Flag: YESheader ) 标记为垃圾邮件的邮件进行分类,使用全局文件,将邮件分类到每个用户的单独文件夹中/etc/procmailrc。这似乎很容易做到,如下所示https://serverfault.com/questions/488044/send-spam-mail-to-a-special-folder-using-postfix,举个例子。

问题是:出于安全原因,我们不想允许用户使用$HOME/.procmailrc文件。有没有办法阻止$HOME/.procmailrc大多数用户(除了一些受信任的用户)激活 Procmail?

编辑

考虑到 tripleee 的回答,我可以编写一个/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

答案1

强制 Procmail 立即停止的一种方法是直接发送消息。/etc/procmailrc我猜你首先明确地想要这样做DROPPRIVS

DROPPRIVS=yes
:0:
$DEFAULT

根据您DEFAULT设置的本地投递操作,也许可以删除第二个冒号,以免在投递过程中尝试锁定目的地。如果您的邮箱是传统的/var/spool/mail/usernameMbox 线轴,则确实需要锁定。

顺便说一下,强制Procmail立即终止的另一种方法是给特殊变量赋值HOST。(如果使用多个文件名参数调用Procmail,并且当前文件不是最后一个,它仍将处理任何剩余的文件。)

另外,DELIVERED=yes它本身不会阻止 Procmail 处理当前配方文件的其余部分,但与其结合HOST=''使用可强制 Procmail 向调用者报告成功传送。

更新:您的check_allowed_user脚本似乎是一种可行的方法,但如果您可以将检查/etc/procmailrc直接嵌入其中,可能会更有效;如果您的用户组相当有限,也许可以这样做

DROPPRIVS=yes
:0:
* ! LOGNAME ?? ^(arnie|bertie|cecilia)$
$DEFAULT

其中arnie,、bertiececilia是您允许的用户。

通常,您会想要尽量避免每次交付都运行一个外部二进制文件,尽管如今的服务器可能可以很好地处理它(在一定程度上!)

答案2

Procmail 本身不具备任何这方面的功能。您必须自己修改 procmail 代码并重新编译,或者围绕 procmail 编写一些巧妙的包装脚本来执行您想要的操作。

相关内容