以下错误阻碍了 opendkim 的重新启动
× opendkim.service - OpenDKIM Milter
Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sat 2023-04-22 08:00:27 UTC; 2s ago
[...] Process: 2295 ExecStart=/usr/sbin/opendkim (code=exited, status=78)
opendkim.service: Control process exited, code=exited, status=78/CONFIG
尝试咨询(未加密,可能未更新)文档,未找到有关 的任何内容status=78
。
但显然 milter 配置在某种程度上是不正确的。 /etc/postfix/main.cf
定义:
# Milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters
而/etc/opendkim.conf
Syslog yes
SyslogSuccess yes
LogWhy yes
Canonicalization relaxed/simple
Mode sv
SubDomains no
OversignHeaders From
UserID opendkim
UMask 007
Socket local:/var/spool/postfix/opendkim/opendkim.sock
#Nameservers 127.0.0.1
AutoRestart yes
AutoRestartRate 10/1M
Background yes
DNSTimeout 5
SignatureAlgorithm rsa-sha256
ExternalIgnoreList refile:/etc/opendkim/trusted.hosts
InternalHosts refile:/etc/opendkim/trusted.hosts
KeyTable refile:/etc/opendkim/key.table
SigningTable refile:/etc/opendkim/signing.table
PidFile /var/run/opendkim/opendkim.pid
# UserID opendkim:opendkim
我注意到以下情况:
• opendkim 配置最初引用ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
,而现有文件是/etc/opendkim/trusted.hosts
。这对整个块重复。整个块被修改为小写的以点分隔的文件名,然后服务重新启动。
但是,电子邮件在发送时会被 Postfix 记录下来:
warning: connect to Milter service local:opendkim/opendkim.sock: No such file or directory
cd /var/spool/postfix/opendkim
-bash: cd: /var/spool/postfix/opendkim: No such file or directory
我也没有看到 pid 文件/var/run/opendkim/
smtpd_milters = local:opendkim/opendkim.sock
postfix配置和 opendkim定义之间可能存在一些错误Socket
。需要更改什么?
更新
warning: connect to Milter service local:opendkim/opendkim.sock: Permission denied
仍在邮件日志中,因此该配置元素是错误的。
将设置更改postfix/main.cf
为
smtpd_milters = local:/var/spool/postfix/opendkim/opendkim.sock
结果是:
warning: connect to Milter service local:/var/spool/postfix/opendkim/opendkim.sock: No such file or directory
。 的存在/var/spool/postfix/opendkim/opendkim.sock
得到验证。
答案1
虽然这是套接字在系统上所在的路径,但这不是 chrooted smtpd 实例将看到的路径:
smtpd_milters = local:/var/spool/postfix/opendkim/opendkim.sock
Postfix smtpd 需要路径相对的到chroot目录,它不知道/var/spool/postfix/
启动后的路径。
smtpd_milters = unix:opendkim/opendkim.sock
/usr/share/doc/postfix/MILTER_README
您可以在和中找到详细信息man 5 master
,这里仅引用关键信息,重点是我的:
如果 smtpd(8) 或 cleanup(8) 进程在 chroot 模式下运行,则将解释绝对路径名相对于 Postfix 队列目录在许多系统上,local 是 unix 的同义词
答案2
部分解决方案
sudo chown opendkim:postfix /var/spool/postfix/opendkim
需要授予 postfix 创建权限opendkim.sock
虽然opendkim.service: Can't open PID file /run/opendkim/opendkim.pid (yet?) after start: Operation not permitted
发生了,但这只是暂时的
Started OpenDKIM Milter.
随后不久,它/run/opendkim/opendkim.pid
被创建并被opendkim.pid
root 所有。