安装centos7时,有一个提示,是否加密磁盘,选择此选项后,每次启动系统都会要求你输入密码,这样可以保证磁盘如果没有密码,放到其它电脑上也无法使用。对数据会更加安全。
但每次手动输入密码还是比较麻烦,最好是把密钥放到U盘里,插上后就可以自动解锁,不需要输入人工输入密码。
我搜索了下,网上关于此的教程都无法完美解决,没有非常完善的文档,下面两个教程是最靠谱的,我也是根据这些教程,在虚拟机上测试成功后才找到具体的原因。
https://forums.centos.org/viewtopic.php?t=53452
https://community.spiceworks.com/how_to/168683-cenos-7-encrypt-my-data-and-use-usb-key-for-unlock
以下为完整的操作步骤:
创建一个带有keyfile的usb盘
使用fat格式即可,这样在windows电脑上也能使用
先通过lsblk blkid命令,查看系统上的硬盘情况。
1 | [root@localhost ~]# lsblk |
1 | [root@localhost ~]# blkid |
上面/dev/sda3
为加密的磁盘,/dev/sdb1
为U盘(FAT文件系统)。记下他们的uuid,分别为535d89c0-9b67-4138-a0f3-0879ef2a6cc6
和 A06A-C2D3
先挂载U盘,并创建相应的文件
1 | mount /dev/sdb1 /media |
测试下添加的密钥文件有没有成功:
1 | [root@localhost ~]# cryptsetup luksOpen -v --key-file /media/cryptboot/boot.key --test-passphrase /dev/sda3 |
出现上面命令就是成功了。
修改启动方式
1 | cp /etc/default/grub /etc/default/grub.original |
即是在 /etc/default/grub
中GRUB_CMDLINE_LINUX这一行添加 rd.luks.key=cryptboot/boot.key:UUID=A06A-C2D3
下面是修改后的
1 | GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.luks.uuid=luks-535d89c0-9b67-4138-a0f3-0879ef2a6cc6 rd.luks.key=cryptboot/boot.key:UUID=A06A-C2D3 rd.lvm.lv=centos/swap rhgb quiet" |
### 修改下文件/etc/dracut.conf
1 | echo 'add_drivers+="vfat nls_cp437 nls_iso8859-1 ext4"' >> /etc/dracut.conf |
重新生成grub 和 initramfs
1 | grub2-mkconfig -o grub2/grub.cfg |
之前一直不成功的原因是,我的电脑 是uefi启动方式+GPT磁盘,所以应该使用 grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
。这点很重要。
之后重启电脑就可以了。