允许httpd通过同一用户启动的进程的pid查看进程状态

问题描述 投票:0回答:1

我目前正在尝试允许 PHP 应用程序管理后台作业 - 然而这在 selinux 下似乎更困难,因为 php 进程似乎无法访问其他 httpd 进程的 /proc/{pid} 。

基本上,目标是确定两件事:

  • 进程还在运行吗?
  • 该进程是由正确的(apache)用户启动的吗?

需要注意的是,我对 SELinux 完全一无所知,但我的搜索/手册页阅读并没有让我更进一步。

任何帮助将不胜感激。

  • file_exists("/proc/$pid/status")
    - setenforce 1 失败。
  • `"ps -o uname='' -p $pid" - 也因 setenforce 1 而失败
  • file_exists("/proc/$pid")
    本身,然后检查目录的所有者 - file_exists() 部分有效,但对目录的任何检查都会失败
  • 我尝试更改 /proc 目录上的上下文并授予 httpd 批发访问权限,但显然这是不可能的。

期望是通过 php 进程检索上述两个数据点的方法:

  • pid进程仍在运行
  • pid 进程由给定所有者拥有
php rhel selinux
1个回答
0
投票

/proc/{pid} 目录获取与 {pid} 进程相同的 SELinux 上下文。

因此,您需要允许 PHP 进程查看

httpd_t
目录的存在,获取其属性(所有者、组、权限等)并遍历这些目录,以便 PHP 进程可以读取 /proc/{ pid}/状态文件。

但是你必须意识到一个问题(在安全方面):

status
文件具有
httpd_t
SELinux类型;所以,如果你允许PHP进程打开并读取这些文件,你也会让PHP进程读取/proc/{pid}/下的许多文件!幸运的是,他们中的许多人都有相当保护性的 DAC 权限。

为了达到你的期望,你需要编译一小段SELinux策略代码。 您可以选择仅允许您需要的内容:允许 PHP 进程在

getattr
目录上进行
httpd_t
(只需查看 /proc/{pid} 目录并获取其所有者即可)。 或者您可以选择允许 PHP 进程使用
kernel_search_proc()
宏查看任何正在运行的进程状态(在 RedHat/CentOS/Fedora/Alma...)

© www.soinside.com 2019 - 2024. All rights reserved.