LUKS 全磁盘加密:Linux 服务器设置指南

15 分钟阅读 - 2026年6月5日

hero section cover
目录
  • LUKS 全盘加密服务器指南
  • 为何选择 LUKS2,以及首先需要检查什么
  • 磁盘布局
  • 使用 LVM 配置 LUKS
  • 密钥管理与远程解锁
  • 加强安全防护并避免被锁定
分享

Linux 服务器的 LUKS 全磁盘加密,包括 LUKS2 设置、LVM 布局、密钥管理、使用 Tang 和 TPM 进行远程解锁以及加固。

LUKS 全盘加密服务器指南

LUKS(Linux统一密钥设置)可对整个Linux块设备进行加密,因此若无主密钥,其内容将无法被读取。 无论是被盗的硬盘、报废的机箱,还是遗忘的备份磁盘:只要正确配置了 LUKS,这些情况都不会导致您的数据泄露。本文介绍了如何在服务器上部署 LUKS 全盘加密,包括 LVM 布局、密钥管理、远程解锁,以及导致用户无法访问自身数据的故障模式。

本文的参考实现是在配备AES-NI支持的Linux服务器上,将LVM置于加密容器内,并采用LUKS2方案。该组合能够处理所有现代工作负载,性能优异,并符合HIPAA、PCI-DSS、GDPR及SOC 2对静态数据的安全要求。

为何选择 LUKS2,以及首先需要检查什么

LUKS 通过 dm-crypt 在块设备层进行加密,主密钥存储在 LUKS 头中的密钥槽内。这种分离至关重要:您可以轮换密码短语或添加新密钥,而无需重新加密磁盘。

LUKS2 是当前的默认选项。它支持多达 32 个密钥槽、JSON 格式的元数据、在线重新加密,以及通过 --integrity 标志实现认证加密。LUKS1 支持 8 个密钥槽,在旧系统上尚可使用,但新部署应优先采用 LUKS2。

在现代硬件上,使用 AES-NI 时的性能开销通常低于 5%。开始前请先检查:

grep -o aes /proc/cpuinfo | head -1
cryptsetup benchmark

如果 grep 返回空结果,则说明您的 CPU 不支持 AES-NI,在高 I/O 负载下加密操作将受限于 CPU 性能。 cryptsetup benchmark 会显示各加密算法的吞吐量,以便您选择硬件支持的最快算法。同时请确认已安装 cryptsetup 并确保 dm-crypt 内核模块是否可用。上述组件在 UbuntuDebianRHELArch 系统中均默认提供。

磁盘布局

有两个分区保持未加密状态:EFI系统分区(512 MB FAT32)和 /boot (1 至 2 GB,ext4 或 xfs)。GRUB 必须读取这两个分区后才能提示输入密码短语。其余所有内容均位于 LUKS 容器内。

推荐的布局是 LUKS 内的 LVM:一个 LUKS 容器包含一个 LVM 卷组,其中包含用于 root、swap 和任何数据分区的逻辑卷。这可以保持 LVM 元数据加密,并允许您在不触及 LUKS 层的情况下调整卷大小或创建卷快照。 LUKS-on-LVM 同样可行,但会暴露卷组结构。

分区大小文件系统加密
EFI 系统512 MB 至 1 GBFAT32
/boot1 至 2 GBext4 / xfs
LUKS 容器剩余空间LUKS2
LVM 根分区20 至 100 GB+ext4 / xfs是(位于 LUKS 内)
LVM 交换分区与内存大小相同交换分区是(位于 LUKS 内)

ext4 是根分区的安全默认选择。xfs 在处理大文件和并行写入方面表现更佳,这对媒体、机器学习和数据库服务器至关重要。对于 SSD 和 NVMe,请添加 discard 选项 /etc/crypttab 中添加选项以启用 TRIM。TRIM 会暴露哪些扇区正在使用,这会造成轻微的信息泄露。对于大多数工作负载,其带来的磨损均衡效益是值得的。如果您的威胁模型包括对设备的取证分析,请将其关闭。

使用 LVM 配置 LUKS

使用以下命令识别目标磁盘 lsblk 并清除现有元数据:

wipefs -a /dev/sdX

可选:使用随机数据覆盖磁盘,确保加密块与空闲空间无法区分:

dd if=/dev/urandom of=/dev/sdX bs=1M status=progress

初始化 LUKS2 容器。对于 --sector-size 4096 适用于 NVMe 及具有 4K 物理扇区的现代 SSD:

cryptsetup luksFormat --type luks2 --sector-size 4096 /dev/sdX
cryptsetup luksOpen /dev/sdX cryptdata

在向磁盘写入任何数据之前,请立即备份头部:

cryptsetup luksHeaderBackup /dev/sdX --header-backup-file luks-header-backup.img

在已解锁的容器上创建 LVM,然后格式化逻辑卷:

pvcreate /dev/mapper/cryptdata
vgcreate vg_secure /dev/mapper/cryptdata
lvcreate -L 50G -n lv_root vg_secure
lvcreate -L 8G -n lv_swap vg_secure
 
mkfs.xfs /dev/vg_secure/lv_root
mkswap /dev/vg_secure/lv_swap

/etc/crypttab ,请使用 UUID,而非 /dev/sdX,因为该值在重启后可能会改变。请通过 blkid /dev/sdX:

cryptdata UUID=<your-uuid> none luks,discard

随后通过 /etc/fstab:

/dev/vg_secure/lv_root  /  xfs  defaults,noatime  0 1

重新生成 initramfs,以便在启动时加载加密钩子:

# Debian/Ubuntu
update-initramfs -u -k all
 
# RHEL/Fedora
dracut -f --regenerate-all

重启系统,输入密码短语,并通过 cryptsetup status cryptdatalsblk -f。此时应显示 crypto_LUKS 作为加密分区的 FSTYPE。

密钥管理与远程解锁

LUKS2 支持 32 个密钥槽。从一开始就至少使用其中三个:管理员密码短语、离线存储的恢复密钥(打印后上锁保管,或存放在保险箱中的加密 U 盘上),以及用于自动解锁二级数据卷的密钥文件。 请仅使用 95 个可打印的 ASCII 字符,因为非 ASCII 字符会在启动提示符下引发键盘布局问题,且调试过程令人抓狂。每当有权限人员离开团队时,请立即轮换管理员密码短语。

使用 cryptsetup luksDump /dev/sdX,使用 cryptsetup luksAddKey,使用 cryptsetup luksKillSlot。使用严格的权限保护所有密钥文件:

chmod 0400 /etc/luks/keyfile.bin

对于远程数据中心中的无显示器服务器,密码提示符是一个问题。有三种处理方法:

方法最适合取舍
在 initramfs 中使用 Dropbear通过 SSH 手动解锁重启时仍需人工干预
Clevis + Tang (NBDE)在受信任网络中自动解锁服务器必须连接到 Tang 服务器才能启动
通过 systemd-cryptenroll 调用 TPM2受硬件限制的自动化固件更新可能更改 PCR 值并导致您无法登录

Dropbear 在 initramfs 中运行一个微型 SSH 服务器。 您可在启动后通过 SSH 登录并手动输入密码短语。Clevis 配合 Tang 使用基于网络的磁盘加密:只要服务器能够连接到可信网络上的 Tang 服务器,它就能自动解锁。Tang 不存储您的密钥,而是提供 McCallum-Relyea 交换中的其中一半。使用多个 Tang 服务器并配合 sss PIN 码,即使其中一台离线,解锁功能依然有效。通过 systemd-cryptenroll 将密钥绑定至 PCR 7(安全启动状态),因此只有在固件和引导加载程序未被篡改的情况下,服务器才会自动解锁。使用 TPM 时请务必保留密码密钥槽作为备用方案,因为固件更新会改变 PCR 值。

加强安全防护并避免被锁定

请使用至少 20 个字符的密码短语。启用基于 --integrity at luksFormat ,若您的威胁模型不仅涉及机密性,还包含数据篡改风险。此功能会产生写入放大开销,因此请先进行性能测试。

请勿在不同机器间克隆 LUKS 容器。卷密钥会随容器一起复制,因此在一台主机上更改密码短语并不能保护另一台主机。请分别对每块磁盘进行重新格式化。

为了安全地退役设备, cryptsetup erase /dev/sdX 能在几毫秒内擦除所有密钥槽,使得在不进行物理破坏的情况下无法恢复磁盘数据。仅此一点,就足以成为默认对所有数据进行加密的有力理由。

常见故障模式:

症状可能原因解决方法
启动时在密码提示符处卡住键盘布局不匹配切换布局或使用恢复密钥
“设备不是有效的 LUKS 设备”设备路径错误请检查 lsblk 是分区还是整个磁盘
启动时键盘无响应Initramfs 挂钩顺序位置 keyboardencrypt in mkinitcpio.conf
GRUB 跳过了密码提示GRUB_ENABLE_CRYPTODISK 未设置设置 GRUB_ENABLE_CRYPTODISK=y/etc/default/grub,重新安装 GRUB
“无法找到根设备”缺失 lvm2encrypt 挂钩添加钩子并运行 mkinitcpio -P

最严重的故障模式是头部损坏。如果 LUKS 头部丢失或损坏,数据将丢失。除非从头部备份中恢复,否则无法恢复。请将副本存储在独立的介质上,最好是两个不同位置,切勿存储在加密磁盘本身中。对于非关键的辅助卷,请添加 nofail/etc/crypttab ,以免挂载失败导致启动卡死。

FDC 专用服务器出厂即配备支持 AES-NI 及全盘加密的硬件。当您准备部署时,请配置专用服务器

background image
您的服务器是否阻碍了您的发展?

厌倦了缓慢的部署或带宽限制?FDC Servers 提供即时的专用电源、全球覆盖和灵活的计划,适用于任何规模。准备升级?

立即开启性能

博客

本周特色

更多文章
Linux 流量控制 (tc):实用指南

Linux 流量控制 (tc):实用指南

使用 tc 在 Linux 上控制带宽、确定流量优先级以及塑造入口和出口。为实际服务器配置 HTB、IFB、DSCP 和 fq_codel。

12 分钟阅读 - 2026年6月5日

为什么必须拥有功能强大且不计量的 VPS

7 分钟阅读 - 2025年5月9日

更多文章