LUKS 全磁碟加密:Linux 伺服器設定指南
15 分鐘閱讀 - 2026年6月5日

適用於 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 核心模組是否可用。上述兩者皆為 Ubuntu、Debian、RHEL 及 Arch 的預設安裝項目。
磁碟配置
有兩個分區保持未加密狀態: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 GB | FAT32 | 否 |
/boot | 1 至 2 GB | ext4 / 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 cryptdata 及 lsblk -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 個字元的密碼短語。啟用 --integrity 在 luksFormat ,若您的威脅模型包含資料篡改(而非僅限機密性)。此機制會產生寫入放大成本,因此請先進行效能測試。
請勿在不同機器間複製 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 |
| 「無法找到根裝置」 | 缺少 lvm2 或 encrypt 掛鉤 | 新增鉤子並執行 mkinitcpio -P |
最關鍵的失敗模式是標頭損毀。若 LUKS 標頭遺失或損毀,資料便會消失。除非從標頭備份還原,否則無法復原。請將副本儲存於獨立的儲存媒體上,理想情況下應存放於兩個地點,且絕不可存放在加密磁碟本身。對於非關鍵的次要磁區,請加入 nofail 至 /etc/crypttab ,以防掛載失敗導致開機卡死。
FDC 專用伺服器出廠即配備支援 AES-NI 及全磁碟加密的硬體。當您準備部署時,請配置專用伺服器。

厌倦了缓慢的部署或带宽限制?FDC Servers 提供即时的专用电源、全球覆盖和灵活的计划,适用于任何规模。准备升级?
立即开启性能
Linux 流量控制 (tc):實用指南
使用 tc 在 Linux 上控制頻寬、優先處理流量,以及塑造入口和出口。真實伺服器的 HTB、IFB、DSCP 和 fq_codel 配置。
12 分鐘閱讀 - 2026年6月5日
為什麼擁有一個強大且不計費的 VPS 是很重要的?
7 分鐘閱讀 - 2025年5月9日