SELinux在Ubuntu中如何定制
导读:Ubuntu 中定制 SELinux 的可操作步骤 一 前置说明与准备 Ubuntu 默认启用的是 AppArmor,如确需使用 SELinux,需先安装并启用相关组件,再按需定制策略。启用前建议备份关键数据与现有安全配置。生产环境不建议...
Ubuntu 中定制 SELinux 的可操作步骤
一 前置说明与准备
- Ubuntu 默认启用的是 AppArmor,如确需使用 SELinux,需先安装并启用相关组件,再按需定制策略。启用前建议备份关键数据与现有安全配置。生产环境不建议长期停留在宽容模式。为获得完整工具链与审计支持,建议安装:selinux-basics、selinux-policy-default、selinux-utils、auditd、audispd-plugins、policycoreutils。启用后可用 sestatus、getenforce 查看状态。
二 启用与基础配置
- 安装组件
- 执行:
sudo apt update & & sudo apt install selinux-basics selinux-policy-default selinux-utils auditd audispd-plugins policycoreutils
- 执行:
- 切换为宽容模式并重启
- 编辑 /etc/selinux/config,将 SELINUX=permissive(首次定制建议宽容以收集拒绝日志,再切回强制)。
- 执行:
sudo reboot
- 验证与临时切换
- 查看:
getenforce、sestatus - 临时切换:
sudo setenforce 1(强制)或sudo setenforce 0(宽容)
- 查看:
- 原则:定制阶段先用宽容模式收集 AVC 拒绝日志,规则验证无误后再切回强制模式。
三 定制策略的三种常用方式
- 方式 A 使用 audit2allow 从拒绝日志快速生成模块
- 收集并生成模块:
sudo ausearch -m avc -ts recent | audit2allow -M mypol - 加载模块:
sudo semodule -i mypol.pp - 适用:快速修复常见权限不足,作为最小可行补丁。
- 收集并生成模块:
- 方式 B 使用 Makefile 构建自定义模块(.te 源文件)
- 创建目录与源文件:
mkdir -p ~/selinux-custom & & cd ~/selinux-custom & & nano custom_policy.te - 示例(演示用,按需改写):
policy_module(custom_policy, 1.0) require { type httpd_t; class file { read write open } ; } allow httpd_t httpd_sys_content_t:file { read write open } ; - 编译并安装:
make -f /usr/share/selinux/devel/Makefile生成 custom_policy.pp,然后sudo semodule -i custom_policy.pp - 适用:需要更可控、可维护的策略模块。
- 创建目录与源文件:
- 方式 C 调整文件上下文与端口标签(需 semanage)
- 文件上下文:
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/myapp(/.*)?" & & sudo restorecon -Rv /var/www/myapp - 端口标签:
sudo semanage port -a -t http_port_t -p tcp 8080 - 适用:目录/文件类型或端口类型不匹配导致的访问问题。
- 文件上下文:
四 验证与排错
- 实时监控拒绝事件:
sudo ausearch -m avc -ts recent - 解释拒绝原因:
sudo ausearch -m avc -ts recent | audit2why - 查看整体状态:
sestatus、getenforce - 策略生效验证:确认目标进程不再产生同类 AVC 拒绝,且功能按预期运行;必要时回到宽容模式复核日志与规则。
五 维护与最佳实践
- 模式管理:定制与回归测试期间使用 permissive,验证通过后改为 enforcing;避免直接长期禁用。
- 策略演进:新增服务或变更路径时,优先用 audit2allow 生成草案,再人工审阅并收敛为最小权限的 .te 模块,用
semodule -i加载。 - 上下文与端口:对新增目录/文件使用 semanage fcontext 与 restorecon;对自定义服务端口使用 semanage port 打上正确类型。
- 变更控制:为策略模块与关键配置建立变更记录与回滚方案(如保存 .te/.pp 与变更说明),在测试环境充分验证后再上线。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: SELinux在Ubuntu中如何定制
本文地址: https://pptw.com/jishu/766487.html
