下面由centos基礎(chǔ)教程欄目給大家介紹centos7基于luks對磁盤進行加密的方法,希望對需要的朋友有所幫助!
centos7基于luks對磁盤進行加密
LUKS(Linux Unified Key Setup)為Linux硬盤加密提供了一種標(biāo)準(zhǔn),它不僅能通用于不同的Linux發(fā)行版本,還支持多用戶/口令。因為它的加密密鑰獨立于口令,所以如果口令失密,我們可以迅速改變口令而無需重新加密真?zhèn)€硬盤。通過提供一個標(biāo)準(zhǔn)的磁盤上的格式,它不僅方便之間分布的兼容性,而且還提供了多個用戶密碼的安全管理。必須首先對加密的卷進行解密,才能掛載其中的文件系統(tǒng)。
工具:cryptsetup(默認(rèn)已經(jīng)安裝)
[root@node1 ~]# cryptsetup --help cryptsetup 1.7.4 用法: cryptsetup [選項…] <動作> <動作特定參數(shù)> --version 打印軟件包版本 -v, --verbose 顯示更詳細(xì)的錯誤信息 --debug 顯示調(diào)試信息 -c, --cipher=STRING 用于加密磁盤的密文(參見 /proc/crypto) -h, --hash=STRING 用于從密碼創(chuàng)建加密密鑰的哈希值 -y, --verify-passphrase 兩次詢問密碼以進行驗證 -d, --key-file=STRING 從文件讀取密鑰。 --master-key-file=STRING 從文件讀取卷(主)密鑰。 --dump-master-key 轉(zhuǎn)儲卷(主)密鑰而不是鍵槽信息。 -s, --key-size=位 加密密鑰大小 -l, --keyfile-size=字節(jié) 限制從密鑰文件讀取 --keyfile-offset=字節(jié) 要從密鑰文件跳過的字節(jié)數(shù) --new-keyfile-size=字節(jié) 限制從新增密鑰文件的讀取 --new-keyfile-offset=字節(jié) 要從新增密鑰文件跳過的字節(jié)數(shù) -S, --key-slot=INT 新密鑰的槽號(默認(rèn)為第一個可用的) -b, --size=扇區(qū) 設(shè)備大小 -o, --offset=扇區(qū) 后端設(shè)備的起始偏移量 -p, --skip=扇區(qū) 從開頭要跳過的加密數(shù)據(jù)扇區(qū)數(shù)量 -r, --readonly 創(chuàng)建只讀映射 -i, --iter-time=毫秒 LUKS 默認(rèn) PBKDF2 迭代時間(毫秒) -q, --batch-mode 不要請求確認(rèn) -t, --timeout=秒 交互式密碼提示符超時長度(秒) -T, --tries=INT 輸入密碼的最大重試頻率 --align-payload=扇區(qū) 于 <n> 個扇區(qū)邊界處對其載荷數(shù)據(jù) - 供 luks 格式用 --header-backup-file=STRING 帶有 LUKS 數(shù)據(jù)頭和密鑰槽備份的文件。 --use-random 使用 /dev/random 生成卷密鑰。 --use-urandom 使用 /dev/urandom 生成卷密鑰。 --shared 與另一個不重合的加密段共享設(shè)備。 --uuid=STRING 設(shè)備使用的 UUID 已占用。 --allow-discards 允許設(shè)備的 discard(或稱 TRIM)請求。 --header=STRING 帶有分離 LUKS 數(shù)據(jù)頭的設(shè)備或文件。 --test-passphrase 不要激活設(shè)備,僅檢查密碼。 --tcrypt-hidden 使用隱藏數(shù)據(jù)頭(隱藏 TCRYPT 設(shè)備) --tcrypt-system 設(shè)備為系統(tǒng) TCRYPT 驅(qū)動器(帶有引導(dǎo)器)。 --tcrypt-backup 使用備份(次級)TCRYPT 標(biāo)頭。 --veracrypt 同時掃描 VeraCrypt 兼容的設(shè)備。 -M, --type=STRING 設(shè)備元數(shù)據(jù)類型:luks, 純粹 (plain), loopaes, tcrypt. --force-password 禁用密碼質(zhì)量檢查 (如果已啟用)。 --perf-same_cpu_crypt 使用 dm-crypt same_cpu_crypt 性能兼容性選項。 --perf-submit_from_crypt_cpus 使用 dm-crypt submit_from_crypt_cpus 性能兼容性選項。 幫助選項: -?, --help 顯示此幫助 --usage 顯示簡短用法 <動作> 為其中之一: open <設(shè)備> [--type <類型>] [<名稱>] - 以映射 <名稱> 打開設(shè)備 close <名稱> - 關(guān)閉設(shè)備(移除映射) resize <名稱> - 改變活動設(shè)備大小。 status <名稱> - 顯示設(shè)備狀態(tài) benchmark [--cipher <cipher>] - 測試密文 repair <設(shè)備> - 嘗試修復(fù)磁盤上的元數(shù)據(jù) erase <設(shè)備> - 清空所有密鑰槽(移除加密密鑰) luksFormat <設(shè)備> [<新密鑰文件>] - 格式化一個 LUKS 設(shè)備 luksAddKey <設(shè)備> [<新密鑰文件>] - 向 LUKS 設(shè)備添加密鑰 luksRemoveKey <設(shè)備> [<密鑰文件>] - 移除 LUKS 設(shè)備中指定的密鑰或密鑰文件 luksChangeKey <設(shè)備> [<密鑰文件>] - 更改 LUKS 設(shè)備中指定的密鑰或密鑰文件 luksKillSlot <設(shè)備> <密鑰槽> - 從 LUKS 設(shè)備清理標(biāo)號為 <key slot> 的密鑰 luksUUID <設(shè)備> - 輸出 LUKS 設(shè)備的 UUID(唯一標(biāo)識符) isLuks <設(shè)備> - 從 <device> 探測 LUKS 分區(qū)標(biāo)頭 luksDump <設(shè)備> - 調(diào)出 LUKS 分區(qū)信息 tcryptDump <設(shè)備> - 調(diào)出 TCRYPT 設(shè)備信息 luksSuspend <設(shè)備> - 掛起 LUKS 設(shè)備并清除密鑰(凍結(jié)所有 IO 操作)。 luksResume <設(shè)備> - 恢復(fù)已暫停的 LUKS 設(shè)備。 luksHeaderBackup <設(shè)備> - 備份 LUKS 設(shè)備標(biāo)頭和密鑰槽 luksHeaderRestore <設(shè)備> - 恢復(fù) LUKS 設(shè)備標(biāo)頭和密鑰槽 你亦可使用老的 <動作> 語法別名: open: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen close: remove (plainClose), luksClose, loopaesClose, tcryptClose <name> 為要在 /dev/mapper 創(chuàng)建的設(shè)備 <device> 為加密設(shè)備 <key slot> 為需要更改的 LUKS 密鑰槽 <key file> 提供給 luksAddKey 動作的密鑰文件 默認(rèn)集成的密鑰和密碼參數(shù): 密鑰文件的最大大小:8192kB, 交互式密碼的最大長度:512 (字符) LUKS 的默認(rèn) PBKDF2 迭代時間:2000 (毫秒) 默認(rèn)集成的設(shè)備密文參數(shù): loop-AES:aes, 256 位密鑰 plain:aes-cbc-essiv:sha256, 密鑰:256 位, 密碼哈希:ripemd160 LUKS1:aes-xts-plain64, 密鑰:256 bits, LUKS 數(shù)據(jù)頭哈希:sha256, RNG:/dev/urandom
1. 環(huán)境
- OS: centos7
- Kernel: 3.10.0-693.el7.x86_64
- tools: cryptsetup.x86_64 0:1.7.4-4.el7
2. 創(chuàng)建加密分區(qū)
首先,我們添加一塊硬盤/dev/sdb作為測試用,如下:
[root@node1 ~]# fdisk -l 磁盤 /dev/sdb:8589 MB, 8589934592 字節(jié),16777216 個扇區(qū) Units = 扇區(qū) of 1 * 512 = 512 bytes 扇區(qū)大小(邏輯/物理):512 字節(jié) / 512 字節(jié) I/O 大小(最小/最佳):512 字節(jié) / 512 字節(jié) 磁盤 /dev/sda:8589 MB, 8589934592 字節(jié),16777216 個扇區(qū) Units = 扇區(qū) of 1 * 512 = 512 bytes 扇區(qū)大小(邏輯/物理):512 字節(jié) / 512 字節(jié) I/O 大小(最小/最佳):512 字節(jié) / 512 字節(jié) 磁盤標(biāo)簽類型:dos 磁盤標(biāo)識符:0x000bfe7f 設(shè)備 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 字節(jié),12992512 個扇區(qū) Units = 扇區(qū) of 1 * 512 = 512 bytes 扇區(qū)大小(邏輯/物理):512 字節(jié) / 512 字節(jié) I/O 大小(最小/最佳):512 字節(jié) / 512 字節(jié) 磁盤 /dev/mapper/centos-swap:859 MB, 859832320 字節(jié),1679360 個扇區(qū) Units = 扇區(qū) of 1 * 512 = 512 bytes 扇區(qū)大小(邏輯/物理):512 字節(jié) / 512 字節(jié) I/O 大小(最小/最佳):512 字節(jié) / 512 字節(jié)
下來我們格式化加密分區(qū)
[root@node1 ~]# cryptsetup luksFormat /dev/sdb WARNING! ======== 這將覆蓋 /dev/sdb 上的數(shù)據(jù),該動作不可取消。 Are you sure? (Type uppercase yes): YES # 注意這里必須是大寫的YES 輸入密碼: 確認(rèn)密碼:
5. 利用 key file 加密分區(qū)
除了密碼之外,還可以選擇使用 key file 解密你的硬盤,也就是相當(dāng)于一個密鑰,當(dāng)然可以也可以只使用 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字節(jié)(4.1 kB)已復(fù)制,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! ======== 這是最后一個密鑰槽。設(shè)備在清空此密鑰后將不可用。 Are you sure? (Type uppercase yes): YES
注意:千萬不要將所有密碼移除,至少需要留有一個密碼訪問設(shè)備,移除操作不可撤銷
7. 分區(qū)映射與掛載
7.1 分區(qū)映射
[root@node1 ~]# cryptsetup luksOpen /dev/sdb data2 輸入 /dev/sdb 的密碼:
7.2 key file分區(qū)映射
也可以通過key file做映射
[root@node1 ~]# cryptsetup luksOpen -d /root/enc.key /dev/sdb data2
7.3 創(chuàng)建文件系統(tǒng)
在掛載使用之前,我們?nèi)匀恍枰獙υO(shè)備創(chuàng)建文件系統(tǒng)才可以使用,可以選擇任何你喜歡的文件系統(tǒng),例如 btrfs,ext4,vfat,ntfs等
[root@node1 ~]# mkfs.ext4 /dev/mapper/data2 mke2fs 1.42.9 (28-Dec-2013) 文件系統(tǒng)標(biāo)簽= 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 第一個數(shù)據(jù)塊=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 掛載
現(xiàn)在可以像正常分區(qū)一樣掛載我們的加密分區(qū)設(shè)備了
[root@node1 ~]# mkdir /data2 [root@node1 ~]# mount /dev/mapper/data2 /data2 [root@node1 ~]# df -h 文件系統(tǒng) 容量 已用 可用 已用% 掛載點 /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 卸載掛載點并關(guān)閉加密分區(qū)
[root@node1 /]# umount /data2 [root@node1 /]# cryptsetup luksClose data2
8. 總結(jié)
在完成整個步驟以后,您現(xiàn)在需要做的就是妥善保管您的加密存儲,可采用同樣的方式加密多個設(shè)備進行備份,因為誰也不能保證這移動設(shè)備會不會在什么時候丟掉。