使用selinux从apache+php查询rpm


query rpm from apache+php with selinux

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

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

我从audit2allow开始,根据我发现的被拒绝的条目创建规则,但现在审核日志中不再有被拒绝的内容,但它仍然没有在启用selinux的情况下运行。

在我的世界里,它似乎会询问系统是否允许运行,当selinux说"如果你尝试这个,我会阻止你"时。因此系统不运行exec。如果是的话,我想我会得到一个"拒绝",我可以基于它创建一个新的selinux规则。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并侥幸逃脱?

我确实找到了解决它的方法。也许不是最好的方法,但有点麻烦。

我的audit2allow不起作用的原因是,并非所有消息都显示在审核日志中。当我读到以下内容时,我激活了它以显示所有日志:http://docs.fedoraproject.org/en-US/Fedora/13/html/SELinux_FAQ/index.html#id3028826

一旦我在日志中收到更多被拒绝的消息,我就可以想办法让它发挥作用。

最终的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规则不是我主要关心的问题,但它是次要的。

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