在 luks 加密的 CentOS 系统上启用 FIPS 会破坏启动密码

在 luks 加密的 CentOS 系统上启用 FIPS 会破坏启动密码

对于我的一个应用程序,我需要为 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 时,事情就会变得疯狂。

解决办法是

  1. 启用 FIPS
  2. 加密卷

以该顺序。

本指南对于解决问题也很有用。它很长,有额外的解释,所以我不会在这里复制粘贴完整的内容。这是要点:

A. 启用 FIPS

  1. 使用以下两种方法之一检查是否启用了 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)
    
  2. 检查您是否打开了预链接。

    vi /etc/sysconfig/prelink
    
    Change
    PRELINKING=yes
    to
    PRELINKING=no
    
  3. 撤消所有当前预链接

    [root@centos64]# prelink -ua
    
  4. 安装dracut-fips

    [root@centos64]# yum install dracut-fips
    
  5. 重建你的 initramfs

    [root@centos64]# dracut -f      
    
  6. 查找设备路径/boot

    [root@centos64]# df /boot
    Filesystem     1K-blocks   Used Available Use% Mounted on
    /dev/sda2         487652 115447    346605  25% /boot
    
  7. cp /etc/grub.conf /etc/grub.bak

  8. 编辑/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
    
  9. 重启

  10. 检查 FIPS 是否已启用(请参阅上面的步骤 1)。

B. 加密卷

  1. 您确定已启用 FIPS 吗?如果没有,请不要继续 - 返回启用 FIPS并确保该部分正在工作,然后再继续...

  2. 获取您要加密的逻辑卷的设备路径。在我的例子中,这是/dev/mapper/vg_mybox-LogVol03

  3. 备份该卷上的所有数据。它将被摧毁。

  4. umount体积。

    就我而言,umount /db_fips

  5. shred -v -n1 /dev/mapper/vg_mybox-LogVol03

  6. 加密卷并设置密码

    cryptsetup -v --verify-passphrase luksFormat /dev/mapper/vg_mybox-LogVol03
    

    笔记:默认情况下,RHEL 最小安装可能不包含 cryptsetup。只是yum install cryptsetup为了得到你需要的东西。 CentOS 6.7 的最小软件包集包括cryptsetup.

  7. 打开设备并将其别名为您选择的“somename”(在本例中为“db_fips”)

    cryptsetup luksOpen /dev/mapper/vg_mybox-LogVol03 db_fips
    
  8. 验证映射器是否有路径

    [root@centos64]# ls /dev/mapper/db_fips
    
    At this point, treat /dev/mapper/db_fips as you would any ordinary filesystem or device
    
  9. 像平常一样创建文件系统

    [root@centos64]# mkfs -t ext4 /dev/mapper/db_fips
    
  10. 安装并验证

    [root@centos64]# mount /dev/mapper/db_fips /db_fips
    [root@centos64]# date >> /db_fips/today.txt
    
  11. 重要的!!!:注释掉/etc/fstab目标卷的现有条目,以免重启时遇到麻烦。:-)

    vi /etc/fstab

    # /dev/mapper/vg_mybox-LogVol03 /some/path ext4 defaults 1,2

  12. 重新启动以确保上述步骤有效。

  13. 获取UUID加密卷

    blkid

    /dev/mapper/vg_mybox-LogVol03: UUID="2e52ffee-7a02-4c91-b6bf-223b05f90ded" TYPE="crypto_LUKS"

  14. 将加密卷添加到/etc/crypttab- 以便可以在启动时解密。您可以在此处指定密码文件,但不建议这样做。 如果要远程管理服务器,请在服务器中安装 DRAC(以便您可以在引导期间输入密码)。 crypttab 手册页

    [root@centos64]# vi /etc/crypttab
    
    db_fips UUID="2e52ffee-7a02-4c91-b6bf-223b05f90ded" 
    
  15. 重新启动即可测试。

相关内容