RHEL8下SELinux静默阻止PHP获取进程列表且无审计日志的排查求助
RHEL8下SELinux静默阻止PHP获取进程列表且无审计日志的排查求助
各位SELinux和PHP运维的大佬们,我遇到一个棘手的问题想请教大家:
我们有一套用PHP实现的服务器健康检查系统,访问状态页时会通过shell_exec("ps -ax")验证特定服务进程是否运行,一旦检测到异常就返回错误提示。
在之前的RHEL7环境里,我们遇到过ps -ax只能返回PHP用户自身进程的问题,排查后发现是SELinux的限制——当时在auditd.log里能看到明确的拒绝记录,最后通过加载下面这个SELinux策略模块解决了问题:
require { type httpd_t; type initrc_t; class dir getattr; class dir search; class file read; class file open; } #============= httpd_t ============== allow httpd_t initrc_t:dir getattr; allow httpd_t initrc_t:dir search; allow httpd_t initrc_t:file read; allow httpd_t initrc_t:file open;
现在我们在RHEL8上重建这套系统,同样的策略模块却失效了:shell_exec("ps -ax")依旧只能看到当前PHP用户的进程。更奇怪的是,这次在audit日志里完全找不到任何和PHP相关的SELinux拒绝记录!我已经禁用并移除了之前的策略模块,情况还是一样。
我做了个测试:把SELinux切换到Permissive模式后,PHP就能正常看到所有运行的进程;切回Enforcing模式就又回到原来的状态——这说明确实是SELinux在阻止,但它就是不记录拒绝日志。
我自己尝试过这些方法,都没拿到有用的日志:
- 执行
auditctl -w /usr/sbin/php-fpm和auditctl -w /usr/bin/ps添加审计规则,现在能在audit.log里看到ps被执行的记录,但还是看不到具体被拒绝的操作内容。
我对SELinux的了解不多,现在有点抓瞎了,有没有大佬知道怎么让SELinux强制记录这次阻止的原因?为什么这个操作的拒绝日志会被排除呢?
备注:内容来源于stack exchange,提问作者Jared
相关产品推荐
相关产品推荐

