CentOS SELinux 权限管理指南
一 核心概念与工作机制
二 运行模式与切换
getenforce、sestatus -vsudo setenforce 1(强制)或 sudo setenforce 0(宽容)SELINUX=enforcing 或 SELINUX=permissiveSELINUXTYPE=targeted(或 mls/mcs)touch /.autorelabel && reboot 以重新打标签。三 日常运维与排障流程
ls -Z /var/www/htmlps -eZ | grep nginxsemanage port -l | grep httpsudo tail -f /var/log/audit/audit.log | grep deniedsudo ausearch -m avc -ts recentsudo audit2why -a 或 sealert -a /var/log/audit/audit.log四 常见场景与命令清单
| 场景 | 典型现象 | 关键命令 |
|---|---|---|
| 文件/目录访问被拒 | 服务读不到内容或无法写入 | semanage fcontext -a -t httpd_sys_content_t "/data(/.*)?";restorecon -Rv /data |
| 服务需对外连接 | 应用连接数据库/外部 API 失败 | sudo setsebool -P httpd_can_network_connect 1 |
| 自定义端口绑定 | bind() to 0.0.0.0:8080 failed (13: Permission denied) |
sudo semanage port -a -t http_port_t -p tcp 8080 |
| 仅对单个进程宽容 | 调试某服务时不希望全局放宽 | sudo semanage permissive -a nginx_t |
| 生成最小策略模块 | 日志中大量 AVC denied | `sudo ausearch -m avc -ts recent |
| 批量恢复默认标签 | 迁移或误操作后标签混乱 | sudo restorecon -Rv /var/www |
| 查看/管理布尔值 | 开关功能特性 | getsebool -a;sudo setsebool -P httpd_unified 1 |
| 查看/管理端口类型 | 确认某端口是否允许某服务 | `semanage port -l |
| 查看/加载策略模块 | 管理自定义模块 | semodule -l;sudo semodule -i custom.pp |
说明:以上命令需由 root 或具备 sudo 权限执行;布尔值加 -P 为持久化生效。 |
五 最佳实践与风险控制
audit2allow 生成最小规则并回归测试。touch /.autorelabel && reboot 以重打标签,防止大规模访问异常。