sowrhoop/cipherblue
GitHub: sowrhoop/cipherblue
将 Fedora Silverblue 改造为零信任不可变工作站,通过 CI 驱动的密钥、策略与扁平化软件保险库彻底消除配置漂移。
Stars: 1 | Forks: 0
# CIPHERBLUE
[](https://github.com/sowrhoop/cipherblue/actions/workflows/cipherblue-build.yml)
hardened minimal Fedora Silverblue 镜像,强制执行零信任、不可变操作系统蓝图,并具备 SLSA 来源验证、SELinux + systemd 锁定、严格的软件包控制以及声明式的 Flatpak 保险库。
本仓库包含镜像配方、注入到不可变层的系统配置,以及在构建和运行时用于强制执行 Cipherblue 安全态势的辅助代码。
目录
- 快速摘要
- 高级架构
- 硬化特性(变更内容与位置)
- 构建、CI 与密钥管理
- 部署 Cipherblue(重基说明)
- 安全 / 限制 / 贡献
- 附录:精确的文件映射(实现文件与脚本)
## 快速摘要
- 基础:派生自 Silverblue 镜像(配方:`recipes/recipe-cipherblue.yml`,基础镜像:`quay.io/fedora/fedora-silverblue`,镜像版本:`latest`)。
- 目的:为高价值工程提供不可变、可审计的工作站设备,并具备强大的平台完整性保证。
## 高级架构
- 构建时:
- GitHub Actions 与 BlueBuild 协作,使用 `recipes/recipe-cipherblue.yml` 和一组文件与脚本模块构建镜像。CI 在配置时注入密钥并运行验证工具(crane、slsa-verifier)。
- 本地模块(modules/cipherblue-signing)配置容器注册表并复制容器签名密钥,以启用镜像验证。
- 运行时强制:
- 多个 systemd 单次执行/守护进程单元与辅助脚本(位于 `files/system/usr/libexec/cipherblue/` 和 `files/system/usr/lib/systemd/system/`)强制执行不可变性、协调内核参数、管理 Flatpak 状态、审计配置漂移并验证当前部署 OSTree 镜像的 SLSA 来源。
与上游 Silverblue 相比,Cipherblue 的变更(摘要)
Cipherblue 是有明确立场的:它减少运行时攻击面,强制执行加密来源证明,锁定用户与系统状态,并将运行时配置转换为位于不可变层下的少量可审计文件。关键变更包括:
- 配方中新增的软件包(dnf 安装):`hardened_malloc`、`openssl`、`patch`、`sbsigntools`、`no_rlimit_as`、`crane`、`slsa-verifier`、`gnome-tweaks`、`tlp`、`fscrypt`、`wl-clipboard`。
- RPM-OSTree 安装:`gnome-disk-utility`。
- 配方中明确移除的软件包(rpm-ostree remove):`buildah`、`crun`、`dnf5`、`fedora-logos`、`fedora-logos-httpd`、`libdnf5`、`libdnf5-cli`、`sdbus-cpp`、`yajl`。
- 构建时激进的软件包移除(DNF5 驱动)——请参阅 `files/scripts/package-remover.sh` 获取完整列表及被移除的类别(桌面、多媒体、虚拟化、打印、网络辅助等)。
- 清理本地软件包层与仓库(请参阅 `files/scripts/cipherblue-cleanup.sh`)。系统级 Flatpak 远程被移除,并强制执行受控的 Flatpak 保险库。
## 硬化特性(详细说明,对应实现文件)
1. 镜像来源与重基 / SLSA 验证
- `files/system/usr/libexec/cipherblue/verify-provenance.sh` — 使用 `slsa-verifier` 与 `crane` 验证运行中的 OSTree 镜像,对照预期来源/分支;凭证位于 `/etc/ostree/auth.json`。
- `files/system/usr/libexec/cipherblue/cipher-secure-rebase.sh` — 安全重基逻辑(在有保险库/凭证可用时重基到已签名镜像)。
- `modules/cipherblue-signing/*` — 配置容器签名(将 `/etc/pki/containers/*.pub` 复制到 `/usr/etc/pki/containers/` 并在 `registries.d/` 放置注册表配置)。
2. 内核 / 启动硬化
- `files/system/usr/lib/bootc/kargs.d/10-cipherblue.toml` — 声明式内核参数注入 OSTree(包含多项加固与缓解参数)。
- `cipherblue-sync/cipherblue-sync.sh` 与 `files/system/usr/libexec/cipherblue/cipher-kargs-reconciler.sh` — 协调 TOML / OSTree 参数,自动原子化应用缺失参数(systemd 单元:`cipher-kargs-reconciler.service`)。
- `files/system/usr/libexec/cipherblue/cipher-grub-lockdown.sh` — 生成 GRUB PBKDF2 哈希并写入 `/boot/grub2/user.cfg` 以锁定引导加载程序。
3. SELinux 硬化与自定义策略
- `files/scripts/selinux-hardening.sh` — 单事务执行 `setsebool -P`,切换一组较大的 SELinux 布尔值(多数关闭,少数开启:`deny_bluetooth`、`deny_ptrace`、`secure_mode`、`secure_mode_policyload`)。
- `files/scripts/installselinuxpolicies.sh` 与 `files/scripts/selinux/*` — 编译并安装额外 SELinux 模块(例如 `flatpakfull`、`nautilus`、`systemsettings`、`thunar`、用户命名空间硬化模块)。
4. Systemd 状态与服务硬化
- `files/scripts/systemd-hardening.sh` — 禁用并屏蔽大量上游被认为不必要或危险的服务(sshd、avahi、cups、sssd、NFS 守护进程等),并启用 Cipherblue 零信任服务。
- `files/system/usr/lib/systemd/system/*.service` 与 `*.timer` — cipher-* 单元实现强制执行代理(示例):
- `files/system/usr/lib/systemd/system/cipherblue-sentinel.service` + `usr/libexec/cipherblue/sentinel-daemon.sh` — 运行时监控/遥测守护进程(通过 notify-send/logger 告警),监视漂移、服务故障与 SELinux 状态。
- `files/system/usr/lib/systemd/system/cipher-flatpak-vault.service` + `usr/libexec/cipherblue/cipher-flatpak-vault.sh` — 协调系统 Flatpak 与声明式保险库列表。
- `files/system/usr/lib/systemd/system/cipher-flatpak-update.{service,timer}` — 定时应用更新。
- `files/system/usr/lib/systemd/system/cipher-audit-drift.{service,timer}` — 每日配置漂移审计。
- `files/system/usr/lib/systemd/system/cipher-cleanup.{service,timer}` — 周期性垃圾回收与 rpm-ostree 清理。
5. 基于 Polkit 的状态变更控制
- `files/system/etc/polkit-1/rules.d/00-cipherblue-appliance.rules` — 零信任 Polkit 策略:
- 严格禁止非 root 用户对 Flatpak 与 rpm-ostree 的状态变更。
- 为普通 GNOME control-center 动作实现允许列表,并对敏感动作强制要求 AUTH_ADMIN。
- 通过 `logger` 发送被阻止尝试的遥测,以便 sentinel 通知/记录事件。
6. Flatpak 保险库与软件供应控制
- `files/scripts/cipherblue-private.sh` — CI 时密钥注入引擎,将声明式的 Flatpak 白色列表与私有保险库覆盖 tarball 置入 `/etc/cipherblue/`。
- `files/system/usr/libexec/cipherblue/cipher-flatpak-vault.sh` — 运行时强制器,确保仅信任经过 CI 验证的 Flatpak 远程(`cipherblue-verified-floss`)且系统 Flatpak 集合与 `/etc/cipherblue/flatpaks.list` 匹配。
- `files/scripts/removefedoraflatpakremoteservice.sh` + `cipherblue-cleanup.sh` — 移除 Fedora/Flathub 系统远程并防止自动重新添加。
7. 文件系统与用户环境不可变性
- `files/system/usr/libexec/cipherblue/cipher-user-env-lockdown.sh` — 级联节点冻结引擎:在用户主目录下实施狭窄白名单,并使用 `chattr +i` 冻结重要文件以防止状态变更。
- `files/system/usr/libexec/cipherblue/cipher-mount-enforcer.service` — 对临时系统重新挂载并附加 `nosuid,noexec,nodev`(如适用)。
- `files/system/usr/libexec/cipherblue/cipher-audit-drift.sh` — 对比 `/usr/etc` 与 `/etc` 以检测配置漂移并告警。
8. SUID / 能力与权限硬化
- `files/scripts/suid-hardening.sh` 与 `files/scripts/removesuid.sh` — 移除除白名单外的 SUID/SGID 位;适当情况下移除 `pkexec`、`sudo`、`su` 并为特定二进制添加必要能力以替代 SUID。
- `files/scripts/permission-hardening.sh` — 严格 umask、禁用 securetty、收紧内部辅助脚本权限(700)及其他 PAM/登录默认设置。
9. 内核可调参数与运行时硬化(sysctl)
- `files/system/etc/sysctl.d/60-cipherblue-hardening.conf` — 激进的运行时内核加固(ptrace/yama、BPF JIT、kptr_restrict、默认禁用 IPv6、禁用非特权用户命名空间等)。
- `files/system/usr/lib/sysctl.d/55-hardening.conf` — 补充网络与内核加固值。
10. 模块黑名单与内核特性阻断
- `files/system/etc/modprobe.d/cipherblue-blacklist.conf` — 黑名单众多驱动/子系统,并使用 `install /bin/false` 阻止加载攻击面模块(USB 网络、遗留文件系统、遥测模块等)。
11. Journald 隐私、coredump 与 tmpfiles 硬化
- `files/system/etc/systemd/journald.conf.d/60-cipherblue-privacy.conf` — `Storage=volatile`,限制与速率限制。
- `files/system/etc/security/limits.d/60-disable-coredump.conf` 与 `files/system/etc/sysctl.d/*` — 禁用 coredump 并调整资源限制。
- `files/system/etc/tmpfiles.d/99-cipherblue-proc.conf` 与 `99-cipherblue-sys.conf` — 对 `/proc` 与 `/sys` 条目实施严格权限。
12. 网络与 NetworkManager 硬化
- `files/system/etc/NetworkManager/conf.d/60-cipherblue.conf` — 禁用自动 DNS、克隆 MAC(隐私)、`dns=systemd-resolved` 并禁用连接性检查(`99-disable-connectivity.conf`)。
13. 软件包与仓库信任模型
- `files/scripts/cipherblue-cleanup.sh` — 移除所有 `/etc/yum.repos.d/*` 与 `/etc/pki/rpm-gpg/*`,强制依赖 CI 流水线与维护的已签名软件包集合。
- `files/scripts/package-remover.sh` — 移除大量上游软件包以减少攻击面;请参阅脚本获取精确的完整列表。
- `files/system/etc/yum.repos.d/cipherblue-packages-fedora.repo` 与 `repo.cipherblue.dev.cipherblue.repo` — cipherblue 仓库配置(已签名 GPG 密钥位于 `files/system/usr/share/pki/rpm-gpg/`)。
14. 三方浏览器与 MDM
- `files/scripts/install-trivalent.sh` — 获取已验证的三方 RPM,验证其来源后安装浏览器及相关 SELinux 策略(`trivalent-selinux`)。
## CI、构建与密钥的使用
- 生产构建在 GitHub Actions 中运行,使用 `.github/workflows/cipherblue-build.yml` 与 `.github/workflows/cipherblue-sync.yml`。
- 构建时消耗的密钥(在仓库 / GH Actions 密钥中设置):
- `CIPHERBLUE_BLOCKLIST` — 以换行/逗号分隔的列表;通过 `cipherblue-private.sh` 置入 `/etc/cipherblue/hosts.blocklist`。
- `CIPHERBLUE_FLATPAKS` — 以逗号分隔的 Flatpak 应用 ID 列表;置入 `/etc/cipherblue/flatpaks.list`。
- `PRIVATE_VAULT_PAT` — 用于通过 HTTPS 获取私有保险库 tarball(包含 Flatpak 覆盖与其它私有配置)的 GitHub 令牌/PAT;`cipherblue-private.sh` 将其阶段化到 `/etc/cipherblue/flatpak-overrides/`。
- 仓库亦提供容器签名配置(modules/cipherblue-signing),以便运行时验证可要求签名/证明工件。
## 本地部署 / 测试
- 快速(测试)重基至最新开发镜像(未签名):
```
rpm-ostree rebase ostree-unverified-registry:ghcr.io/sowrhoop/cipherblue:latest
systemctl reboot
```
- 生产(已签名)镜像工作流 — 优先使用验证与已签名的 `ostree-image-signed:` 引用。运行时 `cipher-secure-rebase.sh` 期望一个已签名的 GHCR 镜像以及用于已认证拉取的 `/etc/ostree/auth.json`。
## 注意事项、限制与约束
- Cipherblue 有意移除许多上游便捷软件包与服务(SSH 服务器、打印、多数桌面附加组件、本地软件包层工具)。这是设计使然——该镜像面向单租户、高保证使用场景,并由 CI 管理软件包生命周期。
- 移除 `sudo` 及其他用户态工具会破坏依赖密码提权的常规工作流。管理操作应在镜像构建流水线或基于 ostree 的工作流中完成。
- 某些内核与服务强化可能在特定硬件上较为激进(例如禁用 IEEE 802.11 功能、禁用部分遥测模块与文件系统)。请在目标硬件上仔细测试。
## 贡献与报告安全问题
- 本项目欢迎贡献。一般问题或 PR 请使用 GitHub issues / pull requests:https://github.com/sowrhoop/cipherblue
- 如发现安全问题,请私下打开 issue(或使用仓库中配置的安全联系渠道),以便维护者能够响应。
## 许可证
- 本项目根据 GNU Affero General Public License v3(AGPL-3.0-or-later)发布。完整条款请参阅 LICENSE 文件。
## 附录:重要文件与生效位置(精选)
- 配方与编排
- `recipes/recipe-cipherblue.yml` — BlueBuild / GitHub Actions 使用的镜像配方。
- `cipherblue-sync/cipherblue-sync.sh` — 上游同步、重命名与参数协调引擎。
- 构建 / 密钥注入
- `files/scripts/cipherblue-private.sh` — 消费 `CIPHERBLUE_BLOCKLIST`、`CIPHERBLUE_FLATPAKS`、`PRIVATE_VAULT_PAT`。
- `modules/cipherblue-signing/` — 构建期间复制到镜像的签名 / 注册表配置。
- 运行时执行脚本(示例)
- `files/system/usr/libexec/cipherblue/sentinel-daemon.sh`
- `files/system/usr/libexec/cipherblue/verify-provenance.sh`
- `files/system/usr/libexec/cipherblue/cipher-secure-rebase.sh`
- `files/system/usr/libexec/cipherblue/cipher-flatpak-vault.sh`
- `files/system/usr/libexec/cipherblue/cipher-flatpak-update.sh`
- `files/system/usr/libexec/cipherblue/cipher-kargs-reconciler.sh`
- `files/system/usr/libexec/cipherblue/cipher-user-env-lockdown.sh`
- Systemd 单元与预设(示例)
- `files/system/usr/lib/systemd/system/cipherblue-sentinel.service`
- `files/system/usr/lib/systemd/system/cipher-flatpak-vault.service`
- `files/system/usr/lib/systemd/system/cipher-flatpak-update.service`
- `files/system/usr/lib/systemd/system/cipher-flatpak-update.timer`
- `files/system/usr/lib/systemd/system/cipher-cleanup.{service,timer}`
- `files/system/usr/lib/systemd/system/cipher-audit-drift.{service,timer}`
- `files/system/usr/lib/systemd/system/cipher-firmware-update.{service,timer}`
- `files/system/usr/lib/systemd/system/cipher-kargs-reconciler.service`
- `files/system/usr/lib/systemd/system-preset/40-cipherblue.preset`
- 关键系统配置文件(示例)
- `files/system/etc/sysctl.d/60-cipherblue-hardening.conf`
- `files/system/usr/lib/sysctl.d/55-hardening.conf`
- `files/system/etc/modprobe.d/cipherblue-blacklist.conf`
- `files/system/etc/polkit-1/rules.d/00-cipherblue-appliance.rules
- `files/system/etc/dconf/db/local.d/00-cipherblue-settings`
- `files/system/etc/dconf/db/local.d/locks/00-cipherblue-locks`
- `files/system/etc/systemd/journald.conf.d/60-cipherblue-privacy.conf`
- `files/system/etc/systemd/logind.conf.d/99-cipherblue-tty-lockdown.conf`
- `files/system/etc/tmpfiles.d/99-cipherblue-proc.conf`
- `files/system/etc/tmpfiles.d/99-cipherblue-sys.conf`
- `files/system/usr/lib/bootc/kargs.d/10-cipherblue.toml`
可获取可执行的、机器可读的文件列表、软件包移除/安装列表及同步引擎使用的精确排除项:
- `files/scripts/package-remover.sh`(显式移除类别)
- `cipherblue-sync/cipherblue-exclude.txt` 与 `cipherblue-sync/upstream-preserve.txt`
- `cipherblue-sync/SYNC_AUDIT.md`(由同步作业生成并包含在 CI 工件中)
标签:Fedora, Flatpak, GitHub Advanced Security, JSONLines, OSTree, SELinux, Silverblue, SLSA, Systemd, 不可变系统, 单租户, 声明式配置, 安全加固, 审计, 容器镜像验证, 密钥签名, 工作站安全, 提示词模板, 最小化系统, 系统锁定, 级联冻结引擎, 节点冻结, 配置漂移, 零信任