温馨提示×

centos selinux权限如何管理

小樊
38
2025-12-21 09:24:48
栏目: 智能运维

CentOS SELinux 权限管理实操指南

一 基础概念与模式切换

  • SELinux 提供强制访问控制(MAC),通过给进程与客体打上安全上下文来限制访问;常见模式有:Enforcing(拦截违规)、Permissive(仅告警)、Disabled(关闭)。查看与切换命令如下:
    • 查看状态:getenforcesestatus
    • 临时切换:setenforce 0|1(0 为 Permissive,1 为 Enforcing)
    • 永久生效:编辑 /etc/selinux/config,设置 SELINUX=enforcing|permissive|disabled,修改后需重启
    • 策略类型:常见为 SELINUXTYPE=targeted(仅保护选定进程),也有 minimummls
  • 提示:生产环境不建议直接 Disabled,排障可先用 Permissive 定位问题。

二 安全上下文查看与修改

  • 查看上下文
    • 文件/目录:ls -Z /path
    • 进程:ps -auxZ | grep <进程名>
    • 当前用户:id -Z
  • 修改与持久化
    • 临时修改:chcon -R -t <类型> <路径>(例:chcon -R -t httpd_sys_content_t /my/web
    • 持久化推荐:先 semanage fcontext -a -t <类型> "<路径>(/.*)?",再 restorecon -R <路径>
  • 典型场景
    • Web 目录自定义路径:将 /my/web 标记为 httpd_sys_content_t,使 httpd_t 可读取
    • 用户家目录被 httpd 访问:启用布尔值 httpd_enable_homedirs 或将内容放入系统 Web 目录并正确打标
  • 注意
    • chcon 的修改可能在重打标或 restorecon 后丢失;持久化请用 semanage fcontext + restorecon
    • 移动(mv)通常保留原上下文,复制(cp)会继承目标目录上下文,易引发访问差异。

三 布尔值与常用开关

  • 作用:布尔值用于在不写策略模块的情况下,快速开启/关闭某类策略行为(如是否允许 httpd 访问用户家目录)。
  • 常用命令
    • 列出/查询:semanage boolean -lgetsebool -agetsebool <name>
    • 设置:setsebool [-P] <name> on|off(加 -P 永久生效,写入策略存储)
  • 常用示例
    • FTP 匿名写:setsebool -P allow_ftpd_anon_write 1
    • FTP 访问家目录:setsebool -P ftp_home_dir 1
    • Apache 访问家目录:setsebool -P httpd_enable_homedirs 1
    • Apache 执行 CGI:setsebool -P httpd_enable_cgi 1
  • 建议:优先用 semanage boolean -l -C 查看与默认值不同的布尔值,变更前评估影响。

四 排错与自定义策略

  • 定位拒绝
    • 查看最近 AVC 拒绝:ausearch -m avc -ts recent
    • 生成可读报告:sealert -a /var/log/audit/audit.log
  • 快速放行(审慎)
    • 从拒绝日志生成模块:ausearch -m avc -ts recent | audit2allow -M mypolicy
    • 加载模块:semodule -i mypolicy.pp
  • 策略查询与分析
    • 查询规则:sesearch --allow(可结合 -s <主体类型> -t <客体类型> 精确查找)
  • 原则:优先修复上下文/布尔值;确需放行时再生成最小权限模块,避免“过度放行”。

五 与防火墙的职责边界

  • SELinux 主要控制进程对文件、端口、进程间对象的访问(内部细粒度控制);firewalld 控制外部到主机的网络流量(端口/服务放行)。两者互补,互不替代。
  • 示例
    • SELinux:允许 httpd_t 绑定 80/tcp(或自定义端口)需正确的端口类型/布尔值
    • firewalld:放行 80/tcphttps 服务到外部访问
  • 排障时同时检查两者:SELinux 拒绝看 audit.log/sealert,网络不通看 firewall-cmd --list-all

0