允许 apache 运行 php 脚本 - audit2allow 到目前为止还没有起作用

允许 apache 运行 php 脚本 - audit2allow 到目前为止还没有起作用

在之前的公司,解决方法是禁用 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;
    ?>

非常感谢您的帮助。

相关内容