快速开始
最简单的方式——一条命令,自动为您的操作系统/架构选择正确的二进制文件:
curl -fsSL https://get.enodia.sh/unix | sh # Linux/macOS/Android (Termux)irm https://get.enodia.sh/windows | iex # Windows安装完成后,在同一个 PowerShell 窗口中即可立即运行 enodia——安装程序会直接修改当前会话的 PATH,而不仅仅是修改新终端才会读取的、持久化在注册表中的值。
在 Windows 上,如果您希望由包管理器跟踪更新,也可以使用Chocolatey(winget 软件包正在准备中,尚未发布):
choco install enodia或者,如果您希望由包管理器跟踪更新,也可以使用软件包:
sudo dpkg -i enodia_linux_amd64.deb # Debian/Ubuntusudo rpm -i enodia_linux_amd64.rpm # Fedora/RHELapk add --allow-untrusted enodia_linux_amd64.apk # Alpinesudo pacman -U enodia_linux_amd64.pkg.tar.zst # Arch每个软件包都会将二进制文件安装到 /usr/bin/enodia,将 man 手册页安装到 /usr/share/man/man1/ 下,并创建一个专用的非特权 enodia 系统用户——运行这些都不需要 root 权限。请从最新发布中获取合适的软件包。
或者使用容器:
docker run --rm \ -v /etc/enodia:/config:ro \ ghcr.io/epicmorg/enodia:latest check --config /config/config.yaml从 1.1.0 开始,该镜像由一个配套仓库构建和发布,即EpicMorg/docker,按其自己的计划进行——不再由本项目自身的发布流水线负责,但发布地址和标签保持不变。镜像同时发布到
docker.io/epicmorg/enodia 和 Quay,标签相同——latest、单独的主版本号(2),以及不带构建后缀的确切版本(例如 2.0.0——已在全部三个镜像仓库上实际确认;早期流水线的标签形如 1.0.0-1,仍然可以拉取,只是今后的新版本不再这样打标签)。有两处值得了解的实际变化:该镜像现在仅支持 linux/amd64
(发布流程迁移时放弃了 arm64),并且以 root 身份运行,而不是专用用户,其基础镜像是本项目自有的
debian:trixie-light,而不是 scratch。
需要 Go——enodia 当前所针对的确切版本请查看 go.mod。
git clone https://github.com/EpicMorg/enodia.gitcd enodiago build -o enodia ./cmd/enodia./enodia version| 操作系统 | 架构 | 最低版本 |
|---|---|---|
| Linux | amd64, arm64 | 内核 3.2 或更高——Debian 8+、Ubuntu 14.04+、RHEL/CentOS 7+ 均完全满足 |
| Windows | amd64, arm64, 386 | Windows 10 / Windows Server 2016 或更高 |
| macOS | amd64, arm64 | macOS 12 Monterey 或更高 |
| Android (Termux) | 仅 arm64 | Android 7 或更高——即 Termux 自身的最低要求,比实际促成单独构建的 Android 5.0 Lollipop PIE 支持最低要求更严格(参见上文关于 Termux 的说明)。已 root 的设备可能需要 su——参见上文的注意事项 |
这些是 Go 工具链自身的最低要求,而不是 enodia 额外附加的要求。使用更新的 Go 从源码构建会进一步提高 macOS 的最低版本——这是工具链的决定,而不是本项目的决定。
您的第一个配置
Section titled “您的第一个配置”在二进制文件旁边(或在配置中列出的任一位置)创建 enodia.yaml:
schemaVersion: 1targets: - id: gitlab-main product: gitlab address: https://gitlab.example.com然后运行:
enodia checkID PRODUCT PATCH LIFECYCLE BRANCH SEVERITY REASON CVESgitlab-main gitlab ...不带 --from 的 check 会在一个进程中完成收集和评估——enodia 先访问您的目标,再访问互联网检查其生命周期数据。如果您的目标所在环境只能访问您的基础设施(封闭环境)而无法访问互联网,请改为将两个阶段拆开:
# 在封闭网络内部——无需互联网enodia collect --config enodia.yaml -o inventory.jsonl
# 在其他任何地方——无需访问您的服务enodia check --from inventory.jsonl具有私有 API 的目标需要一个具名凭据,它从 enodia.yaml 自身的 credentials: 映射中解析(或从单独的 credentials.yaml 中解析——请参阅配置):
schemaVersion: 1targets: - id: gitlab-main product: gitlab address: https://gitlab.example.com credentials: gitlab-token
credentials: gitlab-token: kind: token-header header: PRIVATE-TOKEN value: "${GITLAB_TOKEN}"${GITLAB_TOKEN} 会在加载时从环境变量中插值——请参阅配置。机密信息永远不必与您的服务清单放在同一个文件中。