Mã hóa toàn bộ đĩa cứng LUKS: Hướng dẫn thiết lập máy chủ Linux
15 phút đọc - 5 tháng 6, 2026

Mã hóa toàn bộ đĩa LUKS cho máy chủ Linux, bao gồm thiết lập LUKS2, bố cục LVM, quản lý khóa, mở khóa từ xa bằng Tang và TPM, và tăng cường bảo mật.
Hướng dẫn máy chủ mã hóa toàn bộ đĩa LUKS
LUKS (Linux Unified Key Setup) mã hóa toàn bộ thiết bị khối Linux để nội dung không thể đọc được nếu không có khóa chính. Một ổ đĩa bị đánh cắp, một khung máy đã ngừng sử dụng, một ổ đĩa sao lưu bị quên: không có trường hợp nào trong số đó làm lộ dữ liệu của bạn một khi LUKS đã được cài đặt đúng cách. Bài viết này hướng dẫn cách triển khai mã hóa toàn bộ đĩa LUKS trên máy chủ, bao gồm bố cục LVM, quản lý khóa, mở khóa từ xa và các tình huống lỗi khiến người dùng không thể truy cập vào dữ liệu của chính mình.
Thực hiện tham chiếu ở đây là LUKS2 với LVM bên trong vùng chứa được mã hóa, trên máy chủ Linux có AES-NI trong CPU. Sự kết hợp này xử lý mọi khối lượng công việc hiện đại, hoạt động hiệu quả và đáp ứng các yêu cầu về dữ liệu tại chỗ trong HIPAA, PCI-DSS, GDPR và SOC 2.
Tại sao lại là LUKS2 và điều gì cần kiểm tra trước tiên
LUKS mã hóa ở lớp thiết bị khối bằng cách sử dụng dm-crypt, với khóa chính được lưu trữ trong các khe khóa bên trong tiêu đề LUKS. Sự tách biệt đó rất quan trọng: bạn có thể thay đổi mật khẩu hoặc thêm khóa mới mà không cần mã hóa lại đĩa.
LUKS2 là mặc định hiện tại. Nó hỗ trợ tối đa 32 keyslots, siêu dữ liệu định dạng JSON, mã hóa lại trực tuyến và mã hóa được xác thực qua cờ --integrity cờ. LUKS1 hỗ trợ 8 khe khóa và hoạt động tốt trên các hệ thống cũ, nhưng các triển khai mới nên bắt đầu với LUKS2.
Chi phí hiệu suất với AES-NI thường dưới 5% trên phần cứng hiện đại. Kiểm tra trước khi bắt đầu:
grep -o aes /proc/cpuinfo | head -1
cryptsetup benchmarkNếu grep không trả về kết quả nào, CPU của bạn thiếu AES-NI và quá trình mã hóa sẽ bị giới hạn bởi CPU khi có I/O nặng. cryptsetup benchmark hiển thị thông lượng cho từng thuật toán mã hóa để bạn có thể chọn thuật toán nhanh nhất mà phần cứng của bạn hỗ trợ. Đồng thời, hãy xác nhận rằng cryptsetup đã được cài đặt và dm-crypt mô-đun kernel có sẵn hay không. Cả hai đều được cài đặt sẵn trên Ubuntu, Debian, RHEL và Arch.
Cấu trúc đĩa
Hai phân vùng không được mã hóa: phân vùng hệ thống EFI (512 MB FAT32) và /boot (1 đến 2 GB, ext4 hoặc xfs). GRUB cần đọc cả hai trước khi có thể yêu cầu mật khẩu. Mọi thứ khác đều nằm trong vùng chứa LUKS.
Cấu trúc được khuyến nghị là LVM bên trong LUKS: một vùng chứa LUKS chứa một nhóm khối lượng LVM, với các khối lượng logic cho root, swap và bất kỳ phân vùng dữ liệu nào. Điều này giúp giữ cho siêu dữ liệu LVM được mã hóa và cho phép bạn thay đổi kích thước hoặc chụp nhanh khối lượng mà không cần chạm vào lớp LUKS. LUKS-on-LVM cũng hoạt động, nhưng nó sẽ hiển thị cấu trúc nhóm khối lượng.
| Phân vùng | Kích thước | Hệ thống tệp | Được mã hóa |
|---|---|---|---|
| Hệ thống EFI | 512 MB đến 1 GB | FAT32 | Không |
/boot | 1 đến 2 GB | ext4 / xfs | Không |
| Thùng chứa LUKS | Dung lượng còn lại | LUKS2 | Có |
| LVM gốc | 20 đến 100 GB+ | ext4 / xfs | Có (bên trong LUKS) |
| LVM swap | Bằng với RAM | swap | Có (trong LUKS) |
ext4 là tùy chọn mặc định an toàn cho phân vùng gốc. Hệ thống tệp xfs xử lý tệp lớn và ghi song song tốt hơn, điều này quan trọng đối với các máy chủ truyền thông, học máy (ML) và cơ sở dữ liệu. Đối với SSD và NVMe, hãy thêm tùy chọn discard tùy chọn /etc/crypttab để bật TRIM. TRIM tiết lộ các sector đang được sử dụng, đây là một lỗ hổng rò rỉ thông tin nhỏ. Đối với hầu hết các tác vụ, lợi ích cân bằng hao mòn là đáng giá. Nếu mô hình đe dọa của bạn bao gồm phân tích pháp y thiết bị, hãy tắt tính năng này.
Cài đặt LUKS với LVM
Xác định đĩa đích bằng lsblk và xóa mọi siêu dữ liệu hiện có:
wipefs -a /dev/sdXTùy chọn ghi đè bằng dữ liệu ngẫu nhiên để các khối được mã hóa không thể phân biệt với không gian trống:
dd if=/dev/urandom of=/dev/sdX bs=1M status=progressKhởi tạo vùng chứa LUKS2. Sử dụng --sector-size 4096 cho NVMe và SSD hiện đại có các sector vật lý 4K:
cryptsetup luksFormat --type luks2 --sector-size 4096 /dev/sdX
cryptsetup luksOpen /dev/sdX cryptdataSao lưu tiêu đề ngay lập tức, trước khi bạn đưa bất kỳ dữ liệu nào vào đĩa:
cryptsetup luksHeaderBackup /dev/sdX --header-backup-file luks-header-backup.imgTạo LVM trên container đã mở khóa, sau đó định dạng các khối logic:
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_swapThêm một mục vào /etc/crypttab bằng cách sử dụng UUID, không /dev/sdX, vì nó có thể thay đổi giữa các lần khởi động lại. Lấy nó bằng blkid /dev/sdX:
cryptdata UUID=<your-uuid> none luks,discardSau đó gắn vào qua /etc/fstab:
/dev/vg_secure/lv_root / xfs defaults,noatime 0 1Tạo lại initramfs để các hook mã hóa được tải khi khởi động:
# Debian/Ubuntu
update-initramfs -u -k all
# RHEL/Fedora
dracut -f --regenerate-allKhởi động lại, nhập mật khẩu và xác nhận cài đặt bằng cryptsetup status cryptdata và lsblk -f. Lệnh sau sẽ hiển thị crypto_LUKS là FSTYPE trên phân vùng được mã hóa.
Quản lý khóa và mở khóa từ xa
LUKS2 hỗ trợ 32 khe khóa. Sử dụng ít nhất ba khe từ đầu: mật khẩu quản trị, khóa khôi phục được lưu trữ ngoại tuyến (in ra và cất giữ an toàn, hoặc trên USB được mã hóa trong két sắt) và tệp khóa để tự động mở khóa các khối dữ liệu phụ. Hãy sử dụng 95 ký tự ASCII có thể in được, vì các ký tự không phải ASCII sẽ gây ra các vấn đề về bố cục bàn phím tại dấu nhắc khởi động, khiến việc gỡ lỗi trở nên rất khó khăn. Hãy thay đổi mật khẩu quản trị mỗi khi có người có quyền truy cập rời khỏi nhóm.
Xem các khe khóa đang hoạt động bằng cryptsetup luksDump /dev/sdX, thêm khóa bằng cryptsetup luksAddKey, và thu hồi một khóa bằng cryptsetup luksKillSlot. Bảo vệ mọi tệp khóa bằng các quyền truy cập nghiêm ngặt:
chmod 0400 /etc/luks/keyfile.binĐối với các máy chủ không có màn hình tại các trung tâm dữ liệu từ xa, lời nhắc mật khẩu là một vấn đề. Có ba cách để xử lý vấn đề này:
| Phương pháp | Phù hợp nhất với | Ưu nhược điểm |
|---|---|---|
| Dropbear trong initramfs | Mở khóa thủ công qua SSH | Vẫn cần người can thiệp khi khởi động lại |
| Clevis + Tang (NBDE) | Mở khóa tự động trên mạng đáng tin cậy | Máy chủ phải kết nối được với máy chủ Tang để khởi động |
| TPM2 thông qua systemd-cryptenroll | Tự động hóa dựa trên phần cứng | Các bản cập nhật firmware có thể thay đổi giá trị PCR và khiến bạn không thể truy cập |
Dropbear chạy một máy chủ SSH nhỏ trong initramfs. Bạn đăng nhập SSH sau khi khởi động và nhập mật khẩu bằng tay. Clevis với Tang sử dụng mã hóa đĩa dựa trên mạng: máy chủ sẽ tự mở khóa miễn là nó có thể kết nối với máy chủ Tang trên mạng đáng tin cậy. Tang không lưu trữ khóa của bạn, mà chỉ cung cấp một nửa của giao thức trao đổi McCallum-Relyea. Sử dụng nhiều máy chủ Tang với sss mã PIN để việc mở khóa vẫn hoạt động ngay cả khi một máy chủ bị ngắt kết nối. Kết nối TPM 2.0 thông qua systemd-cryptenroll sẽ liên kết khóa với PCR 7 (trạng thái Khởi động An toàn), do đó máy chủ chỉ tự mở khóa nếu phần mềm cơ sở và trình tải khởi động chưa bị can thiệp. Luôn giữ một khe khóa mật khẩu làm phương án dự phòng khi sử dụng TPM, vì các bản cập nhật phần mềm cơ sở sẽ thay đổi các giá trị PCR.
Tăng cường bảo mật và tránh bị khóa
Sử dụng mật khẩu dài ít nhất 20 ký tự. Kích hoạt mã hóa được xác thực với --integrity ngay luksFormat nếu mô hình đe dọa của bạn bao gồm việc giả mạo dữ liệu chứ không chỉ là bảo mật. Điều này gây ra chi phí khuếch đại ghi, vì vậy hãy kiểm tra hiệu suất trước.
Không sao chép một container LUKS sang các máy khác. Khóa ổ đĩa sẽ được sao chép theo, do đó việc thay đổi mật khẩu trên một máy chủ sẽ không bảo vệ được máy chủ khác. Định dạng lại từng đĩa riêng lẻ.
Để ngừng sử dụng một cách an toàn, cryptsetup erase /dev/sdX xóa tất cả các khe khóa trong vài mili giây, khiến đĩa không thể phục hồi được nếu không phá hủy vật lý. Chỉ riêng điều đó đã là một lý do thuyết phục để mã hóa mọi thứ theo mặc định.
Các chế độ lỗi phổ biến:
| Triệu chứng | Nguyên nhân có thể | Cách khắc phục |
|---|---|---|
| Quá trình khởi động bị treo tại màn hình nhập mật khẩu | Bố cục bàn phím không khớp | Chuyển sang bố cục khác hoặc sử dụng khóa khôi phục |
| "Thiết bị không phải là thiết bị LUKS hợp lệ" | Đường dẫn thiết bị sai | Kiểm tra lsblk xem là phân vùng hay toàn bộ đĩa |
| Bàn phím không phản hồi khi khởi động | Thứ tự hook Initramfs | Đặt keyboard trước encrypt vào mkinitcpio.conf |
| GRUB bỏ qua lời nhắc mật khẩu | GRUB_ENABLE_CRYPTODISK không được đặt | Đặt GRUB_ENABLE_CRYPTODISK=y trong /etc/default/grub, cài đặt lại GRUB |
| "Không tìm thấy thiết bị gốc" | Thiếu lvm2 hoặc encrypt hooks | Thêm hooks và chạy mkinitcpio -P |
Chế độ lỗi quan trọng nhất là hỏng tiêu đề. Nếu tiêu đề LUKS bị mất hoặc hỏng, dữ liệu sẽ biến mất. Không có cách khôi phục nào ngoài việc khôi phục từ bản sao lưu tiêu đề. Lưu một bản sao trên phương tiện riêng biệt, lý tưởng nhất là ở hai vị trí, và tuyệt đối không lưu trên chính đĩa được mã hóa. Đối với các phân vùng thứ cấp không quan trọng, thêm nofail vào /etc/crypttab để việc gắn kết thất bại không làm treo quá trình khởi động.
Các máy chủ chuyên dụng của FDC được trang bị phần cứng hỗ trợ AES-NI và mã hóa toàn bộ đĩa ngay khi xuất xưởng. Hãy cấu hình máy chủ chuyên dụng khi bạn sẵn sàng triển khai.

Bạn đã chán ngán với việc triển khai chậm chạp hoặc giới hạn băng thông? FDC Servers cung cấp nguồn điện chuyên dụng ngay lập tức, phạm vi toàn cầu và các gói linh hoạt được thiết kế cho mọi quy mô. Sẵn sàng nâng cấp chưa?
Mở khóa hiệu suất ngay bây giờ
Kiểm soát lưu lượng Linux (tc): Hướng dẫn thực hành
Kiểm soát băng thông, ưu tiên lưu lượng và định hình lưu lượng vào và ra trên Linux bằng tc. Cấu hình HTB, IFB, DSCP và fq_codel hoạt động cho các máy chủ thực tế.
12 phút đọc - 5 tháng 6, 2026
Tại sao việc sở hữu một VPS mạnh mẽ và không giới hạn băng thông lại quan trọng
7 phút đọc - 9 tháng 5, 2025

Bạn có thắc mắc hoặc cần giải pháp tùy chỉnh?
Các tùy chọn linh hoạt
Phạm vi toàn cầu
Triển khai ngay lập tức
Các tùy chọn linh hoạt
Phạm vi toàn cầu
Triển khai ngay lập tức