У меня есть настройка постфикса IPv4 на RHEL6 с 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. Очень хочу учиться.
Я не учусь отключать SElinux.
Проблема заключалась в том, что audit2allow
-сгенерированный postfixMine.te
стал:
module postfixMattias 1.0;
require {
type postfix_smtpd_t;
type postfix_cleanup_t;
class tcp_socket { getopt getattr };
}
#============= postfix_cleanup_t ==============
#!!!! This avc is allowed in the current policy
allow postfix_cleanup_t postfix_smtpd_t:tcp_socket { getopt getattr };
я добавил read
и write
классифицировать tcp_socket в это:
module postfixMine 1.0;
require {
type postfix_smtpd_t;
type postfix_cleanup_t;
class tcp_socket { getopt getattr read write };
}
#============= postfix_cleanup_t ==============
#!!!! This avc is allowed in the current policy
allow postfix_cleanup_t postfix_smtpd_t:tcp_socket { getopt getattr read write };
за которыми следуют эти команды для перекомпиляции новой политики:
checkmodule -M -m -o postfixMine.mod postfixMine.te
semodule_package -m postfixMine.mod -o postfixMine.pp
semodule -i postfixMine.pp
и вот наконец то работает!