Sao lưu và khôi phục LUKS header trên Linux

Chia sẻ

Trong bài này, tôi sẽ hướng dẫn cách sao lưu và khôi phục LUKS header cho trường hợp khẩn cấp. Việc sao lưu này rất hữu ích trong trường hợp các thiết lập bị sai, headers bị hỏng hoặc bạn quên passphrase hoặc mật khẩu

Tại sao cần phải sao lưu

LUKS là một phương pháp để bảo vệ dưx liệu và ổ đĩa trong Linux, đặc biệt là đối với các thiết bị di động như máy tính xách tay. Nhưng LUKS cũng đặt ra nhiều yêu cầu khác. Chẳng hạn

  1. Việc các thiết đặt của LUKS bị sai ở cả 2 file /etc/fstab hoặc /etc/crypttab sẽ khiến bạn không thể khởi động được hệ thống. Do những files trên cung cấp gợi ý để giải mã trong khi boot. File /etc/crypttab chứa các thông tin về các file được mã hoá và chỉ có thể đọc bởi chính LUKS. Vì vậy người quản trị viên hệ thống cần tạo và bảo quản những file này cẩn thận
  2. Kiểm tra rằng các file /etc/fstab và /etc/crypttab được thiết đặt đúng bằng cách sử dụng câu lệnh cat /etc/fstab /etc/crypttab
  3. Việc bạn quên mật khẩu sẽ dẫn đến việc giải mã của LUKS khi khởi động thất bại. Hiện tại không có cách nào có thể khôi phục lại LUKS passphrase. Đôi khi người quản trị hệ thống đổi mật khẩu LUKS sang một giá trị ngẫu nhiên và họ không thể ghi nhớ nổi. Lưu ý rằng LUKS đang hỗ trợ 8 passphrase hoặc key slots để mã hoá ổ đĩa. Linux sysadmin có thể sử dụng những keys này để tạo hoặc reset lại mật khẩu bị quên. Tuy nhiên nếu bạn có một bản sao lưu của LUKS header, bạn có thể khôi phục lại header từ bạn backup và sử dụng mật khẩu/passphrase trước đó của bạn

Xử lý các ổ đĩa và phân vùng được mã hoá bị LUKS

Let see how to create LUKS header backup and restore it in case the need arises later. To list encrypted disks or volumes, enter:
Chúng ta sẽ cùng tìm hiểu cách tạo bản sao lưu của LUKS header và khôi phục chúng sau này. Để hiện danh sách và phân vùng được mã hoá bạn sử dụng câu lệnh sau

sudo dmsetup ls --target crypt
[sudo] password for vivek:
md1_crypt	(253, 0)

Chạy câu lệnh lsblk

lsblk
lsblk /dev/md1


Bạn có thể thấy /dev/md1 là thiế bị Linux software RAID1 và được mã hoá thành md1_crypt. Sâu hơn, LVM thường tạo ra phân vùng root và phân vùng swap. Hay nói theo một cách khác, phân vùng root và swap của bạn đã được mã hoá và bảo vệ bởi RAID1. Tiếp theo hãy kiểm tra các  file /etc/fstab và /etc/crypttab để đảm bảo chúng được mapped một cách chính xác

cat /etc/fstab
cat /etc/etc/crypttab

Các thiết đặt của bạn sẽ đơn giản hơn nếu không có RAID hay LVM

Để phục hồi lại data từ những phân vùng bị mã hoá

Chuẩn bị bản sao lưu của

  • File etc/fstab
  • File /etc/crypttab
  • LUKS header

Bước 1: Duping LUKS Header

Chạy các câu lệnh sau

sudo cryptsetup luksDump /dev/DEVICE
sudo cryptsetup luksDump /dev/sdb2
sudo cryptsetup luksDump /dev/md1

Bước 2: Sao lưu lại LUKS Header

sudo cryptsetup luksHeaderBackup /dev/DEVICE \ --header-backup-file /path/to/backupfile
sudo cryptsetup luksHeaderBackup /dev/sdb2 \ --header-backup-file /nas/vivek/laptop.dell.m6700.luks.bin
sudo cryptsetup luksHeaderBackup /dev/md1 \ --header-backup-file /root/laptop.thinkpad.luks.bin

Kiểm tra lại các thông tin của bản backup

sudo file /root/laptop.thinkpad.luks.bin
sudo stat /root/laptop.thinkpad.luks.bin
sudo cryptsetup luksDump /root/laptop.thinkpad.luks.bin


Lưu ý – Bạn hãy đảm bảo lưu file laptop.thinkpad.luks.bin một cách an toàn và offline. Tôi dùng NAS Server và USB. File này bạn không được lưu trữ bên trong thiết bị của bạn, nếu không bạn không thể khôi phục lại chúng sau này

Bước 3: Khôi phục lại LUKS header

# cryptsetup luksHeaderRestore /dev/DEVICE --header-backup-file /path/to/backup_header_file
## Assuming that you mounted /nas/ using NFS ##
# cryptsetup luksHeaderRestore /dev/md1 --header-backup-file /nas/vivek/laptop.thinkpad.luks.bin

WARNING!
========
Device /dev/md1 already contains LUKS2 header. Replacing header will destroy existing keyslots.
Are you sure? (Type uppercase yes): YES

Bước 4: Kiểm tra lại

Chạy lại câu lệnh dưới để mount ổ đĩa đang bị mã hoá ra, bạn sẽ cần sử dụng mật khẩu cũ

cryptsetup luksOpen /dev/DEVICE name
cryptsetup luksOpen /dev/md1 test
mkdir /test
mount /dev/mapper/test_root /test
df -H
mount

Cuôi cùng bạn khởi động lại hệ thống

Chia sẻ