温馨提示×

Ubuntu SELinux与虚拟机环境

小樊
38
2025-11-30 17:28:51
栏目: 云计算

Ubuntu 启用 SELinux 与虚拟机环境实践

一 前置说明与准备

  • Ubuntu 默认使用 AppArmor,而 SELinux 可并行启用;当启用 SELinux 后,AppArmor 不会生效,二者一般不会冲突。若希望仅保留 SELinux,可选择卸载 AppArmor(可选)。在虚拟机中操作前务必先做快照,以便回滚。建议安装审计组件 auditd 以收集拒绝日志,便于排错。

二 在 Ubuntu 宿主机启用 SELinux

  • 安装所需软件包
    • sudo apt update
    • sudo apt install selinux-basics auditd setools selinux-policy-dev
  • 激活 SELinux
    • sudo selinux-activate(会在内核启动参数中添加 security=selinux,可检查 /boot/grub/grub.cfg 与 cat /proc/cmdline)
  • 初始化文件标签
    • sudo touch /.autorelabel(首次启用或大量迁移文件后用于为文件系统重新打标签)
  • 配置模式
    • 编辑 /etc/selinux/config:SELINUX=enforcing|permissive|disabled
    • 运行时切换:setenforce 1|0(仅在 enforcing 与 permissive 间切换,无需重启;从/到 disabled 需重启)
  • 重启并验证
    • sudo reboot
    • sestatus、getenforce 查看状态;必要时查看 auditd 日志(/var/log/audit/audit.log)定位拒绝事件。

三 KVM 虚拟化与 sVirt 安全隔离

  • 安装与准备 KVM
    • sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
    • 确认虚拟化与 KVM 模块:cat /proc/cpuinfo | egrep ‘vmx|svm’;lsmod | grep kvm
  • SELinux 与 KVM 的 sVirt 集成
    • 启用 SELinux 后,KVM/QEMU 进程与虚拟机磁盘镜像会被自动置于独立的 MCS/MLS 标签域,实现虚拟机之间的强制访问控制与隔离;即便同一用户启动多台 VM,也能通过标签隔离,降低横向移动风险。
  • 实践要点
    • 保持宿主机 SELinux 为 enforcing,避免关闭导致 sVirt 标签失效。
    • 虚拟磁盘、快照等客体对象保持正确的 SELinux 类型与标签,避免被非授权域访问。

四 常见问题与排错要点

  • 无法从 disabled 切换到 enforcing
    • 修改 /etc/selinux/config 后必须重启;仅使用 setenforce 无法跨越 disabled 状态。
  • 首次启用后服务启动失败或权限异常
    • 检查是否存在 /.autorelabel,该文件会触发系统重启时的全量重打标签;如标签不完整,相关进程可能被拒绝访问必需文件。
  • 拒绝日志定位
    • 使用 ausearch -m avc -ts recent 或查看 /var/log/audit/audit.log,结合 setools(如 apol)分析策略与上下文。
  • AppArmor 与 SELinux 的关系
    • 二者可并存但不会同时生效;启用 SELinux 后 AppArmor 不生效。若追求单一安全框架,可选择卸载 AppArmor(可选)。

0