本指南将指导你设置用于运行时使用的加密数据卷。
- 已安装 cryptpilot-crypt
- 要加密的块设备或分区(例如
/dev/nvme1n1p1) - 设备应该未挂载且不在使用中
此示例使用一次性密码创建加密卷。数据是易失性的,关闭后将丢失。
如果还没有分区,创建一个:
parted --script /dev/nvme1n1 \
mktable gpt \
mkpart part1 0% 100%在 /etc/cryptpilot/volumes/data0.toml 创建配置文件:
mkdir -p /etc/cryptpilot/volumes
cat << EOF > /etc/cryptpilot/volumes/data0.toml
volume = "data0"
dev = "/dev/nvme1n1p1"
auto_open = true
makefs = "ext4"
integrity = true
[encrypt.otp]
EOF配置说明:
volume = "data0":卷名称(将创建/dev/mapper/data0)dev = "/dev/nvme1n1p1":底层块设备auto_open = true:启动时自动打开makefs = "ext4":首次初始化时创建 ext4 文件系统integrity = true:启用 dm-integrity 数据完整性保护[encrypt.otp]:使用一次性密码(数据是易失性的)
验证配置:
cryptpilot-crypt config check --keep-checking初始化加密卷(仅首次需要):
cryptpilot-crypt init data0这将:
- 使用 LUKS2 格式化设备
- 创建文件系统(ext4)
- 如果启用,设置 dm-integrity
打开(解密)卷:
cryptpilot-crypt open data0验证卷已打开:
cryptpilot-crypt show示例输出:
╭────────┬───────────────────┬─────────────────┬──────────────┬──────────────────┬───────────────╮
│ Volume ┆ Volume Path ┆ Underlay Device ┆ Key Provider ┆ Extra Options ┆ Status │
╞════════╪═══════════════════╪═════════════════╪══════════════╪══════════════════╪═══════════════╡
│ data0 ┆ /dev/mapper/data0 ┆ /dev/nvme1n1p1 ┆ otp ┆ auto_open = true ┆ ReadyToOpen │
│ ┆ ┆ ┆ ┆ makefs = "ext4" ┆ │
│ ┆ ┆ ┆ ┆ integrity = true ┆ │
╰────────┴───────────────────┴─────────────────┴──────────────┴──────────────────┴───────────────╯
挂载卷并开始使用:
mkdir -p /mnt/data0
mount /dev/mapper/data0 /mnt/data0现在你可以在 /mnt/data0 中读写文件。
使用完毕后,卸载并关闭:
umount /mnt/data0
cryptpilot-crypt close data0Warning
使用 OTP 提供者时,关闭卷将永久擦除所有数据!OTP 仅用于临时/暂存存储。
要在系统启动期间自动打开卷:
确保卷配置中有 auto_open = true(示例 1 中已设置)。
systemctl enable --now cryptpilot.service为了自动挂载,添加到 /etc/fstab:
echo "/dev/mapper/data0 /mnt/data0 ext4 defaults 0 2" >> /etc/fstab现在卷将在每次启动时自动解密和挂载。
对于生产工作负载,使用带有远程证明的密钥代理服务。
cat << EOF > /etc/cryptpilot/volumes/data1.toml
volume = "data1"
dev = "/dev/nvme1n1p2"
auto_open = true
makefs = "ext4"
integrity = true
[encrypt.kbs]
url = "https://kbs.example.com"
resource_path = "/secrets/data1-key"
EOFcryptpilot-crypt config check --keep-checking
cryptpilot-crypt init data1
cryptpilot-crypt open data1
mkdir -p /mnt/data1
mount /dev/mapper/data1 /mnt/data1打开卷时:
- 在 TEE 中生成证明证据
- 将证据发送到 KBS
- KBS 验证证据
- 如果验证通过,KBS 返回解密密钥
- 卷被解密并打开
对于阿里云用户,使用 KMS 进行集中式密钥管理。
cat << EOF > /etc/cryptpilot/volumes/data2.toml
volume = "data2"
dev = "/dev/nvme1n1p3"
auto_open = true
makefs = "xfs"
integrity = false
[encrypt.kms]
kms_instance_id = "kst-****"
client_key_id = "LTAI****"
client_key_password_from_kms = "alias/ClientKey_****"
EOFcryptpilot-crypt config check --keep-checking
cryptpilot-crypt init data2
cryptpilot-crypt open data2
mkdir -p /mnt/data2
mount /dev/mapper/data2 /mnt/data2你可以配置使用不同密钥提供者的多个卷:
# 卷 1:临时存储(OTP)
cat > /etc/cryptpilot/volumes/scratch.toml << EOF
volume = "scratch"
dev = "/dev/nvme1n1p1"
auto_open = true
makefs = "ext4"
[encrypt.otp]
EOF
# 卷 2:持久数据(KBS)
cat > /etc/cryptpilot/volumes/data.toml << EOF
volume = "data"
dev = "/dev/nvme1n1p2"
auto_open = true
makefs = "ext4"
integrity = true
[encrypt.kbs]
url = "https://kbs.example.com"
resource_path = "/secrets/data-key"
EOF
# 卷 3:备份存储(KMS)
cat > /etc/cryptpilot/volumes/backup.toml << EOF
volume = "backup"
dev = "/dev/nvme2n1"
auto_open = false
makefs = "xfs"
[encrypt.kms]
kms_instance_id = "kst-****"
client_key_id = "LTAI****"
client_key_password_from_kms = "alias/ClientKey_****"
EOF初始化并打开所有卷:
cryptpilot-crypt init scratch
cryptpilot-crypt init data
cryptpilot-crypt init backup
systemctl enable --now cryptpilot.service # 自动打开 scratch 和 data
cryptpilot-crypt open backup # 手动打开 backup创建加密的交换分区:
cat > /etc/cryptpilot/volumes/swap.toml << EOF
volume = "swap"
dev = "/dev/nvme1n1p4"
auto_open = true
makefs = "swap"
[encrypt.otp]
EOF初始化、打开并激活:
cryptpilot-crypt init swap
cryptpilot-crypt open swap
swapon /dev/mapper/swap添加到 /etc/fstab:
echo "/dev/mapper/swap none swap defaults 0 0" >> /etc/fstab如果 config check 报告错误:
cryptpilot-crypt config check --keep-checking常见问题:
- 缺少必需字段(
volume、dev、encrypt) - 无效的设备路径
- 无效的密钥提供者配置
如果 cryptpilot-crypt init 失败:
- 检查设备存在:
ls -l /dev/nvme1n1p1 - 检查设备未使用:
lsblk、mount | grep nvme1n1p1 - 检查权限:使用足够的权限运行
- 检查密钥提供者:确保提供者可达(KBS/KMS)
如果 cryptpilot-crypt open 失败:
- 检查卷已初始化:
cryptpilot-crypt show - 检查密钥提供者:验证网络/证明正常工作
- 检查设备:确保底层设备可用
- 检查日志:
journalctl -u cryptpilot.service
如果卷在启动时未打开:
- 检查服务已启用:
systemctl status cryptpilot.service - 检查 auto_open 设置:验证配置中有
auto_open = true - 检查服务日志:
journalctl -u cryptpilot.service - 检查网络:对于远程提供者(KBS/KMS),确保网络已启动
- 配置指南 - 详细配置选项
- Systemd 服务 - 启动时自动打开卷
- 密钥提供者 - 密钥提供者配置详情