詳解centos7基於luks對磁碟進行加密

2020-11-26 15:02:20
下面由欄目給大家介紹centos7基於luks對磁碟進行加密的方法,希望對需要的朋友有所幫助!

centos7基於luks對磁碟進行加密

LUKS(Linux Unified Key Setup)為Linux硬碟加密提供了一種標準,它不僅能通用於不同的Linux發行版本,還支援多使用者/口令。因為它的加密金鑰獨立於口令,所以如果口令失密,我們可以迅速改變口令而無需重新加密真個硬碟。通過提供一個標準的磁碟上的格式,它不僅方便之間分佈的相容性,而且還提供了多個使用者密碼的安全管理。必須首先對加密的捲進行解密,才能掛載其中的檔案系統。

工具:cryptsetup(預設已經安裝)

[root@node1 ~]# cryptsetup --help
cryptsetup 1.7.4
用法: cryptsetup [選項…] <動作> <動作特定引數>
 --version 列印軟體包版本
 -v, --verbose 顯示更詳細的錯誤資訊
 --debug 顯示偵錯資訊
 -c, --cipher=STRING 用於加密磁碟的密文(參見 /proc/crypto)
 -h, --hash=STRING 用於從密碼建立加密金鑰的雜湊值
 -y, --verify-passphrase 兩次詢問密碼以進行驗證
 -d, --key-file=STRING 從檔案讀取金鑰。
 --master-key-file=STRING 從檔案讀取卷(主)金鑰。
 --dump-master-key 轉儲卷(主)金鑰而不是鍵槽資訊。
 -s, --key-size=位 加密金鑰大小
 -l, --keyfile-size=位元組 限制從金鑰檔案讀取
 --keyfile-offset=位元組 要從金鑰檔案跳過的位元組數
 --new-keyfile-size=位元組 限制從新增金鑰檔案的讀取
 --new-keyfile-offset=位元組 要從新增金鑰檔案跳過的位元組數
 -S, --key-slot=INT 新金鑰的槽號(預設為第一個可用的)
 -b, --size=磁區 裝置大小
 -o, --offset=磁區 後端裝置的起始偏移量
 -p, --skip=磁區 從開頭要跳過的加密資料磁區數量
 -r, --readonly 建立唯讀對映
 -i, --iter-time=毫秒 LUKS 預設 PBKDF2 迭代時間(毫秒)
 -q, --batch-mode 不要請求確認
 -t, --timeout=秒 互動式密碼提示符超時長度(秒)
 -T, --tries=INT 輸入密碼的最大重試頻率
 --align-payload=磁區 於 <n> 個磁區邊界處對其載荷資料 - 供 luks 格式用
 --header-backup-file=STRING 帶有 LUKS 資料頭和金鑰槽備份的檔案。
 --use-random 使用 /dev/random 生成卷金鑰。
 --use-urandom 使用 /dev/urandom 生成卷金鑰。
 --shared 與另一個不重合的加密段共用裝置。
 --uuid=STRING 裝置使用的 UUID 已佔用。
 --allow-discards 允許裝置的 discard(或稱 TRIM)請求。
 --header=STRING 帶有分離 LUKS 資料頭的裝置或檔案。
 --test-passphrase 不要啟用裝置,僅檢查密碼。
 --tcrypt-hidden 使用隱藏資料頭(隱藏 TCRYPT 裝置)
 --tcrypt-system 裝置為系統 TCRYPT 驅動器(帶有引導器)。
 --tcrypt-backup 使用備份(次級)TCRYPT 檔頭。
 --veracrypt 同時掃描 VeraCrypt 相容的裝置。
 -M, --type=STRING 裝置後設資料型別:luks, 純粹 (plain), loopaes, tcrypt.
 --force-password 禁用密碼品質檢查 (如果已啟用)。
 --perf-same_cpu_crypt 使用 dm-crypt same_cpu_crypt 效能相容性選項。
 --perf-submit_from_crypt_cpus 使用 dm-crypt submit_from_crypt_cpus 效能相容性選項。

幫助選項:
 -?, --help 顯示此幫助
 --usage 顯示簡短用法

<動作> 為其中之一:
 open <裝置> [--type <型別>] [<名稱>] - 以對映 <名稱> 開啟裝置
 close <名稱> - 關閉裝置(移除對映)
 resize <名稱> - 改變活動裝置大小。
 status <名稱> - 顯示裝置狀態
 benchmark [--cipher <cipher>] - 測試密文
 repair <裝置> - 嘗試修復磁碟上的後設資料
 erase <裝置> - 清空所有金鑰槽(移除加密金鑰)
 luksFormat <裝置> [<新金鑰檔案>] - 格式化一個 LUKS 裝置
 luksAddKey <裝置> [<新金鑰檔案>] - 向 LUKS 裝置新增金鑰
 luksRemoveKey <裝置> [<金鑰檔案>] - 移除 LUKS 裝置中指定的金鑰或金鑰檔案
 luksChangeKey <裝置> [<金鑰檔案>] - 更改 LUKS 裝置中指定的金鑰或金鑰檔案
 luksKillSlot <裝置> <金鑰槽> - 從 LUKS 裝置清理標號為 <key slot> 的金鑰
 luksUUID <裝置> - 輸出 LUKS 裝置的 UUID(唯一識別符號)
 isLuks <裝置> - 從 <device> 探測 LUKS 分割區檔頭
 luksDump <裝置> - 調出 LUKS 分割區資訊
 tcryptDump <裝置> - 調出 TCRYPT 裝置資訊
 luksSuspend <裝置> - 掛起 LUKS 裝置並清除金鑰(凍結所有 IO 操作)。
 luksResume <裝置> - 恢復已暫停的 LUKS 裝置。
 luksHeaderBackup <裝置> - 備份 LUKS 裝置檔頭和金鑰槽
 luksHeaderRestore <裝置> - 恢復 LUKS 裝置檔頭和金鑰槽

你亦可使用老的 <動作> 語法別名:
 open: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen
 close: remove (plainClose), luksClose, loopaesClose, tcryptClose

<name> 為要在 /dev/mapper 建立的裝置
<device> 為加密裝置
<key slot> 為需要更改的 LUKS 金鑰槽
<key file> 提供給 luksAddKey 動作的金鑰檔案

預設整合的金鑰和密碼引數:
 金鑰檔案的最大大小:8192kB, 互動式密碼的最大長度:512 (字元)
LUKS 的預設 PBKDF2 迭代時間:2000 (毫秒)

預設整合的裝置密文引數:
 loop-AES:aes, 256 位金鑰
 plain:aes-cbc-essiv:sha256, 金鑰:256 位, 密碼雜湊:ripemd160
 LUKS1:aes-xts-plain64, 金鑰:256 bits, LUKS 資料頭雜湊:sha256, RNG:/dev/urandom

1. 環境


  • OS: centos7
  • Kernel: 3.10.0-693.el7.x86_64
  • tools: cryptsetup.x86_64 0:1.7.4-4.el7

2. 建立加密分割區


首先,我們新增一塊硬碟/dev/sdb作為測試用,如下:

[root@node1 ~]# fdisk -l
磁碟 /dev/sdb:8589 MB, 8589934592 位元組,16777216 個磁區
Units = 磁區 of 1 * 512 = 512 bytes
磁區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組

磁碟 /dev/sda:8589 MB, 8589934592 位元組,16777216 個磁區
Units = 磁區 of 1 * 512 = 512 bytes
磁區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x000bfe7f

裝置 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 16777215 7339008 8e Linux LVM

磁碟 /dev/mapper/centos-root:6652 MB, 6652166144 位元組,12992512 個磁區
Units = 磁區 of 1 * 512 = 512 bytes
磁區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組

磁碟 /dev/mapper/centos-swap:859 MB, 859832320 位元組,1679360 個磁區
Units = 磁區 of 1 * 512 = 512 bytes
磁區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組

下來我們格式化加密分割區

[root@node1 ~]# cryptsetup luksFormat /dev/sdb

WARNING!
========
這將覆蓋 /dev/sdb 上的資料,該動作不可取消。
Are you sure? (Type uppercase yes): YES  # 注意這裡必須是大寫的YES
輸入密碼:
確認密碼:

5. 利用 key file 加密分割區


除了密碼之外,還可以選擇使用 key file 解密你的硬碟,也就是相當於一個金鑰,當然可以也可以只使用 key file 或者同時使用密碼與 key file

5.1 生成隨機 key file


[root@node1 ~]# dd if=/dev/urandom of=/root/enc.key bs=1 count=4096
記錄了4096+0 的讀入
記錄了4096+0 的寫出
4096位元組(4.1 kB)已複製,0.00967434 秒,423 kB/秒
[root@node1 ~]# ls
anaconda-ks.cfg enc.key kubernetes

5.2 新增 key file 作為密碼之一


[root@node1 ~]# cryptsetup luksAddKey /dev/sdb /root/enc.key 
輸入任意已存在的密碼:

6. 移除解密密碼


移除普通密碼

[root@node1 ~]# cryptsetup luksRemoveKey /dev/sdb
輸入要移除的密碼:

移除 key file 密碼

[root@node1 ~]# cryptsetup luksRemoveKey -d /root/enc.key /dev/sdb
WARNING!
========
這是最後一個金鑰槽。裝置在清空此金鑰後將不可用。
Are you sure? (Type uppercase yes): YES

注意:千萬不要將所有密碼移除,至少需要留有一個密碼存取裝置,移除操作不可復原

7. 分割區對映與掛載


7.1 分割區對映


[root@node1 ~]# cryptsetup luksOpen /dev/sdb data2
輸入 /dev/sdb 的密碼:

7.2 key file分割區對映


也可以通過key file做對映

[root@node1 ~]# cryptsetup luksOpen -d /root/enc.key /dev/sdb data2

7.3 建立檔案系統


在掛載使用之前,我們仍然需要對裝置建立檔案系統才可以使用,可以選擇任何你喜歡的檔案系統,例如 btrfs,ext4,vfat,ntfs等

[root@node1 ~]# mkfs.ext4 /dev/mapper/data2 
mke2fs 1.42.9 (28-Dec-2013)
檔案系統標籤=
OS type: Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2096640 blocks
104832 blocks (5.00%) reserved for the super user
第一個資料塊=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: 完成 
正在寫入inode表: 完成 
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

7.4 掛載


現在可以像正常分割區一樣掛載我們的加密分割區裝置了

[root@node1 ~]# mkdir /data2
[root@node1 ~]# mount /dev/mapper/data2 /data2
[root@node1 ~]# df -h
檔案系統 容量 已用 可用 已用% 掛載點
/dev/mapper/centos-root 6.2G 1.8G 4.5G 28% /
devtmpfs 4.4G 0 4.4G 0% /dev
tmpfs 4.4G 0 4.4G 0% /dev/shm
tmpfs 4.4G 8.5M 4.4G 1% /run
tmpfs 4.4G 0 4.4G 0% /sys/fs/cgroup
/dev/sda1 1014M 143M 872M 15% /boot
tmpfs 883M 0 883M 0% /run/user/0
/dev/mapper/data2 7.8G 36M 7.3G 1% /data2

7.5 解除安裝掛載點並關閉加密分割區


[root@node1 /]# umount /data2
[root@node1 /]# cryptsetup luksClose data2

8. 總結


在完成整個步驟以後,您現在需要做的就是妥善保管您的加密儲存,可採用同樣的方式加密多個裝置進行備份,因為誰也不能保證這移動裝置會不會在什麼時候丟掉。

以上就是詳解centos7基於luks對磁碟進行加密的詳細內容,更多請關注TW511.COM其它相關文章!