在 CentOS 上,提升系统安全性最有效的方式是启用并正确配置 SELinux 的强制访问控制(MAC)。以下给出从基线到实战的要点与命令,帮助你在不影响业务的前提下最大化安全收益。
getenforce(返回 Enforcing/Permissive/Disabled)。sudo setenforce 1(切到 Enforcing),sudo setenforce 0(切到 Permissive)。SELINUX=enforcing(或先用 SELINUX=permissive 观察)SELINUXTYPE=targeted(或 mls)sudo reboot。重启后首次会为系统对象重新打标签。getenforce 应返回 Enforcing。selinux=0 或 enforcing=0 来“关闭/放行”SELinux,这会导致策略不加载或绕过检查。sudo semanage fcontext -a -t <type> "<path>(/.*)?"sudo restorecon -Rv <path>sudo semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"sudo restorecon -Rv /websudo semanage port -a -t http_port_t -p tcp 80sudo semanage port -a -t http_port_t -p tcp 443getsebool -a | grep <keyword>sudo setsebool -P <boolean> on|off(加 -P 永久生效)sudo setsebool -P httpd_can_network_connect 1sudo ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts todaygrep "SELinux is preventing" /var/log/messagesausearch 定位被拒进程、目标对象与原因;semanage fcontext/port + restorecon 或调整布尔值修正;sudo setenforce 0,修复后再回到 Enforcing。sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload| 场景 | 关键命令 |
|---|---|
| Web 目录自定义路径 | semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?" && restorecon -Rv /web |
| Nginx/Apache 监听 80/443 | semanage port -a -t http_port_t -p tcp 80;semanage port -a -t http_port_t -p tcp 443 |
| 允许 httpd 外连(API/DB) | setsebool -P httpd_can_network_connect 1 |
| FTP 匿名写入 | setsebool -P allow_ftpd_anon_write 1(按需) |
| 查看/切换运行模式 | getenforce;`setenforce 1 |
| 查看拒绝日志 | ausearch -m AVC -ts today 或 grep "SELinux is preventing" /var/log/messages |
以上步骤遵循最小改动与可回退原则:优先用“上下文/端口/布尔值”解决,必要时短时切 Permissive 定位,再回到 Enforcing 并固化策略。