跳转到内容
搜索 RunEntLinux 文档

仅搜索 RunEntLinux 通用文档,各发行版文档使用各自的搜索入口。

    浏览当前文档目录

    SELinux 入门

    适用于 CentOS Stream 9 & 10 / AlmaLinux 9.x & 10.x / Rocky Linux 9.x & 10.x

    SELinux (Security-Enhanced Linux) 是 EL 系统上默认启用的强制访问控制 (MAC) 系统。很多 EL 新手第一次遇到的”诡异问题”往往与 SELinux 有关。

    • SELinux 是什么以及为什么不应该关闭它
    • 三种工作模式及其区别
    • 查看和排查 SELinux 拒绝
    • 常用的 SELinux 管理命令
    • 一台运行 EL 9.x 的系统
    • sudo 权限
    • 已安装 policycoreutils;setroubleshoot-server 不保证预装(最小化安装通常没有),需要看告警解读时再按下面一步安装

    SELinux 通过限制进程只能访问其策略允许的资源,有效降低了安全漏洞的影响范围。即使某个服务被攻破,攻击者也只能访问该服务被授权的资源。

    模式说明是否拦截
    Enforcing强制执行策略,拒绝违规访问是
    Permissive不拦截,但记录违规到日志否(仅记录)
    Disabled完全关闭否
    查看当前模式
    $ getenforce
    Enforcing
    查看详细状态
    $ sestatus
    临时切换到 Permissive(重启后恢复)
    $ sudo setenforce 0
    临时切换回 Enforcing
    $ sudo setenforce 1

    当 SELinux 拒绝某个操作时,会在审计日志中记录 AVC(Access Vector Cache)消息。

    1. 查看最近的拒绝记录

      使用 ausearch 查看 AVC 拒绝
      $ sudo ausearch -m avc -ts recent
    2. 使用 sealert 获取人类可读的建议

      安装 setroubleshoot(如未安装)
      $ sudo dnf install -y setroubleshoot-server
      分析日志并给出修复建议
      $ sudo sealert -a /var/log/audit/audit.log | head -50
    3. 按建议修复

      sealert 通常会给出具体的修复命令,如设置正确的文件上下文或启用布尔值。

    Terminal window
    $ ls -Z /var/www/html/
    恢复默认上下文
    $ sudo restorecon -Rv /var/www/html/
    查看所有 httpd 相关的布尔值
    $ getsebool -a | grep httpd
    允许 httpd 连接网络
    $ sudo setsebool -P httpd_can_network_connect on

    文件的 SELinux 上下文可能不正确:

    Terminal window
    $ sudo semanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?"
    $ sudo restorecon -Rv /data/www/
    查看 httpd 允许的端口
    $ sudo semanage port -l | grep http_port_t
    添加允许的端口
    $ sudo semanage port -a -t http_port_t -p tcp 8443

    EL 10 上的 SELinux 策略持续更新,整体使用方式与 EL 9 兼容。但有一个重要的相关变化:

    加密策略:SHA-1 默认禁用

    EL 10 的默认加密策略(DEFAULT)禁用了 SHA-1 签名算法,这会影响:

    • 使用旧版 SHA-1 签名的 SSH RSA 密钥(1024-bit)将被拒绝
    • 使用 SHA-1 签发的 SSL/TLS 证书无法通过验证
    • 部分旧版 GPG 签名

    如果遇到连接被拒绝,可以检查当前加密策略:

    查看当前系统加密策略
    update-crypto-policies --show
    临时允许 SHA-1(不推荐用于生产)
    sudo update-crypto-policies --set DEFAULT:SHA1

    推荐做法是更换为 Ed25519 或 RSA-4096 密钥,而不是降低安全策略。