要为高安全性服务器配置全方位SELinux强制策略,核心是确保enforcing模式真正生效、策略准确加载、上下文完整可信、拦截可查可控;需验证内核已启用SELinux(sestatus显示enabled且Current mode为enforcing)、检查GRUB参数无selinux=0、原disabled状态必须touch /.autorelabel后重启以重标文件上下文,并通过semanage、setsebool、audit2allow等工具精准修复上下文、端口和布尔值。

要为高安全性服务器配置全方位的 SELinux 强制策略,核心不是“堆功能”,而是让 enforcing 模式真正生效、策略准确加载、上下文完整可信、拦截可查可控。很多故障并非策略太严,而是状态未就绪或上下文错位。
确认 SELinux 已内核级启用且非 disabled
仅改配置文件不够。先验证内核是否加载模块:
- 运行
getenforce—— 若输出 Disabled,说明 SELinux 模块未激活,setenforce会报错,必须重启前处理 - 运行
sestatus—— 关注三行:
SELinux status: enabled(非 disabled)
Current mode: enforcing(当前运行中)
Loaded policy name: targeted(策略已加载) - 检查内核启动参数:
cat /proc/cmdline | grep -E "(selinux|enforcing)",确保没有selinux=0或enforcing=0
永久启用 enforcing 并触发全盘重标
适用于原为 disabled 或首次启用的生产环境,必须闭环操作:
- 编辑
/etc/selinux/config,设为:SELINUX=enforcingSELINUXTYPE=targeted - 若此前是
disabled,重启前务必执行:sudo touch /.autorelabel
否则所有文件仍无有效安全上下文,服务启动即被拒 - 重启后系统自动重标(耗时取决于磁盘大小),完成后再次
sestatus -v确认策略加载成功
修复关键服务的上下文与端口策略
Apache、Samba、vsFTP 等服务启动失败,90% 是因为文件类型或网络端口未被策略允许:
- 查看 Web 根目录上下文:
ls -Z /var/www/html,应为httpd_sys_content_t;若不是,运行:sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"sudo restorecon -Rv /var/www/html - 开放非标准端口(如 Apache 改用 8080):
sudo semanage port -a -t http_port_t -p tcp 8080 - 允许 HTTPD 连接数据库:
sudo setsebool -P httpd_can_network_connect_db 1
监控拦截、生成精准策略补丁
不要盲目关闭 SELinux,而要让拒绝行为“说话”:
- 实时查看新发生的拒绝:
sudo ausearch -m avc -ts recent | audit2why - 若某应用(如自定义脚本)反复被拒,提取日志生成最小权限策略:
sudo ausearch -m avc -ts recent | audit2allow -M myapp_policysudo semodule -i myapp_policy.pp - 安装
setroubleshoot-server可将 AVC 拒绝转为中文可读建议(RHEL/CentOS/Rocky)
不复杂但容易忽略:真正的强制策略防护,始于一次干净的重标,成于对每个 AVC denied 的响应,稳于持续观察 ausearch 和服务日志。策略越细,越要靠日志驱动,而非凭空预设。


















