收起左侧

飞牛系统硬盘数据加密方案-已测试1.1.3107版

2
回复
54
查看
[ 复制链接 ]

0

主题

2

回帖

0

牛值

江湖小虾

[教程] ZFS 原生加密运维脚本+手册 — AES-256-GCM 内核级加密 · sdX漂移免疫 · FNOS深度集成

适用平台: FNOS (Debian 12) / Debian / Ubuntu + OpenZFS ≥ 2.0
配套工具: zfs-encrypt-deploy.sh (1486行) + 15章 HTML 运维手册
配套阅读: 另有 VeraCrypt 加密容器管理方案 适合跨平台场景


📌 背景

飞牛 NAS 默认使用 ZFS 作为存储底座,但 ZFS 原生加密的上手门槛不低——密钥格式、挂载顺序、systemd 集成、sdX 漂移,每个坑都能卡住新手。

这套脚本和手册源于我在飞牛上部署双加密池(vol1 + vol2)的完整实战记录,踩过的坑全写进去了,整理成 一键部署 + 自动恢复 + 完整文档 的开源方案。


🎯 解决的核心痛点

痛点 这个方案怎么解决
ZFS 加密命令复杂,记不住参数 交互式菜单,部署/恢复/锁定/解锁 一键操作
重装系统后密钥丢了,池打不开 部署时自动输出 Base64 密钥备份,recover 命令一键恢复
重启后 /dev/sdX 变了,池显示"已移除" systemd 服务用 zpool import -aN + pool GUID 识别,不依赖 sdX 名
密钥文件在系统盘,重装系统就没了 自动备份密钥到 /etc/zfs/keys/ + 生成 Base64 可打印副本
FNOS WebUI 不认池,显示"未挂载" 自动写入 FNOS PostgreSQL mount 表,WebUI 状态同步
Docker 容器权限报错 fix-acl 命令一键修复 AppUsers ACL (GID 901)
不知道密钥到底是什么 三层密钥架构图解(User Key → Wrapping Key → DEK)

🚀 快速体验

# 1. 交互式菜单(默认)
chmod +x zfs-encrypt-deploy.sh
./zfs-encrypt-deploy.sh

# 2. 部署新加密池(交互式)
./zfs-encrypt-deploy.sh deploy

# 3. 查看加密池状态
./zfs-encrypt-deploy.sh status

# 4. 从 Base64 密钥恢复(换机/重装后)
./zfs-encrypt-deploy.sh recover --pool mypool --base64 <your-key>

菜单预览:

╔════════════════════════════════════════════╗
║  🔐 ZFS 加密池运维工具 v3.2               ║
╚════════════════════════════════════════════╝

  1) 🚀 部署新加密池    (交互式向导)
  2) 🏥 恢复加密池      (Base64 密钥)
  3) 📊 状态面板        (含 GUID / by-id / FNOS DB)
  4) 🔒 锁定加密池      (卸载密钥)
  5) 🔓 解锁加密池      (加载密钥+挂载)
  6) 🔑 密钥管理        (查看/备份/添加)
  7) 🔧 修复 ACL        (AppUsers 权限)
  8) 📖 帮助

  请选择 [1-8]:

🔬 核心功能深度解析

1. 防呆设计(Anti-Footgun)

脚本在部署前会自动检查:

✅ 目标磁盘不是系统盘(/dev/sda 被保护)
✅ 磁盘未被其他 ZFS 池使用
✅ 磁盘没有挂载的文件系统
✅ 挂载点路径不冲突
✅ Base64 密钥格式校验(长度/字符集)

加上 --dry-run 预览模式,新手也可以放心操作。

2. 三层密钥架构

**──────────────────────────────────**
**  🔑 User Key (用户提供)          **  ← 你记住的密码 或 随机 keyfile
**     **─ raw keyfile (32 bytes)   **
**     **─ passphrase (PBKDF2)      **
**──────────────────────────────────**
**  🔐 Wrapping Key (包装密钥)      **  ← ZFS 内部生成,加密 DEK
**──────────────────────────────────**
**  📦 DEK (Data Encryption Key)   **  ← 实际加密数据的密钥,AES-256-GCM
**──────────────────────────────────**

💡 关键理解: 修改密码只是重新加密 Wrapping Key,DEK 不变,无需重新加密全盘数据。这就是 ZFS 加密的"秒改密码"原理。

3. 密钥备份与恢复

部署时自动生成 Base64 编码的密钥备份:

# 部署完成后输出:
# 🔑 Base64 密钥备份(请妥善保存):
#    <your-vol1-base64-key>
#
# 恢复命令:
# zfs-encrypt-deploy.sh recover --pool mypool --base64 <your-vol1-base64-key>

Base64 密钥可以:

  • 打印到纸上存入保险箱
  • 保存到密码管理器
  • 存入加密 U 盘离线保管

4. FNOS PostgreSQL 深度集成

脚本自动操作 FNOS 的 trim 数据库:

-- 自动 upsert(idempotent,不怕重复执行)
INSERT INTO mount (mount_name, mount_point, pool_name, state, ...)
VALUES ('vol1', '/vol1', 'mypool', 0, ...)
ON CONFLICT (mount_name) DO UPDATE SET ...;

部署后飞牛 WebUI 立刻显示正确的挂载状态,不需要手动添加。

5. /dev/sdX 漂移免疫

这是 NAS 上 ZFS 加密最常见的坑。重启后内核 SCSI 探测顺序变了,/dev/sda 变成 /dev/sdc,导致池导入失败。

本方案的系统设计:

# /etc/systemd/system/zfs-load-key.service
[Service]
Type=oneshot
ExecStartPre=/sbin/zpool import -aN    # ← 关键:先导入所有可识别的池
ExecStart=/bin/bash -c 'for pool in $(/sbin/zpool list -H -o name); do
    /sbin/zfs load-key -r "$pool" 2>&1 || true;  # ← 单个失败不影响其他
done'

核心原理: ZFS 靠 pool GUID 识别池(不靠 sdX 名),zpool import -aN 先扫到所有池再逐个加载密钥,彻底解决 sdX 漂移问题。


📖 HTML 运维手册(15章离线可读)

单文件 HTML,暗色主题,飞牛 WebUI 或任何浏览器直接打开:

章节 内容
方案总览与存储栈 — 完整架构图
FNOS 平台特性 — openzfs-* 包/PostgreSQL/AppUsers
ZFS 原生加密原理 — 三层密钥架构/AES-256-GCM
部署示例参考 — 双池配置示例(泛化)
完整部署流程 — 从零到挂载
FNOS 系统集成 — PostgreSQL mount 表详解
systemd 启动链 — 完整依赖分析
sdX 命名漂移 — 根因分析 + 彻底修复
密钥管理全生命周期 — 创建/备份/轮换/销毁
重装 FNOS 后完整恢复 — 换盘/换机流程
十一 日常运维命令参考 — 快照/scrub/扩容
十二 故障排查 — 常见错误速查
十三 安全加固建议 — 密钥存储/审计/防火墙
十四 紧急恢复速查卡 — 一张纸恢复全部
十五 自动化脚本完整说明 — 全部命令参考

🔄 与 VeraCrypt 方案的对比

维度 ZFS 原生加密 VeraCrypt 容器
加密层级 内核级 (ZFS dataset) 用户态 (FUSE)
性能 ⚡⚡⚡⚡⚡ 接近**盘 ⚡⚡⚡ 有开销
整盘加密 ✅ 天然支持 ⚠ 需容器文件
跨平台 ❌ Linux/BSD only ✅ Win/Mac/Linux
快照/克隆 zfs snapshot 原生支持 ❌ 需要额外工具
密钥轮换 ✅ 秒级(只重加密 Wrapping Key) ⚠ 需重建容器
学习成本 中高
适合场景 NAS 主力存储 跨平台文件交换/冷备份

💡 建议: 飞牛 NAS 主力存储用 ZFS 原生加密(本方案),敏感文件跨平台交换用 VeraCrypt 容器(配套方案)。两者互补,不是替代。


📦 文件清单

zfs-encrypt-deploy.sh      (1486行) — shell 脚本,MIT 开源,8 个命令
zfs-encrypt-deploy.html    (1529行) — 15 章离线 HTML 手册,暗色主题

依赖: OpenZFS ≥ 2.0(飞牛已预装)、sudo、bash ≥ 4.0

所有文件不含任何真实密钥、GUID、密码或个人信息,可直接开源使用。


⚠️ 重要提醒

  1. Base64 密钥 = 数据命脉 — 部署后立即打印/备份到离线介质
  2. 系统盘不要加密 — 脚本自动检测并拒绝操作系统盘
  3. 重装前先备份密钥/etc/zfs/keys/ 目录 + Base64 输出都要备份
  4. ZFS 加密 ≠ 备份 — 加密只防泄露,不防误删。定期 zfs snapshot + 异地备份
  5. 密码丢失 = 数据丢失 — ZFS 加密没有后门,忘记密码且没有 Base64 备份则数据永久不可恢复

🙋 反馈与改进

这套方案在飞牛 NAS 上双池部署验证通过,经过多次重启 sdX 漂移测试。如果你:

  • 在不同硬件上测试遇到问题
  • 有其他 NAS 系统(TrueNAS/Unraid)的适配需求
  • 想增加更多自动化功能

欢迎在帖子里交流讨论 🎉


飞牛 NAS · Debian 12 · OpenZFS 2.1 · 双池部署验证通过 | 2026.06.16

收藏
送赞
分享

0

主题

2

回帖

0

牛值

江湖小虾

昨天 14:53 楼主 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

0

主题

2

回帖

0

牛值

江湖小虾

昨天 14:59 楼主 显示全部楼层

[教程] VeraCrypt 加密容器全能管理脚本 + 运维手册 — 双因子认证 · 跨平台 · 开机自启

适用平台: FNOS / Debian / Ubuntu / 任何 Linux
配套工具: vc-encrypt-manager.sh (1265行) + 12章 HTML 运维手册
前置阅读: 另有 [ZFS 原生加密运维脚本+手册]可供参考


📌 背景

在飞牛社区看到不少朋友讨论数据加密方案——有人用 ZFS 原生加密、有人用 VeraCrypt、有人还在观望。之前我已经发了一套 ZFS 原生加密 的完整方案(脚本+手册),这次补上 VeraCrypt 容器加密 的版本。

VeraCrypt 最大的优势是 跨平台 ——同一个加密容器文件,复制到 Windows / Mac / Linux 上都能直接用 VeraCrypt 打开,不依赖特定文件系统或操作系统。


🔐 这个方案解决什么问题?

痛点 解决方案
VeraCrypt 命令行参数太多记不住 交互式菜单 + 7步创建向导
密码不够安全 支持密钥文件双因子认证(密码+密钥文件,缺一不可)
重装系统后 sdX 漂移导致挂载失败 容器是普通文件,放哪都行,不受磁盘名影响
容器头损坏数据全丢 一键备份容器头+密钥文件+元数据
每次开机都要手动挂载 自动生成 systemd 服务,开机自启
记不住命令 配12章离线 HTML 手册,速查卡一张纸搞定

🚀 快速体验

# 1. 运行脚本
chmod +x vc-encrypt-manager.sh
./vc-encrypt-manager.sh

# 2. 菜单选择 "1) 创建加密容器"
# 3. 按向导:选目录 → 起名字 → 定大小 → 选加密级别 → 设密码
# 4. 完成!自动提示挂载

创建过程截图(7步向导):

╔══════════════════════════════════════════════╗
║   🔐 VeraCrypt 加密容器管理器 v1.0           ║
╚══════════════════════════════════════════════╝

  1) 🆕 创建加密容器    (交互式向导)
  2) 🔓 挂载加密容器    (密码+密钥文件)
  3) 🔒 卸载加密容器
  4) 📊 状态面板        (仪表盘)
  5) 💾 备份             (头+密钥+元数据)
  6) 🏥 恢复容器头      (修复损坏)
  7) 🔑 修改密码/密钥   (凭据管理)
  8) 🐧 生成 systemd 自启 (开机挂载)
  9) 🔧 生成密钥文件    (双因子认证)

  请选择 [1-9/h/q]:

🎯 核心功能详解

1. 五级加密预设

级别 算法 速度 场景
1 AES ⚡⚡⚡⚡⚡ 日常文件,性能优先
2 AES-Twofish ⚡⚡⚡⚡ 均衡选择
3 AES-Twofish-Serpent ⚡⚡⚡ 推荐:财务/隐私数据
4 Serpent-Twofish-AES ⚡⚡⚡ 偏执级安全
5 Camellia-Serpent ⚡⚡ 合规/军事级

2. 密钥文件双因子认证

# 生成 256 字节随机密钥文件
dd if=/dev/urandom of=/secure/my-vault.key bs=1 count=256

# 创建容器时绑定密钥文件
./vc-encrypt-manager.sh create   # 向导中选 "是" 使用密钥文件

# 挂载时必须同时提供密码 + 密钥文件
./vc-encrypt-manager.sh mount --vc /data/vault.vc --keyfile /secure/my-vault.key

⚠️ 安全性说明: 密码和密钥文件缺一不可。即使密码泄露,攻击者没有密钥文件也无法挂载。反之亦然。

3. 一键备份(容器头 + 密钥 + 元数据)

./vc-encrypt-manager.sh backup --vc /data/vault.vc

# 备份目录结构:
# ~/vc-backups/vault.vc-20260616-143022/
#   **── vault.vc.bak          # 容器头备份
#   **── vault.key             # 密钥文件副本
#   **── metadata.txt          # 恢复说明(含加密参数)

🔴 强烈建议: 容器头损坏 = 数据永久丢失。备份只需 128KB,务必存到独立物理介质(U盘/另一块硬盘)。

4. systemd 开机自启

# 生成 systemd 服务
./vc-encrypt-manager.sh generate-systemd --vc /data/vault.vc --mp /mnt/vault

# 启用开机自动挂载
sudo cp /etc/veracrypt/containers.d/vault.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable vault.service

系统启动后自动挂载到指定目录,NAS 场景免手动操作。

5. 完整仪表盘

./vc-encrypt-manager.sh status

# 输出:
# 🔧 VeraCrypt 版本
# 🔓 已挂载的加密卷
# 📦 发现的容器文件(全盘扫描)
# 📀 磁盘空间概览
# 💾 备份状态(自动检查是否已备份)
# 🐧 systemd 自启动服务状态

📖 HTML 运维手册(12章离线可读)

单文件 HTML,暗色主题,适合 NAS WebUI 或任何浏览器直接打开:

章节 内容
1 快速入门 — 3分钟创建第一个加密容器
2 VeraCrypt 加密原理 — 级联/XTS/头结构
3 安装与依赖 — FNOS/Debian/Ubuntu
4 加密算法选择指南 — 性能/安全对比表
5 创建容器 — 交互+非交互两种方式
6 密钥文件管理 — 生成/存储/备份
7 挂载与卸载 — 完整命令行参考
8 备份与恢复 — 灾难恢复演练
9 systemd 开机自启 — 模板 unit + 配置
10 跨平台迁移 — Win/Mac/Linux 互通指南
11 故障排查 — 10大常见错误解决方案
12 速查卡 — 一张纸覆盖所有常用命令

🔄 与 ZFS 原生加密的对比

维度 ZFS 原生加密 VeraCrypt 容器
加密粒度 整个数据集 单个文件(容器)
跨平台 ❌ Linux/BSD only ✅ Win/Mac/Linux
性能 ⚡⚡⚡⚡⚡ (内核级) ⚡⚡⚡ (FUSE/userspace)
密钥管理 支持 keyfile/passphrase/prompt 密码+密钥文件双因子
容器迁移 zfs send/recv 复制文件即可
可否认性 ❌ (池结构可识别) ✅ (随机数据外观)
学习成本 中高
适合场景 NAS 整盘加密 跨平台文件交换/冷备份

💡 建议: NAS 主力存储用 ZFS 原生加密,敏感文件交换/冷备份用 VeraCrypt 容器,两者互补。


📦 文件清单

vc-encrypt-manager.sh      (1265行) — shell 脚本,MIT 开源
vc-encrypt-manager.html    (846行)  — 离线 HTML 手册

依赖: VeraCrypt ≥ 1.25(sudo apt install veracrypt 或从 veracrypt.fr 下载)

所有文件不含任何真实密钥、密码或个人信息,可直接开源使用。


⚠️ 安全声明

  1. 密码不落盘 — 脚本创建过程中输入的密码仅存内存,使用后立即清除
  2. 密钥文件权限 400 — 仅主人可读
  3. 无后门 — 纯 shell 脚本,全部可审计
  4. VeraCrypt 无万能密码 — 忘记密码 = 数据永久丢失,请务必:
    • 备份容器头(脚本一键操作)
    • 密码存入密码管理器
    • 定期进行恢复演练

🙋 反馈与改进

这套脚本和文档是在飞牛 NAS 上实测通过后整理出来的。如果你:

  • 发现了 bug 或改进点
  • 有其他使用场景想集成进来
  • 遇到跨平台兼容问题

欢迎在帖子里交流讨论 🎉

upload 附件:VeraCrypt.zip---

写于 FNOS · Debian 12 · VeraCrypt 1.26.20 | 2026.06.16

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则