Postfix 安装程序创建了一个系统用户postfix
及其主要组,postfix
而 OpenDKIM 的安装程序创建了一个系统用户opendkim
及其主要组opendkim
。
为了使 Postfix 和 OpenDKIM 能够协同工作,大多数管理员会做两件事:
A
他们将一个次要组附加opendkim
到 Postfix。
乙
他们使用以下三(两)行设置 OpenDKIM 配置文件/etc/opendkim.conf
来创建 UNIX 套接字:
UMask 002
PidFile /var/run/opendkim/opendkim.pid
Socket local:/var/spool/postfix/opendkim/opendkim.sock
OpenDKIM 官方文档对配置参数进行了如下说明UMask
:
请求用于文件创建的特定权限掩码。这实际上仅适用于当 Socket 指定 UNIX 域套接字时创建套接字,以及 PidFile(如果有);
我知道 UNIX 套接字很方便,因为它们可以限制用户权限。就我而言,我希望 OpenDKIM 尽可能安全地与 Postfix 配合使用。但是UMask
设置为002
UNIX 套接字将创建所有权opendkim:opendkim
和权限664
= rw-rw-r--
。
我理解组成员(Postfix)需要读写 UNIX 套接字,但我不明白为什么网上几乎所有的教程(A,乙,C...)给其他人留下读取权限吗?
UMask
这是普遍的误解吗?难道不是合理的值吗007
?此外,PID 文件是使用相同权限创建的...
如果我检查系统上的任何其他 UNIX 套接字,其中一些也拥有其他套接字的权限...为什么这很重要?
┌───┐
│ # │ root > mailer > ~
└─┬─┘
└─> ss -x -l | head -n 10
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
u_dgr UNCONN 0 0 /run/systemd/notify 14848 * 0
u_str LISTEN 0 128 /var/run/dovecot/director-userdb 13957121 * 0
u_str LISTEN 0 128 /run/systemd/private 14852 * 0
u_str LISTEN 0 100 /var/run/dovecot/dict 13957125 * 0
u_str LISTEN 0 128 /var/run/dovecot/dict-async 13957129 * 0
u_str LISTEN 0 1 /var/run/irqbalance568.sock 17673 * 0
u_dgr UNCONN 0 0 /run/systemd/journal/syslog 14859 * 0
u_str LISTEN 0 128 /var/run/dovecot/config 13957133 * 0
u_str LISTEN 0 128 /var/run/dovecot/login/login 13957135 * 0
┌───┐
│ # │ root > mailer > ~
└─┬─┘
└─> ls -l /var/run/dovecot/config
srw------- 1 root root 0 Dec 31 07:35 /var/run/dovecot/config
┌───┐
│ # │ root > mailer > ~
└─┬─┘
└─> ls -l /var/run/dovecot/login/login
srw-rw-rw- 1 root root 0 Dec 31 07:35 /var/run/dovecot/login/login
答案1
使用 umask002
可能受到常见默认 umask 的影响022
- 这也是 opendkim 示例配置引用。
由于 opendkim 对 pidfile 使用一个 umask 设置和套接字文件,可能需要允许其他人对 pidfile 进行读取访问,以便也创建具有其他人读取权限的套接字文件,作为副作用。
如果您甚至没有启用 pidfile 创建(例如,使用 systemd 时您不需要它)并且将 postfix 用户添加到 opendkim 组,那么 umask 是007
有意义的。
或者,您可以让 opendkim 在只有 opendkim 和 postfix 可以访问的目录中创建套接字,如下所示:
$ cat /etc/tmpfiles.d/opendkim.conf
d /run/opendkim-postfix 0750 opendkim postfix -
opendkim 主配置片段:
UMask 000
Socket local:/run/opendkim-postfix/opendkim.sock
其结果是:
# find /run/opendkim-postfix -printf '%M %m %p\n'
drwxr-x--- 750 /run/opendkim-postfix
srwxrwxrwx 777 /run/opendkim-postfix/opendkim.sock
这样,您就不必将 postfix 用户添加到 opendkim 组。
您引用的教程质量可能有限,因为一些云提供商将其技术文档外包给客户,然后客户通过云积分获得激励。因此,可以想象,这样的教程可能会使用其他现有教程和示例配置,而不会受到太多批评。