You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

php-fpm与SELinux权限困惑:为何可执行/bin_sh?

问题解答

你的疑问核心在于SELinux默认策略中对httpd_t域的权限配置,主要遗漏了以下几个关键机制:

  • httpd_t域默认允许执行bin_t类型程序
    SELinux默认策略里,httpd_t域拥有对bin_t类型可执行文件的execute权限。这是因为很多合法Web应用需要调用系统工具(比如脚本处理、日志生成),所以策略默认放开了这个权限。你可以通过以下命令验证规则:

    sesearch -s httpd_t -t bin_t -c file -p execute -A
    
  • 未触发强制域转换
    php-fpm运行在httpd_t域,当它调用/bin/sh时,SELinux没有强制要求子进程切换到其他受限域(比如shell_exec_t)。默认情况下,子进程会继承父进程的httpd_t域,而httpd_t本身被允许执行bin_t类型的/bin/sh,所以shell进程能正常运行并执行命令。

  • httpd相关SELinux布尔值可能处于开启状态
    系统默认可能开启了部分放宽httpd权限的布尔值,比如httpd_enable_cgi(允许httpd执行CGI脚本)、httpd_execmem(允许httpd使用可执行内存)等,这些布尔值进一步降低了限制。你可以用以下命令查看当前布尔值状态:

    getsebool -a | grep httpd
    
  • webshell的安全上下文合法
    你的webshell使用了httpd_sys_content_t上下文,httpd_t域对该上下文的文件拥有读取和执行权限,所以php-fpm能正常解析并执行webshell中的代码,进而调用system()函数触发系统命令执行。

测试建议

如果想要强化限制,可以尝试:

  1. 关闭httpd_enable_cgi布尔值:setsebool -P httpd_enable_cgi off
  2. 查看SELinux审计日志确认规则细节:ausearch -m avc -ts recent
  3. 调整webshell的上下文为非httpd可执行类型(比如user_home_t),测试是否会被拒绝

内容的提问来源于stack exchange,提问作者cider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 20:42:27