![在 luks 加密的 CentOS 系统上启用 FIPS 会破坏启动密码](https://linux22.com/image/72048/%E5%9C%A8%20luks%20%E5%8A%A0%E5%AF%86%E7%9A%84%20CentOS%20%E7%B3%BB%E7%BB%9F%E4%B8%8A%E5%90%AF%E7%94%A8%20FIPS%20%E4%BC%9A%E7%A0%B4%E5%9D%8F%E5%90%AF%E5%8A%A8%E5%AF%86%E7%A0%81.png)
对于我的一个应用程序,我需要为 OpenSSL 启用 FIPS,同时使用软件磁盘加密。
虚拟机#1
我启动了一个 CentOS VM 实例,该实例在安装过程中进行了软件加密。系统启动正常(输入启动解密密码后)。
接下来,我完成了这些步骤启用 FIPS-OpenSSL并重新启动。系统不会接受我的启动解密密码(故意很容易输入)。
虚拟机#2
我设置了第二个虚拟机,其操作系统/配置在其他方面都相同无软件加密。我使用上述步骤启用了 FIPS,然后重新启动,一切正常,重新启动时没有任何问题。
虚拟机#3
我启动了第三个 CentOS VM 实例,也选择在安装过程中不使用系统加密。安装和基本配置后,我使用 luks 加密了一个测试卷,然后重新启动。系统会提示我输入密码,然后系统会正常启动。
接下来,我启用 FIPS-OpenSSL,重新启动 - 并出现大量错误,我通常会看到启动密码,并且系统无法启动。
我将此虚拟机启动到单用户模式,从内核行中拉出 fips=1 并重新启动。这次启动密码被接受。
...
为什么为 OpenSSL 启用 FIPS 会导致启动密码失败?
答案1
问题是我在启用 FIPS 之前对卷进行了加密。作为加雷思·红在a中提到评论,LUKS 使用了未经 FIPS 批准的算法,因此当启用 FIPS 时,事情就会变得疯狂。
解决办法是
- 启用 FIPS
- 加密卷
以该顺序。
本指南对于解决问题也很有用。它很长,有额外的解释,所以我不会在这里复制粘贴完整的内容。这是要点:
A. 启用 FIPS
使用以下两种方法之一检查是否启用了 FIPS:
cat /proc/sys/crypto/fips_enabled 0 = not enabled 1 = enabled openssl md5 /any/file valid hash = not enabled "Error setting digest md5" = enabled (likely)
检查您是否打开了预链接。
vi /etc/sysconfig/prelink Change PRELINKING=yes to PRELINKING=no
撤消所有当前预链接
[root@centos64]# prelink -ua
安装
dracut-fips
[root@centos64]# yum install dracut-fips
重建你的 initramfs
[root@centos64]# dracut -f
查找设备路径
/boot
[root@centos64]# df /boot Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 487652 115447 346605 25% /boot
cp /etc/grub.conf /etc/grub.bak
编辑
/etc/grub.conf
Add in the "fips=1" and "boot=/dev/***" lines to the kernel command line Example: kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/vg_centos6464bittempl-lv_root rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_LVM_LV=vg_centos6464bittempl/lv_swap rd_LVM_LV=vg_centos6464bittempl/lv_root rd_NO_MD crashkernel=auto SYSFONT=latarcyrheb-sun16 rd_NO_DM rhgb quiet fips=1 boot=/dev/sda2
重启
检查 FIPS 是否已启用(请参阅上面的步骤 1)。
B. 加密卷
您确定已启用 FIPS 吗?如果没有,请不要继续 - 返回启用 FIPS并确保该部分正在工作,然后再继续...
获取您要加密的逻辑卷的设备路径。在我的例子中,这是
/dev/mapper/vg_mybox-LogVol03
备份该卷上的所有数据。它将被摧毁。
umount
体积。就我而言,
umount /db_fips
shred -v -n1 /dev/mapper/vg_mybox-LogVol03
加密卷并设置密码
cryptsetup -v --verify-passphrase luksFormat /dev/mapper/vg_mybox-LogVol03
笔记:默认情况下,RHEL 最小安装可能不包含 cryptsetup。只是
yum install cryptsetup
为了得到你需要的东西。 CentOS 6.7 的最小软件包集包括cryptsetup
.打开设备并将其别名为您选择的“somename”(在本例中为“db_fips”)
cryptsetup luksOpen /dev/mapper/vg_mybox-LogVol03 db_fips
验证映射器是否有路径
[root@centos64]# ls /dev/mapper/db_fips At this point, treat /dev/mapper/db_fips as you would any ordinary filesystem or device
像平常一样创建文件系统
[root@centos64]# mkfs -t ext4 /dev/mapper/db_fips
安装并验证
[root@centos64]# mount /dev/mapper/db_fips /db_fips [root@centos64]# date >> /db_fips/today.txt
重要的!!!:注释掉
/etc/fstab
目标卷的现有条目,以免重启时遇到麻烦。:-)
vi /etc/fstab
# /dev/mapper/vg_mybox-LogVol03 /some/path ext4 defaults 1,2
重新启动以确保上述步骤有效。
获取
UUID
加密卷blkid
/dev/mapper/vg_mybox-LogVol03: UUID="2e52ffee-7a02-4c91-b6bf-223b05f90ded" TYPE="crypto_LUKS"
将加密卷添加到
/etc/crypttab
- 以便可以在启动时解密。您可以在此处指定密码文件,但不建议这样做。 如果要远程管理服务器,请在服务器中安装 DRAC(以便您可以在引导期间输入密码)。 crypttab 手册页[root@centos64]# vi /etc/crypttab db_fips UUID="2e52ffee-7a02-4c91-b6bf-223b05f90ded"
重新启动即可测试。