Ubuntu上SELinux合规性检查的实施方法
由于Ubuntu默认使用AppArmor而非SELinux,若需在Ubuntu上启用SELinux并进行合规性检查,需先完成SELinux的安装与基础配置,再通过以下步骤开展合规性验证:
在Ubuntu上启用SELinux前,需安装SELinux核心组件、策略包及日志分析工具,确保系统支持SELinux功能:
sudo apt update
sudo apt install selinux-basics selinux-policy-default selinux-utils auditd setools policycoreutils-python-utils
安装完成后,需通过selinux-activate命令激活SELinux,或手动编辑/etc/default/grub文件(在GRUB_CMDLINE_LINUX_DEFAULT行添加SELINUX=enforcing),更新GRUB并重启系统使配置生效。
合规性检查的第一步是验证SELinux是否已启用及运行模式是否符合要求(如“Enforcing”模式为强制生效):
sestatus命令,输出会显示SELinux是否启用(enabled/disabled)、当前模式(enforcing/permissive/disabled)及策略类型(如targeted)。getenforce命令可直接输出当前SELinux模式(Enforcing/Permissive/Disabled)。/etc/selinux/config文件,确认SELINUX=参数设置为enforcing(强制模式)或permissive(宽容模式,仅记录违规不阻止)。SELinux的合规性问题(如访问拒绝)会记录在审计日志中,需通过以下工具提取并分析违规信息:
ausearch命令过滤avc(Access Vector Cache)类型的日志,获取最近的访问拒绝记录:sudo ausearch -m avc -ts recent
aureport命令可汇总SELinux事件,生成包含违规次数、类型、涉及主体/目标的报告:sudo aureport -m selinux
audit2why命令解析日志中的违规记录,解释拒绝原因(如上下文不匹配、权限不足),并给出修复建议(如修改上下文、调整布尔值)。SELinux通过安全上下文(Security Context)控制对象(文件、进程)的访问权限,需确保关键资源的上下文符合预期策略:
ls -Z命令查看目标文件或目录的安全上下文(如httpd_sys_content_t表示Web服务器可访问的内容类型):ls -Z /var/www/html/index.html
httpd_sys_content_t但实际为user_home_t),使用chcon命令临时修改(重启后可能失效),或restorecon命令恢复默认上下文(推荐):sudo chcon -Rv --type=httpd_sys_content_t /var/www/html # 临时修改
sudo restorecon -Rv /var/www/html # 恢复默认
semanage fcontext添加策略规则,再执行restorecon应用:sudo semanage fcontext -a -t httpd_sys_content_t "/var/www(/.*)?"
sudo restorecon -Rv /var/www
sudo seinfo -r # 查看角色列表
sudo seinfo -t # 查看类型列表
sealert命令分析SELinux日志,提供图形化或文本化的修复建议(如“建议使用restorecon恢复文件上下文”):sudo sealert -a /var/log/audit/audit.log
sampler(命令行工具)或Grafana+Prometheus组合,实时监控SELinux状态(如模式切换、违规次数),及时发现异常。若日志分析显示存在合规性问题(如服务无法访问所需资源),可通过以下步骤解决:
audit2why确定拒绝的根本原因(如“上下文不匹配”“缺少权限”)。audit2allow根据日志生成自定义策略模块(谨慎使用,避免过度放宽权限):sudo ausearch -m avc -ts recent | audit2why | audit2allow -M my_selinux_policy
sudo semodule -i my_selinux_policy.pp # 加载自定义策略
注意事项:
semanage export)和日志,便于故障恢复与审计追溯。