温馨提示×

centos selinux权限管理技巧

小樊
34
2026-01-02 01:38:29
栏目: 智能运维

CentOS SELinux 权限管理技巧

一 基础与快速排错

  • 运行模式与切换
    • 查看状态:getenforcesestatus -v
    • 临时切换:setenforce 0|1(仅在非 Disabled 时可用)
    • 永久生效:编辑 /etc/selinux/configSELINUX=enforcing|permissive|disabled,修改后需重启
  • 安全上下文查看
    • 文件/目录:ls -Z
    • 进程:ps -eZ
    • 端口:semanage port -l | grep
  • 快速判定是否为 SELinux 问题
    • 临时切到宽容模式:setenforce 0,若功能恢复,多半是 SELinux 限制
    • 检查拒绝日志:ausearch -m AVC -ts recenttail -f /var/log/audit/audit.log | grep denied
    • 人性化分析:audit2why -a;图形/告警可用 setroubleshoot(需安装 setroubleshoot-server 并启用 auditd)
  • 原则
    • SELinux 是 MAC,在 DAC(rwx/ACL) 之前生效;即便 root 也可能被策略限制
    • 优先保持 Enforcing,排错用 Permissive,避免直接 Disabled

二 上下文与端口的正确配置

  • 文件/目录上下文
    • 复制会继承目标目录上下文;移动保持原上下文(常见 Web 目录误用家目录文件导致 403
    • 永久修正路径标签:
      • 添加 fcontext:semanage fcontext -a -t httpd_sys_content_t “/websrv/sites(/.*)?”
      • 应用标签:restorecon -Rv /websrv/sites
    • 临时修正:chcon -t httpd_sys_content_t /path/file
  • 端口标签
    • 查看服务端口:semanage port -l | grep ssh
    • 让 sshd 监听非常规端口(如 9999/tcp):
      • 修改策略:semanage port -m -t ssh_port_t -p tcp 9999
      • 验证:semanage port -lC
  • 常用类型速查
    • Web 只读内容:httpd_sys_content_t
    • Web 可写目录:httpd_sys_rw_content_t
    • 家目录文件:user_home_t(配合布尔值控制访问)

三 布尔值开关的精细控制

  • 常用命令
    • 列表/状态:getsebool -asemanage boolean -l -C
    • 临时切换:setsebool on|off
    • 永久切换:setsebool -P on|off
  • 典型场景
    • Web 连接数据库:setsebool -P httpd_can_network_connect_db on
    • 启用 Apache 访问用户主目录:setsebool -P httpd_enable_homedirs on
    • Samba 读写共享:setsebool -P samba_export_all_rw on
  • 建议
    • 优先用布尔值满足功能需求,避免放宽到 Permissive/Disabled
    • 变更后用 semanage boolean -l -C 核对“当前值≠默认值”的项

四 自定义策略与回滚

  • 从拒绝日志生成模块
    • 生成可加载模块:ausearch -m AVC -ts recent | audit2allow -M mypol
    • 查看内容:cat mypol.te
    • 编译并安装:semodule -i mypol.pp
  • 更安全的临时方案
    • 将某域设为宽容(仅该进程不打断):semanage permissive -a <domain_t>
  • 回滚与清理
    • 卸载模块:semodule -r mypol
    • 移除自定义 fcontext:semanage fcontext -d -t “/path(/.*)?”
    • 查看已加载模块:semodule -l
  • 提示
    • 生产环境优先“最小权限”定制模块,保留 audit2allow 产出的 .te 以便审计与回滚

五 常见场景与命令清单

场景 关键命令 备注
Web 目录改到 /websrv/sites semanage fcontext -a -t httpd_sys_content_t “/websrv/sites(/.*)?” && restorecon -Rv /websrv/sites 读权限
上传目录需要写入 semanage fcontext -a -t httpd_sys_rw_content_t “/var/www/upload(/.*)?” && restorecon -Rv /var/www/upload 写权限
Nginx/Apache 运行用户与权限 chown -R nginx:nginx /var/www/site;find … -type d -exec chmod 755 {} ;;find … -type f -exec chmod 644 {} ; 与 SELinux 上下文配合
SSH 改用 9999/tcp semanage port -m -t ssh_port_t -p tcp 9999 端口类型必须匹配
快速判定 SELinux 问题 setenforce 0;ausearch -m AVC -ts recent;audit2why -a 恢复 enforcing 再验证
永久开关布尔值 setsebool -P httpd_can_network_connect_db on 重启不丢失
生成并安装定制模块 ausearch … audit2allow -M mypol;semodule -i mypol.pp
以上命令适用于 RHEL/CentOS 7/8,包名与工具在不同小版本可能略有差异(如策略工具在部分版本为 policycoreutils-python-utils)。

0