- 网络安全
- 运维
- 应用安全
【免费下载链接】ansible-collection-hardening
This Ansible collection provides battle tested hardening for Linux, SSH, nginx, MySQL
导读
molecule/ssh_hardening_vm/INSTALL.rst是 ansible-collection-hardening 仓库中随每个 Molecule 测试场景分发的驱动安装指南,其核心内容是:在满足 Docker Engine 前置条件的前提下,通过pip安装带 Docker 插件的 Molecule,为运行安全加固角色的集成测试搭建控制端环境。阅读本文后,你将掌握 Molecule Docker 驱动的安装步骤与最佳实践,并理解该仓库各测试场景(ssh_hardening、os_hardening、mysql_hardening、nginx_hardening 等)如何使用 Docker 驱动与 Vagrant 驱动,以及环境变量、验证工具(cinc-auditor)在其中的作用,从而能够独立复现仓库的安全测试流程。
环境要求:Docker Engine 是唯一前置条件
原文档在 Requirements 一节中明确列出的唯一硬性前置条件是:
- Docker Engine
这意味着在安装 Molecule 的 Docker 驱动之前,控制端机器必须已经可以正常使用 Docker 守护进程(例如docker info能成功返回)。Docker 驱动本身并不管理虚拟机,而是直接基于 Docker 容器来创建测试实例,因此不要求虚拟化层(如 VirtualBox、libvirt),运行门槛比 Vagrant 驱动更低。
从仓库的 requirements.txt 可以看出,项目同时在依赖中锁定了docker==7.2.0(Docker SDK for Python),说明控制端需要通过该 SDK 与 Docker Engine 通信;若缺少 Docker Engine 或当前用户无权访问 Docker 套接字,Molecule 的create阶段将无法拉起测试实例。
安装:虚拟环境优先,用户级安装兜底
原文档给出的安装命令是:
$ python3 -m pip install 'molecule[docker]'命令中的'molecule[docker]'是 pip 的 extras 语法,表示在安装molecule包的同时,一并安装其 Docker 驱动所需的全部依赖(即molecule-plugins[docker]这类插件包)。安装前请留意原文档强调的两条最佳实践:
- 优先在虚拟环境中安装:原文档建议参考官方"Virtual environment"文档来隔离依赖。虚拟环境可以避免不同项目之间的依赖冲突,也避免污染系统 Python。例如可以先用
python3 -m venv .venv创建虚拟环境并激活,再执行上述 pip 安装命令。 - 非虚拟环境场景下使用
--user标志:如果不使用虚拟环境,原文档强烈建议在执行pip时传入--user标志,将包安装到当前用户的 site-packages,而不是系统级目录,从而避免覆盖系统包或需要 root 权限:
$ python3 -m pip install --user 'molecule[docker]'版本锁定:以仓库 requirements.txt 为准
安装指南给出的命令不携带版本号,会拉取当前最新版本;而该仓库为了保证 CI 可复现,在 requirements.txt 中对相关工具链做了精确锁定:
molecule==26.9.0 molecule-plugins[docker]==26.9.28 ansible-core==2.21.4 docker==7.2.0 jmespath==1.1.0 aar-doc==2.3.0 passlib==1.7.4对照原文档的安装命令可以得出如下事实:
molecule[docker]最终会安装molecule主包与molecule-plugins[docker]插件;仓库锁定的插件版本为26.9.28,与 Molecule 主包26.9.0配套;- 测试依赖
ansible-core==2.21.4,即控制端运行 Ansible provisioner 的运行时; docker==7.2.0是 Python 侧与 Docker Engine 通信的 SDK;jmespath供 Ansible 的json_query过滤使用,passlib用于密码哈希等场景。
因此,若希望与仓库 CI 行为完全一致,可在虚拟环境中改用:
$ python3 -m pip install -r requirements.txt若仅需要驱动能力,python3 -m pip install 'molecule[docker]'即可满足。需要说明的是,install 指南中的该命令是适用于仓库内所有场景目录的通用模板;而真正用于虚拟机场景的依赖在 requirements-vm.txt 中另行锁定为molecule-plugins[vagrant]==26.9.28,这是后文要讲到的 Docker 驱动与 Vagrant 驱动的分工。
仓库中的实际应用:Docker 驱动与 Vagrant 驱动的分工
虽然INSTALL.rst的标题是 Docker driver installation guide,但该文件作为通用模板同时出现在多个场景目录中。真正决定每个场景用哪种驱动的是对应的molecule.yml:
- Docker 驱动的场景:
molecule/ssh_hardening/molecule.yml、molecule/os_hardening/molecule.yml、molecule/mysql_hardening/molecule.yml、molecule/nginx_hardening/molecule.yml均在driver段声明name: docker。以 ssh_hardening 场景配置 为例:
driver: name: docker platforms: - name: instance image: rndmh3ro/docker-${MOLECULE_DISTRO}-ansible:latest command: ${MOLECULE_DOCKER_COMMAND:-/lib/systemd/systemd} volumes: - /sys/fs/cgroup:/sys/fs/cgroup:rw privileged: true cgroupns_mode: host pre_build_image: true这里有几个值得注意的实现细节:
测试镜像由
MOLECULE_DISTRO环境变量动态决定,即镜像名形如rndmh3ro/docker-<发行版>-ansible:latest;privileged: true与cgroupns_mode: host以及/sys/fs/cgroup的只读挂载,是为了让容器内能够运行 systemd,模拟接近真实操作系统的环境,便于测试 sshd 等服务;pre_build_image: true表示直接使用预构建镜像,不通过 Molecule 本地构建;command: ${MOLECULE_DOCKER_COMMAND:-/lib/systemd/systemd}允许通过环境变量覆盖容器入口,默认以 systemd 作为 PID 1。Vagrant 驱动的场景:
molecule/ssh_hardening_vm/molecule.yml和molecule/os_hardening_vm/molecule.yml则声明driver: vagrant、provider: libvirt,用于在真实虚拟机上测试(如 OpenBSD、FreeBSD 等 Docker 不便模拟的系统)。其平台定义同样使用box: ${MOLECULE_DISTRO},且实例名取name: ${USER}——注释中解释了原因:需要在同一宿主机上并行启动多台虚拟机以加速测试,实例名必须能按操作系统用户预测,以便清理被取消的运行。
因此,本仓库的测试矩阵可以概括为:通用 Linux 发行版走 Docker 驱动(快速、轻量),特殊/BSD 类系统走 Vagrant + libvirt 驱动(真实虚拟机)。安装指南所讲的molecule[docker]只覆盖前者;若需运行ssh_hardening_vm等场景,还应参照 requirements-vm.txt 安装molecule-plugins[vagrant],并额外具备 libvirt 环境。
从安装到运行:Molecule 场景序列与验证链路
安装好驱动后,即可按仓库约定运行测试。运行前必须先设置MOLECULE_DISTRO环境变量——molecule/shared/prerequisites.yml 中通过assert强制检查该变量非空,否则直接失败并提示参考CONTRIBUTING.md:
- name: Make sure environment variable for MOLECULE_DISTRO is set ansible.builtin.assert: that: - "lookup('env','MOLECULE_DISTRO') | length > 0" fail_msg: "You need to set MOLECULE_DISTRO to a supported image name. See CONTRIBUTING.md"以 Docker 驱动场景为例,test_sequence依次执行dependency → prerequisites 校验 → destroy → syntax → create → prepare → check → converge → idempotence → verify → destroy(见 ssh_hardening 场景配置)。其中:
- prepare:安装被测角色所需的系统包并生成 SSH 主机密钥。以 ssh_hardening/prepare.yml 为例,它按发行版分别调用
dnf/apt/zypper/apk/pacman安装openssh系列包,并用ssh-keygen -A生成主机密钥;在 Fedora 上还会通过set_fact强制ansible_python_interpreter=/usr/bin/python3。 - converge:应用被测角色。仓库使用
include_role方式,例如 ssh_hardening_vm/converge.yml 引入devsec.hardening.ssh_hardening并设置sftp_enabled: false。 - verify:以安全基线做合规校验。Docker 场景在 ssh_hardening/verify.yml 中通过
docker run启动docker.io/cincproject/auditor,以-t docker://instance连接被测容器并执行 DevSec SSH Baseline 测试;测试失败(rc != 0)时任务会输出结果并调用fail使整个测试失败。
VM 场景的验证方式略有不同:ssh_hardening_vm/verify.yml 先通过vagrant ssh-config导出 SSH 配置,再由容器化的 cinc-auditor 以--ssh-config-file和-t ssh://${USER}远程执行基线测试,并挂载waivers_<发行版>.yaml作为豁免文件(例如 waivers_almalinux-10.yaml,其中注释说明 cinc-auditor 至少需要一个被豁免的 control 才能正常运行)。
此外,prepare阶段还会针对特殊系统做适配:例如 ssh_hardening_vm/prepare.yml 对 OpenBSD(generic/openbsd7)临时更换安装源并执行pkg_add -I python%3.11,这是因为 BSD 系系统在 Ansible 下的引导方式与 Linux 不同;ssh_hardening_vm/verify.yml 中还会用type硬链接替代which以满足 Inspec 的探测逻辑。这些细节说明:即使安装好驱动,真实运行场景仍可能依赖发行版特定的准备任务。
安装与运行注意事项小结
- 驱动与场景要匹配:运行 Docker 驱动场景时按
INSTALL.rst安装molecule[docker]即可;运行 Vagrant 场景则需molecule-plugins[vagrant]及 libvirt provider。 - 设置
MOLECULE_DISTRO:所有场景的镜像/Box 均由该环境变量决定,缺失时 prerequisites 校验会直接失败。 - Docker 容器需支持 systemd:Docker 场景的容器以特权模式 + cgroup 挂载运行,普通非特权容器无法正确承载 sshd 等服务测试。
- 控制端 Python 解释器:场景配置统一设置了
interpreter_python: auto_silent,并在部分发行版上显式指定/usr/bin/python3,安装驱动时建议使用与仓库锁定版本一致的 Python 3 环境。 - 遵守贡献规范:如需新增测试或复现 CI,请参照 CONTRIBUTING.md 中"先写测试再实现"的流程,安全审查依赖集成测试完成。
综上,INSTALL.rst虽然篇幅简短,却是理解整个仓库测试基础设施的入口:一条 pip 命令背后,对应的是 Docker Engine 前置条件、虚拟环境最佳实践、版本锁定策略,以及 Docker/Vagrant 双驱动下各自完整的场景序列与基线验证链路。按照本文步骤配置好控制端环境后,即可用molecule test在本地复现 ansible-collection-hardening 对 Linux、SSH、nginx、MySQL 等系统的加固测试。
- 网络安全
- 运维
- 应用安全
【免费下载链接】ansible-collection-hardening
This Ansible collection provides battle tested hardening for Linux, SSH, nginx, MySQL
相关推荐
ansible-collection-hardening 中 Molecule Docker 驱动安装与 mysql_hardening 测试场景实战
ansible collection hardening 中 Molecule Docker 驱动安装与 mysql_hardening 测试场景实战 本篇指南
网络安全运维应用安全OpenRocket 代码库漫游指南:核心模块结构、GUI 主题定制与单位体系解析
OpenRocket 代码库漫游指南:核心模块结构、GUI 主题定制与单位体系解析 OpenRocket 是一个开源的模型火箭空气动力学与轨迹仿真软件,其代码库
网络安全运维应用安全开机卡 Logo 不用慌:用 MTKClient 给联发科手机做完整备份与救砖的实战路线图
开机卡 Logo 不用慌:用 MTKClient 给联发科手机做完整备份与救砖的实战路线图 MTKClient 是一款面向联发科(MediaTek)芯片设备的免
网络安全运维应用安全
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考