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

编译后的C程序普通用户无法运行,root身份可正常执行

问题分析与解决

环境信息

  • 系统:RHEL8 4.18.0-372.19.1.el8_6.x86_64
  • SELinux:已启用
  • FIPS:已启用
  • 程序代码:
#include <stdio.h>

int main( void )
{
  fprintf( stdout, "Running test Program...\r\n" );
}
  • 编译命令:gcc test.c -o test
  • 执行情况:普通用户dev运行./test提示-bash: ./test: Operation not permitted,root通过sudo运行正常
  • 文件权限:-rwx------,属主属组均为dev,所在分区无noexec属性

问题根源

核心原因是SELinux安全上下文配置不符合规则。RHEL8中启用SELinux后,即使文件权限设置正确,若文件的SELinux上下文不允许普通用户执行,就会触发权限拒绝;而root用户默认不受SELinux的部分限制,因此可以正常运行。

排查与解决步骤

  1. 检查SELinux上下文
    执行命令查看文件的SELinux标签:

    ls -Z test
    

    正常可执行文件的上下文通常为unconfined_u:object_r:bin_t:s0(系统二进制文件)或unconfined_u:object_r:user_home_t:s0(用户家目录下的可执行文件)。如果显示的上下文不属于这两类(比如system_u:object_r:default_t:s0),就会导致普通用户无法执行。

  2. 临时修复上下文
    使用chcon命令临时修改文件的SELinux上下文,使其符合可执行规则:

    chcon -t bin_t ./test
    

    修改后再次用普通用户运行./test,验证是否正常。

  3. 永久修复上下文
    若需要永久生效,使用semanage设置默认上下文规则,再恢复标签:

    # 假设文件路径为/home/dev/test,添加上下文规则
    semanage fcontext -a -t bin_t "/home/dev/test"
    # 应用规则到文件
    restorecon -v ./test
    
  4. 排除其他可能性

    • FIPS模式主要限制加密算法使用,此程序未涉及加密操作,因此排除FIPS影响。
    • 分区已确认无noexec属性,文件权限也正确,无需再检查这两项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:42:24