linux主机是容器化环境的信任根基,需最小化加固:精简组件、强化内核、收敛权限、固化运行时边界。

容器化环境中的Linux主机不是“只要容器安全就行”的旁观者,它仍是整个运行时信任链的根基。最小化加固不是删减功能,而是收缩攻击面、明确权限边界、消除默认风险——目标是让主机只做它必须做的事,且以最受限的方式去做。
精简系统组件与服务
容器宿主机不需要图形界面、打印服务、蓝牙、邮件传输代理等传统桌面或服务器常见但容器场景无用的软件包。这些组件不仅增加漏洞暴露面,还可能因配置不当引入权限提升路径。
- 安装时选用最小化安装镜像(如centos Stream Minimal、ubuntu Server Minimal、AlmaLinux Boot ISO的“Minimal Install”选项)
- 使用systemctl list-unit-files –state=enabled检查并禁用非必要服务(如avahi-daemon、cups、rpcbind)
- 通过dnf remove –noautoremove(RHEL系)或apt purge(debian系)移除已安装但不用的软件包,避免残留配置文件或定时任务
强化内核与运行时安全基线
容器共享宿主机内核,内核配置直接影响容器隔离强度和逃逸风险。默认发行版内核常启用大量模块和调试功能,需针对性裁剪与加固。
- 关闭非必要内核模块自动加载:echo ‘kernel.modules_disabled = 1’ >> /etc/sysctl.conf,配合sysctl -p生效(需确保所有必需模块已静态编译或手动加载)
- 启用核心安全机制:确认CONFIG_USER_NS=y(用户命名空间)、CONFIG_SECCOMP=y(seccomp)、CONFIG_CGROUPS=y已启用;禁用高危选项如CONFIG_BPF_SYSCALL=n(若无需eBPF)
- 限制容器对内核参数的读写:挂载/proc/sys为只读,或在容器运行时(如containerd)配置readonlyRootfs: true与sysctl白名单
收敛用户权限与访问控制
宿主机上root权限滥用是容器逃逸最常见跳板。必须打破“容器进程即root,宿主机也得root运行”的惯性,建立分层权限模型。
- 禁用root远程登录:设置PermitRootLogin no,并确保sudo仅授权给最小必要命令(用visudo配置NOPASSWD白名单,如docker ps、systemctl status containerd)
- 将Docker socket(/var/run/docker.sock)权限收紧至专用管理组(如docker-admin),禁止普通用户加入该组;优先使用containerd直连而非Docker daemon,减少攻击入口
- 启用auditd监控关键路径:/etc/shadow、/usr/bin/containerd、/var/lib/docker,规则示例:-w /var/run/docker.sock -p wa -k docker_socket_access
固化容器运行时行为边界
主机层面需为容器运行时设定硬性约束,防止容器通过挂载、能力、命名空间等方式突破隔离。这不是替代容器内配置,而是最后一道防线。
- 默认禁用特权容器:dockerd –no-priviliged 或 containerd 配置中设default_runtime = “runc”并移除privileged: true全局允许
- 限制容器可使用的Linux Capabilities:在containerd config.toml中配置default_capabilities仅保留[“CAP_NET_BIND_SERVICE”, “CAP_CHOWN”]等业务必需项,移除CAP_SYS_ADMIN、CAP_DAC_OVERRIDE
- 强制只读挂载敏感路径:通过mount –bind -o ro,remount锁定/etc、/usr、/boot;容器启动时添加–read-only –tmpfs /tmp:rw,size=64m等参数