RHEL8上硬盘加密采用的是LUKS方式。默认的话需要在开机时候手动输入硬盘密码。在这里我们为了自动化操作,可以设置密码储存在磁盘上让Linux自动读取硬盘解密。
注意密码储存在硬盘有不安全的风险。
1. 首先查看硬盘情况
执行命令lsblk
可以看到/sda/sda1这块硬盘未加密。这里先不处理,在下一篇讲如何为这块硬盘加密。
我们这次要处理的硬盘是/dev/nvme0n1p3下面的luks-556b55d3-fbec-4b07-8b15-b0470b5f7c4a这块被加密的分区。这个分区是根分区,被mount到/
2. 获取luks-556b55d3-fbec-4b07-8b15-b0470b5f7c4a分区的UUID
其实UUID就是luks后面的556b55d3-fbec-4b07-8b15-b0470b5f7c4a。
如果我们要用命令来获取的话,可以执行
sudo cryptsetup luksUUID /dev/nvme0n1p3
输出
556b55d3-fbec-4b07-8b15-b0470b5f7c4a
如果是一般的机械硬盘,命令是sudo cryptsetup luksUUID /dev/sda1等等
3. 新建一个luks加密key,并且把这个key添加到luks-556b55d3-fbec-4b07-8b15-b0470b5f7c4a分区
我们在硬盘加密工具上新建分区的时候,已经输入了一个人类比较好记忆的密钥来解密硬盘。这里不把这个密钥直接写进硬盘,而是另外新建一个非常长的密钥来加解密硬盘。当然原来的密钥也一样可以解密硬盘。
命令如下
sudo openssl genrsa -out /root/lukskey 2048
sudo chmod 400 /root/lukskey
sudo cryptsetup luksAddKey /dev/mapper/vg_li4869957701-lv_root /root/lukskey
这里我们生成一个rsa2048位密钥,保存到/root目录下,然后设置权限为400,然后再把这个key加到分区/dev/mapper/vg_li4869957701-lv_root上。vg_li4869957701-lv_root这个名字可以从lsblk命令输出中获取。
4. 修改/etc/crypttab
执行命令
sudo vim /etc/crypttab
如果/etc/crypttab这个文件不存在的话,就新建一个文本文件。权限似乎不讲究。
在这个crypttab文件里,加入(如果有的话就修改)下面这段话
luks-556b55d3-fbec-4b07-8b15-b0470b5f7c4a UUID=556b55d3-fbec-4b07-8b15-b0470b5f7c4a /root/lukskey luks
一共有四项,分别以空格分割
第一项:luks-556b55d3-fbec-4b07-8b15-b0470b5f7c4a 来自于/dev/mapper对应的文件名
第二项:UUID=后面跟着前面取到的分区UUID
第三项:/root/lukskey,这是一个文本文件,存放着加密密钥的明文
第四项:可以固定写luks。如果要有其他选项,可以参考man crypttab
crypttab的参考手册:链接
5. 修改fstab
fstab一般是下面的样子。fstab里没有关于加解密的配置,一般不需要修改
/dev/mapper/vg_li4869957701-lv_root / xfs defaults,x-systemd.device-timeout=0 0 0
6. 重建initramfs
RHEL是用dracut工具管理initramfs的,和debian系不一样。注意不要一个劲的去敲update-initramfs。
执行命令
sudo dracut --include /root/lukskey /root/lukskey --regenerate-all --force
关于dracut有一篇不错的教程:How to build an initramfs using Dracut on Linux
这里我们要确定文件/root/lukskey被打包到initramfs里去了。如果文件没有被打包到initramfs,那再启动的时候luks还是要求输入密钥。
这里找到了RHEL专用的命令lsinitrd。lsinitrd的详细教程可以看这里:
How to build an initramfs using Dracut on Linux (下半部分)
查看/etc/crypttab是不是被更新
sudo lsinitrd /boot/initramfs-4.18.0-477.13.1.el8_8.x86_64.img etc/crypttab
从输出可以看到已经被更新了
查看/root/lukskey是不是已经在initramfs里
sudo lsinitrd /boot/initramfs-4.18.0-477.13.1.el8_8.x86_64.img root/lukskey
从输出可以看到已经在里面了
7. 重启Linux
此时无需再输入磁盘加密密码
标签:LUKS,sudo,RHEL8,initramfs,luks,root,硬盘,lukskey From: https://www.cnblogs.com/smartheye/p/17481036.html