第 4 篇 / 共 8 篇

本文来自脱敏知识整理,区分历史记录与实时核验;未经核对请勿直接套用命令。

04|KVM 虚拟机、LXC 容器、Docker 与硬件直通的安全边界

知识分类:虚拟化与隔离|2026-10-17 整理|原则已按 Proxmox 官方文档核实;历史实例配置不作为实测。

一、何时用 VM,何时用 LXC

KVM/QEMU VM 拥有独立客户机内核,更适合路由系统、非 Linux 客体、复杂驱动或强隔离场景。LXC 共享宿主 Linux 内核,开销通常较低,适合受信任的 Linux 服务,但其安全边界不同于完整 VM。不要把“Docker 运行在 LXC 中”自动解释成“与宿主完全隔离”。

场景 倾向 关键原因
主路由或独立操作系统 VM 系统内核、网口与重启边界清晰
受信任的媒体服务 非特权 LXC 可评估 较轻量;需解决设备、目录映射
不受信任的第三方容器/脚本 VM 优先 更强的隔离边界
多层 Docker、复杂网络/内核能力 视兼容性选 VM LXC 内嵌 Docker 对 nesting/设备等有要求
PVE 只读审计代理 低权限容器或独立服务 无宿主 root,无任意命令执行

二、非特权 LXC 是默认出发点

非特权容器利用 Linux user namespace,将容器 root 映射到宿主的非特权 UID。对于业务容器,应尽量保留 AppArmor、seccomp、cgroup 隔离,采用最小 capabilities 和精确目录挂载。历史笔记推荐“创建特权 LXC + lxc.apparmor.profile: unconfined + 设备大范围放行”属于高风险路径,不能通用部署。

只读核验:

pct list
pct config <CT_ID>             # 按现场确认的单个实例执行
qm config <VM_ID>

检查 unprivileged、features、lxc.* 自定义配置、挂载权限、网络接口与开机启动。历史上容器曾出现 mp0(知识库)与 mp1(媒体存储)的不同配置,必须以现场配置和 findmnt 两份证据交叉验证。仅看到 onboot: 1 不能证明依赖存储在容器启动前已可用。

三、挂载、UID 映射与权限

LXC bind mount 将宿主目录映射进容器;它不是副本,更不是备份。要为共享目录单独划分宿主路径,避免将 /etc、/root、/var、/ 等敏感路径整体映射进去。非特权容器访问共享目录时,需核查 UID/GID 映射、ACL 和目录实际属主;权限不足时不应通过 chmod -R 777 或改成特权容器“解决”。

Proxmox 官方明确:LXC bind mount 内容不会被 vzdump 备份。独立媒体数据必须由 NAS/宿主存储专项保护。

四、GPU/PCIe 直通与 SR-IOV

PCI 直通(VFIO)使 VM 取得设备或功能的访问权;IOMMU 分组、主板固件、内核驱动及设备是否支持复位,会直接影响可用性。SR-IOV 将一个物理功能(PF)划分为虚拟功能(VF),前提是硬件与驱动正确支持;它不是任何 Intel 核显或任何 Linux 内核都默认支持的功能。

历史资料要求固定旧内核、强制安装第三方 i915-sriov-dkms、设固定 i915.max_vfs 值。此方法强依赖显卡 PCI ID、DKMS 版本与内核,且改动宿主启动,在未确认芯片支持矩阵、引导方式、回滚内核和维护窗口之前,不应执行。LXC 的设备节点共享与 VM 的 PCI passthrough 不是同一个技术动作。不要为追求媒体硬解而牺牲整个宿主稳定性。

五、更新/重启的操作顺序

  1. 只读获取当前 CT/VM 配置和应用依赖;核查备份是否覆盖相关挂载。
  2. 明确只修改哪一台实例,避免顺带修改主路由或 NAS。
  3. 审核影响面:容器重启可能中断媒体、下载、自动化任务。
  4. 有审批后先在非生产副本测试,验证设备和服务,再切换正式配置。
  5. 出现无法启动、权限错乱或数据读写异常,应停止继续变更,按原配置单项回滚。

关联资料与验证依据

结论:保留有用的设备、容器配置概念,废弃“特权 + 关闭保护 + 复制旧参数”的捷径。


2026-10-17 第二阶段核验补充(发布前确认)