在 Linux 中配置 SELinux 的实用步骤
一 基础概念与状态查看
getenforce(返回 Enforcing/Permissive/Disabled)sestatusls -Z /pathps -eZ | grep <进程名>二 运行模式切换与持久化
setenforce 1(切到 Enforcing)setenforce 0(切到 Permissive)SELINUX=enforcing|permissive|disabledSELINUXTYPE=targeted|minimum|mls三 文件与目录上下文配置
policycoreutils-python-utilssemanage fcontext -a -t httpd_sys_content_t "/webdata(/.*)?"restorecon -R /webdatachcon -R -t httpd_sys_content_t /webdatals -Z /webdata 应看到类型如 httpd_sys_content_t。四 端口、布尔值与日志排障
semanage port -a -t http_port_t -p tcp 8899semanage port -l | grep http_port_tfirewall-cmd --add-port=8899/tcp --permanent && firewall-cmd --reloadgetsebool httpd_can_network_connect_dbsetsebool httpd_can_network_connect_db onsetsebool -P httpd_can_network_connect_db onsemanage boolean -l、semanage boolean -l -C(仅显示与默认不同的项)ausearch -m avc -ts recentsealert -a /var/log/audit/audit.logausearch -m avc -ts recent | audit2allow -M mypolsemodule -i mypol.pp五 常见场景速查表
| 场景 | 关键命令或配置 |
|---|---|
| 查看状态 | getenforce、sestatus |
| 临时切到宽容模式 | setenforce 0 |
| 永久启用强制模式 | 编辑 /etc/selinux/config:SELINUX=enforcing,重启生效 |
| 自定义网站目录 | semanage fcontext -a -t httpd_sys_content_t "/webdata(/.*)?" && restorecon -R /webdata |
| 非标准端口运行 Web | semanage port -a -t http_port_t -p tcp 8899 并放行防火墙 |
| 允许 httpd 连接数据库 | setsebool -P httpd_can_network_connect_db on |
| 分析最近拒绝 | ausearch -m avc -ts recent;sealert -a /var/log/audit/audit.log |
| 生成最小策略模块 | `ausearch … |