centos7基於luks對磁盤進行加密
- A+
所屬分類:
linux
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. 總結
在完成整個步驟以后,您現在需要做的就是妥善保管您的加密存儲,可采用同樣的方式加密多個設備進行備份,因為誰也不能保證這移動設備會不會在什么時候丟掉。