В предыдущей компании исправление заключалось в отключении SELinux. Я пытаюсь оставить SELinux включенным и настроить то, что мне нужно для достижения моей цели.
Короче говоря, я хочу, чтобы apache / httpd запускал / usr / bin / systemctl status postfix и возвращал статус. С отключенным SELinux работает нормально. При принудительном применении SElinux он запрещает действие:
type=AVC msg=audit(1518207070.317:87): avc: denied { getattr } for pid=2191 comm="sh" path="/usr/bin/systemctl" dev="dm-0" ino=100857189 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:systemd_systemctl_exec_t:s0 tclass=file
type=SYSCALL msg=audit(1518207070.317:87): arch=c000003e syscall=4 success=no exit=-13 a0=1f32060 a1=7ffcb5925f60 a2=7ffcb5925f60 a3=7ffcb5925d90 items=0 ppid=2190 pid=2191 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="sh" exe="/usr/bin/bash" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1518207070.317:88): avc: denied { getattr } for pid=2191 comm="sh" path="/usr/bin/systemctl" dev="dm-0" ino=100857189 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:systemd_systemctl_exec_t:s0 tclass=file
type=SYSCALL msg=audit(1518207070.317:88): arch=c000003e syscall=4 success=no exit=-13 a0=1f32060 a1=7ffcb5925f40 a2=7ffcb5925f40 a3=7ffcb5925d90 items=0 ppid=2190 pid=2191 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="sh" exe="/usr/bin/bash" subj=system_u:system_r:httpd_t:s0 key=(null)
audit2allow -w -a
много раз говорит мне:
Отсутствует разрешающее правило принудительного применения типа (TE).
audit2allow -a
строит следующее:
#============= httpd_t ==============
allow httpd_t admin_home_t:file { execute getattr };
allow httpd_t cgroup_t:dir read;
allow httpd_t cgroup_t:file { getattr open read };
allow httpd_t faillog_t:file write;
allow httpd_t init_t:dbus send_msg;
allow httpd_t postfix_etc_t:file { append getattr read };
allow httpd_t shadow_t:file { getattr open read };
allow httpd_t sudo_db_t:dir write;
allow httpd_t syslogd_var_run_t:dir read;
allow httpd_t systemd_systemctl_exec_t:file { getattr open read };
allow httpd_t systemd_unit_file_t:service status;
Итак, я собираю модуль и устанавливаю его с помощью audit2allow -a -M postfix_status_check_by_apahce_WR
:
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i postfix_status_check_by_apahce_WR.pp
Это работает, и я вижу это в списке selmodule -l
и ошибки audit.log прекращаются, однако сценарий никогда не выполняется.
Как я уже говорил ранее, предыдущим занятием было отключение SELinux, так что это новое место для меня. Я использую Centos 7.3.
Пока не забыл, это код:
<?php
$status = shell_exec("/usr/bin/systemctl status postfix | grep Active | awk -F: '{ print $2\":\"$3 }'");
echo $status;
?>
Помощь приветствуется.