我在 RHEL6 上有一个 IPv4 后缀设置,SElinux 处于强制模式。除非我离开强制模式,否则我所有合并 opendkim 的尝试都惨遭失败。
我在 SElinux 执行时遇到的错误:
Jan 25 09:57:25 <mail.warning> katniss postfix/cleanup[16571]: warning: cannot receive milters via service cleanup socket socket
Jan 25 09:57:25 <mail.crit> katniss postfix/cleanup[16571]: fatal: cleanup_milter_receive: milter receive failed
Jan 25 09:57:26 <mail.warning> katniss postfix/smtpd[16567]: warning: cannot send milters to service public/cleanup socket
Jan 25 09:57:26 <mail.warning> katniss postfix/master[16559]: warning: process /usr/libexec/postfix/cleanup pid 16571 exit status 1
Jan 25 09:57:26 <mail.warning> katniss postfix/master[16559]: warning: /usr/libexec/postfix/cleanup: bad command startup -- throttling
我最近做了什么:
setenforce permissive
(发送邮件有效)
setenforce enforcing
(发送邮件失败并cleanup
出现上述错误)
egrep -e 'postfix|opendkim|cleanup' /var/log/audit/audit.log | audit2allow -m postfixMine > postfixMine.te
checkmodule -M -m -o postfixMine.mod postfixMine.te
semodule_package -m postfixMine.mod -o postfixMine.pp
semodule -i postfixMine.pp
(发送邮件仍然失败,出现与cleanup
上面相同的错误)
因此,在允许的 SElinux 设置下,一切都按预期工作,而在强制设置下失败。
在后缀中main.cf
:
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 2
一些信息:
# netstat -napl | grep 8891
tcp 0 0 127.0.0.1:8891 0.0.0.0:* LISTEN 16464/opendkim
# ps -ef|grep opendkim
opendkim 16463 1 0 09:56 ? 00:00:00 /usr/local/sbin/opendkim -x /etc/opendkim.conf -P /var/run/opendkim/opendkim.pid
opendkim 16464 16463 0 09:56 ? 00:00:00 /usr/local/sbin/opendkim -x /etc/opendkim.conf -P /var/run/opendkim/opendkim.pid
# ls -lZ /usr/libexec/postfix/cleanup
-rwxr-xr-x. root root system_u:object_r:postfix_cleanup_exec_t:SystemLow /usr/libexec/postfix/cleanup
在我开始脱掉头发之前,有人能给我指出正确的方向吗?一定有一些非常简单的东西我忽略了。
我知道 SElinux 的用途,但我还没有找到任何似乎达到“我的水平”的教程(简短且内容丰富):-) 所以说到 SElinux,我仍然是一个 n00b。非常愿意学习。
禁用 SElinux 不是我学习的方式。
问题是
audit2allow
-generatedpostfixMine.te
变成了:我将tcp_socket 添加到类中
read
:write
随后是这些命令以重新编译新策略:
现在它终于起作用了!