从apache+;使用selinux的php

从apache+;使用selinux的php,php,exec,rpm,rhel5,selinux,Php,Exec,Rpm,Rhel5,Selinux,我有一个php脚本,在RHEL5安装的apache服务器上运行。这个脚本在“rpm-q--info-packagename”上运行一个exec 问题是它可以在许可模式下与selinux一起正常工作,但在完全启用时不能正常工作。所以我认为这是一个selinux问题 我从audit2allow开始,根据我找到的被拒绝条目创建规则,但是现在在审核日志中没有更多的被拒绝条目,但是它仍然没有在启用selinux的情况下运行 在我的世界里,它似乎询问系统是否允许它运行,当selinux说“如果你尝试这个,我

我有一个php脚本,在RHEL5安装的apache服务器上运行。这个脚本在“rpm-q--info-packagename”上运行一个exec

问题是它可以在许可模式下与selinux一起正常工作,但在完全启用时不能正常工作。所以我认为这是一个selinux问题

我从audit2allow开始,根据我找到的被拒绝条目创建规则,但是现在在审核日志中没有更多的被拒绝条目,但是它仍然没有在启用selinux的情况下运行

在我的世界里,它似乎询问系统是否允许它运行,当selinux说“如果你尝试这个,我会阻止你”时。因此,系统不运行exec。如果会,我假设我会得到一个“拒绝”,我可以根据它创建一个新的selinux规则。在permissive中使用selinux,我也不会被拒绝,但它是有效的

因此,我似乎必须以艰难的方式处理这个问题,并为selinux创建一个自定义规则。说了又做了,我做了一个:

module php_rpm 1.0;

require {
    type httpd_t;
    type bin_t;
    type rpm_exec_t;
    type rpm_var_lib_t;
    class file { execute execute_no_trans getattr read execmod };
    class dir { getattr search };
}

#============= httpd_t ==============
allow httpd_t rpm_exec_t:file { execute execute_no_trans getattr read execmod };
allow httpd_t rpm_var_lib_t:dir { getattr search };
不幸的是,这并没有解决我的问题,只是把我的selinux规则搞砸了一点:p


有没有人尝试过在启用selinux的情况下从php执行rpm并侥幸逃脱?

我确实找到了解决方法。也许不是最好的方法,但它已经有点过时了

my audit2allow不起作用的原因是,并非所有消息都显示在审核日志中。一旦我读到以下内容,我将其激活以显示所有日志:

一旦我在日志中收到更多被拒绝的消息,我就可以想办法让它正常工作

最终的te文件如下所示:

module php_rpm 1.0;

require {
    type selinux_config_t;
    type httpd_script_exec_t;
    type security_t;
    type httpd_t;
    type rpm_exec_t;
    type rpm_var_lib_t;
    class dir { search getattr };
    class file { getattr read execute_no_trans execute lock };
}

#============= httpd_t ==============
allow httpd_t httpd_script_exec_t:file { read getattr execute_no_trans };
allow httpd_t rpm_exec_t:file { read getattr execute_no_trans execute };
allow httpd_t rpm_var_lib_t:dir { getattr search };
allow httpd_t rpm_var_lib_t:file { read getattr lock };
allow httpd_t security_t:dir search;
allow httpd_t security_t:file read;
allow httpd_t selinux_config_t:dir search;
allow httpd_t selinux_config_t:file { read getattr };
我有一种感觉,这是一个有点开放的门在这里,所以我仍然会努力收紧一些。但是SELINUX规则不是我最关心的,但它是次要的

如果有人有更好的建议,也许有更具体的规则,请随时分享