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 佈局、金鑰管理、遠端解鎖,以及可能導致使用者無法存取自身資料的各種故障模式。

本文的參考實作是將 LVM 置於加密容器內的 LUKS2,部署於 CPU 具備 AES-NI 功能的 Linux 伺服器上。此組合能處理所有現代工作負載,效能優異,並符合 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 交換區等於 RAM交換空間是(位於 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 個金鑰槽。請從一開始就至少使用其中三個:一個管理員密碼短語、一個離線儲存的恢復金鑰(列印後上鎖存放,或存放在保險箱內的加密 USB 隨身碟中),以及一個用於自動解鎖次要資料卷的金鑰檔案。 請嚴格使用 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 進行多台 Tang 伺服器配置,即使其中一台離線,解鎖功能仍可正常運作。透過 systemd-cryptenroll 將金鑰綁定至 PCR 7(安全開機狀態),因此只有在韌體和開機載入程式未遭篡改的情況下,伺服器才會自行解鎖。使用 TPM 時,請務必保留密碼槽作為備用方案,因為韌體更新會改變 PCR 值。

強化安全性與避免被鎖定

請使用至少 20 個字元的密碼短語。啟用 --integrityluksFormat ,若您的威脅模型包含資料篡改(而非僅限機密性)。此機制會產生寫入放大成本,因此請先進行效能測試。

請勿在不同機器間複製 LUKS 容器。由於卷宗金鑰會隨之複製,因此在其中一台主機上變更密碼短語並不會保護另一台主機。請分別重新格式化每顆磁碟。

為確保安全除役, cryptsetup erase /dev/sdX 能在數毫秒內清除所有金鑰槽,使磁碟在不經物理破壞的情況下無法復原。僅此一點,便是預設加密所有資料的有力論據。

常見故障模式:

症狀可能原因解決方法
開機時在密碼提示處卡住鍵盤佈局不符切換鍵盤佈局或使用復原金鑰
「裝置不是有效的 LUKS 裝置」裝置路徑錯誤請檢查 lsblk 確認是選取分區還是整個磁碟
開機時鍵盤無反應Initramfs 掛鉤順序位置 keyboard 置於 encrypt 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日

更多文章