我正在尝试实施反垃圾邮件解决方案,并根据我从其他问题的答案中获得的建议,我决定采用 sendmail+mimedefang+spamassassin。
但目前我遇到了相当简单的权限问题:
默认情况下,MIMEdefang 以“defang”用户身份运行,因此它使用以下权限创建套接字:
srwxr-x--- 1 defang defang 0 3月3日 16:42 /var/spool/MIMEDefang/mimedefang.sock
如果 sendmail 以 root 身份运行,则没有问题,但如果以非特权用户身份运行,则它会抱怨 mimedefang 套接字缺乏权限:
NOQUEUE:SYSERR(root):/etc/mail/sendmail.cf:第 1870 行:Xmimedefang:本地套接字名称 /var/spool/MIMEDefang/mimedefang.sock 不安全:权限被拒绝
我已经尝试过以下解决方案来解决这个问题:
以 root 身份运行 sendmail。工作正常,但不太可接受,因为我想避免以 root 身份运行守护进程
以 defang 身份运行 sendmail 或以与 sendmail 相同的用户身份运行 mimedefang。这似乎没问题,但也希望避免这种情况,因为配置文件、目录等太多,需要更改权限和/或所有权,因此整个过程很容易出错。
只需更改套接字文件的权限,但每次启动 mimedefang 时都会重新创建它。我可以相应地修改 /etc/init.d 中的相应脚本,但我还是不想避免这种情况,因为我的更改可能会随着这些软件包的未来更新而丢失。
您能建议其他解决方案吗?sendmail 或 mimedefang 中是否有与权限相关的可用选项?
答案1
Sendmail 以 root 身份运行,并在需要以其他用户身份运行进程时分叉(smmsp、smmta 等)。所以,是的,以 root 身份运行它,并确保您正在运行最新版本。如果您想以非 root 身份运行 sendmail,请将该用户设为 defang 组的一部分。请注意,defang 组还具有套接字的读取权限。
编辑:(阅读下面的评论后)使套接字组可读写你必须使用 umask在启动搅拌器之前进行适当的操作(请参阅所提供链接中的注释部分)。
答案2
就我而言,我不需要设置创建套接字的 umask。我只需要使用与 sendmail 相同的用户和组运行 opendkim(RunAsUid
,RunAsGid
),并让用于套接字的目录具有600
权限(S_IRUSR|S_IWUSR
)。
你可以在 sendmail 源中检查一下[1]:
- sendmail/milter.c
errno = safefile(colon, RunAsUid, RunAsGid, RunAsUserName, sff,
S_IRUSR|S_IWUSR, NULL);
...
else if (errno != 0)
{
/* if not safe, don't create */
save_errno = errno;
if (tTd(64, 5))
sm_dprintf("X%s: local socket name %s unsafe\n",
m->mf_name, colon);
- libsmutil/safefile.c
/*
** SAFEFILE -- return 0 if a file exists and is safe for a user.
**
** Parameters:
** fn -- filename to check.
** uid -- user id to compare against.
** gid -- group id to compare against.
** user -- user name to compare against (used for group
** sets).
** flags -- modifiers:
** SFF_MUSTOWN -- "uid" must own this file.
** SFF_NOSLINK -- file cannot be a symbolic link.
** mode -- mode bits that must match.
** st -- if set, points to a stat structure that will
** get the stat info for the file.
**
** Returns:
** 0 if fn exists, is owned by uid, and matches mode.
** An errno otherwise. The actual errno is cleared.
**
** Side Effects:
** none.
*/
int
safefile(fn, uid, gid, user, flags, mode, st)
[1]:ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.15.2.tar.gz