如何在Linux中更改LUKS设备主密钥,密码,哈希,密钥大小
在本文中,我将分享"更改LUKS设备主密钥,密码,哈希和密钥大小"的步骤。现在由于安全原因,我们可能需要更改LUKS设备主密钥或者其他值(例如加密密码)。
创建新的LUKS加密卷时,"基本上可以调整4个"旋钮"。
对称加密密码
密码块模式
IV(初始向量)用于密码块模式
加密密钥大小
支持的密码列表
虽然不建议更改默认加密密码,但这是一个选项,以下是一些选择:
AES-高级加密标准-FIPS PUB 197
Twofish
Serpent
cast5 - RFC 2144
cast6 - RFC 2612
检查/proc/crypto
,其中包含受支持的密码和模式,但请注意,它仅包含当前加载的crypto API模块。
提示:
如果没有加载加密模块,当前没有更好的方法列出所有可用的密码和模式变体。
更改LUKS设备主密钥,密码,哈希,密钥大小
有两种更改LUKS设备主密钥或者其他相关值的方法:
备份,重新格式化,还原
cryptsetup-reencrypt
警告:
请注意,cryptsetup
和Anaconda安装程序具有其自己的安全默认设置。实际上,在创建新的加密卷时,无需显式调整上述设置,除非我们知道自己在做什么,否则实际上不建议这样做。
识别LUKS加密设备
在开始之前,我们必须确定要更改其主密钥或者其他值的文件系统或者LUKS设备。
[root@centos-8 ~]# blkid -t TYPE=crypto_LUKS /dev/mapper/rhel-test_vol: UUID="61b1c0f8-522f-4792-98f7-29ef904943cf" TYPE="crypto_LUKS"
所以这里的LUKS设备是/dev/mapper/rhel-test_vol
使用cryptsetup luksOpen DEV MAPPING打开新的加密磁盘,其中MAPPING是用于设备映射器目标的任意名称,该目标将提供对解密设备的读/写访问权限
[root@centos-8 ~]# cryptsetup luksOpen /dev/rhel/test_vol secret Enter passphrase for /dev/rhel/test_vol:
方法1:备份,重新格式化,还原
可以在RHEL 5和6.6上使用此选项,因为这些操作系统变体" cryptsetup-reencrypt"不可用。我已经在RHEL/CentOS 8上对这些步骤进行了任何验证,但没有发现任何问题,尽管这是一个漫长的过程,所以在以后的OS变体中,我们应该使用" cryptsetup-reencrypt"选择方法2.
LUKS设备的备份内容
使用解密的映射备份有问题的设备,我们可以使用各种工具进行备份,例如tar,dump,rsync。
我将在同一节点上创建一个备份位置。
[root@centos-8 ~]# mkdir -p /backups/cryptokeys
由于我的LUKS设备已卸载,因此将其安装以访问LUKS设备内容
[root@centos-8 ~]# mount /dev/mapper/secret /secret/
为了本文的目的,我只有很少的虚拟键。
[root@centos-8 secret]# ls -l total 24 -rw-r--r-- 1 root root 4 Nov 25 22:28 encrypted_keys_1 -rw-r--r-- 1 root root 4 Nov 25 22:28 encrypted_keys_2 drwx------ 2 root root 16384 Nov 25 22:28 lost+found
接下来,我将使用rsync将这些数据复制到我的备份文件夹中
[root@centos-8 ~]# rsync -aXv /secret/ /backups/cryptokeys/ sending incremental file list ./ encrypted_keys_1 encrypted_keys_2 lost+found/ sent 234 bytes received 61 bytes 590.00 bytes/sec total size is 8 speedup is 0.03
验证备份文件夹中的内容
[root@centos-8 ~]# ls -l /backups/cryptokeys/ total 12 -rw-r--r-- 1 root root 4 Nov 25 22:28 encrypted_keys_1 -rw-r--r-- 1 root root 4 Nov 25 22:28 encrypted_keys_2 drwx------ 2 root root 4096 Nov 25 22:28 lost+found
接下来卸载LUKS设备
[root@centos-8 ~]# umount /secret
关闭LUKS设备
[root@centos-8 ~]# cryptsetup luksClose secret
更改LUKS设备主密钥和密码
默认情况下,LUKS加密卷的密码如下。但是对于我的内部测试,我已将LUKS设备的密码密钥更改为aes-xts-essiv:sha256
。因此,作为本文的一部分,我们将LUKS设备主密钥更改为默认值。
LUKS1: aes-xts-plain64, Key: 256 bits, LUKS header hashing: sha256, RNG: /dev/urandom
要查看现有LUKS设备的密码,哈希,密钥大小和主密钥,可以使用cryptsetup或者dmsetup命令。
[root@centos-8 ~]# cryptsetup luksDump /dev/rhel/test_vol | grep cipher cipher: aes-xts-essiv:sha256 [root@centos-8 ~]# dmsetup table --target crypt --showkey /dev/mapper/secret 0 4177920 crypt aes-xts-essiv:sha256 :32:logon:cryptsetup:1fbf9936-ff5b-4847-9b2d-3da3044d5195-d0 0 253:2 16384
这里,
aes-加密块密码。例如:twofish,蛇
xts-分组密码加密模式,称为chainmode。示例:cbc,xts。
" plain64"-初始向量是扇区号的64位Little-Endian版本,必要时用零填充。
" essiv":"加密的扇区|盐初始向量",使用盐作为密钥,使用批量密码对扇区号进行加密。
可以从以下网址收集更多信息:https://gitlab.com/cryptsetup/cryptsetup/wikis/DMCrypt
如果目标只是更改LUKS设备主密钥,则不需要特殊选项;否则,无需执行任何操作。否则,可能需要使用诸如--cipher 、、 --key-size和/或者--hash之类的选项。其中:因为我也在更改密码值,所以我将使用-c
,这是--cipher
的缩写。
警告:
这将完全破坏LUKS设备中的所有可用数据。
[root@centos-8 ~]# cryptsetup -c aes-xts-plain64 luksFormat /dev/rhel/test_vol WARNING: Device /dev/rhel/test_vol already contains a 'crypto_LUKS' superblock signature. WARNING! ======== This will overwrite data on /dev/rhel/test_vol irrevocably. Are you sure? (Type uppercase yes): YES Enter passphrase for /dev/rhel/test_vol: Verify passphrase:
恢复内容
现在,既然我们成功更改了LUKS设备的主密钥和密码,请打开新格式化的LUKS设备并重新创建任何必要的结构
[root@centos-8 ~]# cryptsetup luksOpen /dev/mapper/rhel-test_vol secret Enter passphrase for /dev/mapper/rhel-test_vol:
将文件系统分配给LUKS设备
[root@centos-8 ~]# mkfs.ext4 /dev/mapper/secret mke2fs 1.44.3 (10-July-2016) Creating filesystem with 522240 4k blocks and 130560 inodes Filesystem UUID: 93f1e562-323e-4f8a-bafc-cdd5f7d4025a Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done
将LUKS设备挂载在挂载点上,然后从备份文件夹中还原数据
[root@centos-8 ~]# mount /dev/mapper/secret /secret/ [root@centos-8 ~]# rsync -aXv /backups/cryptokeys//secret/ sending incremental file list ./ encrypted_keys_1 encrypted_keys_2 lost+found/ sent 234 bytes received 65 bytes 598.00 bytes/sec total size is 8 speedup is 0.03
验证数据
[root@centos-8 ~]# ls -l /secret/ total 24 -rw-r--r-- 1 root root 4 Nov 25 22:28 encrypted_keys_1 -rw-r--r-- 1 root root 4 Nov 25 22:28 encrypted_keys_2 drwx------ 2 root root 16384 Nov 25 22:28 lost+found
验证新的主密钥和密码
我们还可以验证主密钥,该密钥现在必须与我们之前的密钥不同。
[root@centos-8 ~]# dmsetup table --target crypt --showkey /dev/mapper/secret 0 4177920 crypt aes-xts-plain64 :32:logon:cryptsetup:61b1c0f8-522f-4792-98f7-29ef904943cf-d0 0 253:2 16384
还要验证LUKS加密设备的新密码
[root@centos-8 ~]# cryptsetup luksDump /dev/rhel/test_vol | grep cipher cipher: aes-xts-plain64
方法2:使用cryptsetup重新加密
/usr/sbin/cryptsetup-reencrypt是cryptsetup-reencrypt rpm的一部分,我们可以使用yum安装。
此rpm是所有RHEL 6.6和更高版本的一部分。我正在使用CentOS 8验证这些步骤。
[root@centos-8 ~]# yum install -y cryptsetup-reencrypt
另请阅读:
如何在Linux中使用fsarchiver备份和还原整个分区和文件系统
备份LUKS设备
我们的内容与之前对/secret
MAPPING的内容相同
[root@centos-8 secret]# ls -l /secret/ total 24 -rw-r--r-- 1 root root 4 Nov 25 22:28 encrypted_keys_1 -rw-r--r-- 1 root root 4 Nov 25 22:28 encrypted_keys_2 drwx------ 2 root root 16384 Nov 25 22:28 lost+found
在备份LUKS设备之前,我们必须先卸载它。
[root@centos-8 ~]# umount /secret
使用dd命令在块级别备份LUKS设备
[root@centos-8 ~]# dd if=/dev/mapper/secret bs=4k of=/backups/cryptofile.img 522240+0 records in 522240+0 records out 2139095040 bytes (2.1 GB, 2.0 GiB) copied, 13.5232 s, 158 MB/s
确保相应的LUKS设备已关闭
[root@centos-8 ~]# cryptsetup luksClose secret [root@centos-8 ~]# cryptsetup status secret /dev/mapper/secret is inactive.
更改LUKS设备主密钥
对相关的LUKS设备执行cryptsetup-reencrypt
,如果目标只是更改音量/主密钥,则不需要特殊选项;否则,可能需要--cipher
,--key-size
和/或者--hash
之类的选项。
[root@centos-8 ~]# cryptsetup-reencrypt /dev/mapper/rhel-test_vol Enter passphrase for key slot 0: Finished, time 00:09.210, 2040 MiB written, speed 221.5 MiB/s
通过重新启动或者手动调用" cryptsetup luksOpen"和" mount"来重新打开并安装相应的LUKS设备。
[root@centos-8 ~]# cryptsetup luksOpen /dev/mapper/rhel-test_vol secret Enter passphrase for /dev/mapper/rhel-test_vol: [root@centos-8 ~]# mount /dev/mapper/secret /secret/
验证LUKS设备内容
[root@centos-8 ~]# ls -l /secret/ total 24 -rw-r--r-- 1 root root 4 Nov 25 22:28 encrypted_keys_1 -rw-r--r-- 1 root root 4 Nov 25 22:28 encrypted_keys_2 drwx------ 2 root root 16384 Nov 25 22:28 lost+found
恢复内容
如果LUKS加密卷有任何问题,那么我们可以清除/secret
的内容。
卸载LUKS卷并使用dd
从备份中恢复内容
[root@centos-8 ~]# dd if=/backups/cryptofile.img of=/dev/mapper/secret bs=4k 522240+0 records in 522240+0 records out 2139095040 bytes (2.1 GB, 2.0 GiB) copied, 6.81704 s, 314 MB/s
接下来挂载LUKS加密卷并验证文件
[root@centos-8 ~]# mount /dev/mapper/secret /secret/ [root@centos-8 ~]# ls -l /secret/ total 24 -rw-r--r-- 1 root root 4 Nov 25 22:28 encrypted_keys_1 -rw-r--r-- 1 root root 4 Nov 25 22:28 encrypted_keys_2 drwx------ 2 root root 16384 Nov 25 22:28 lost+found
验证新的主密钥
最后一次使用cryptsetup luksDump
或者dmsetup
确认对LUKS设备所做的更改(例如,新的主密钥摘要,不同的密码类型等)
[root@centos-8 ~]# dmsetup table --target crypt --showkey /dev/mapper/secret 0 4177920 crypt aes-xts-plain64 :32:logon:cryptsetup:61b1c0f8-522f-4792-98f7-29ef904943cf-d0 0 253:2 16384