我有一个运行 sendmail 8.16 的 FreeBSD 机器。我有几个系统用户(测试机器人):robot1
,robot2
并且robot3
我希望他们由电子邮件控制。首先,他们应该能够接收电子邮件。所以我有以下几行/etc/mail/aliases
:
robot1: "| /usr/local/project/script"
robot2: "| /usr/local/project/script"
robot3: "| /usr/local/project/script"
这些机器人应该以完全相同的方式处理邮件,因此它们都使用相同的脚本。
问题是:sendmail 总是使用伪造的 uid 26(即“mailnull”特殊用户)为所有三个收件人调用该脚本。看起来 sendmail 守护进程在启动外部脚本之前会降级其在 fork 上的有效 gid/uid。这是完全合理的,但是:
问题是:如何使 sendmail 以各自的接收用户身份运行脚本,即robot1
当消息是 for 时robot1@localhost
、robot2
当消息是 for 时robot2@localhost
以及robot3
当消息是 for 时运行脚本robot3@localhost
?
显而易见的解决方案是拥有脚本的三个副本,使每个副本都有其各自的用户,并为每个机器人用户为其脚本副本添加别名。我想这应该可以解决问题,但是有点丑陋。所以我想知道是否有更好、更优雅的解决方案?
我会简单地使用
sudo
.在默认安装中,sendmail 以 user 身份执行别名脚本
mailnull
。可以允许mailnull
use仅sudo
冒充这些用户,并且仅出于运行该特定脚本的目的而这样做。首先,成为
root
,然后运行visudo
并编辑:现在将您的内容编辑
/etc/mail/aliases
为:并做