Включение FIPS в зашифрованной системе CentOS с помощью luks ломает пароль для загрузки

Для одного из моих приложений мне нужно включить FIPS для OpenSSL, одновременно используя шифрование программного диска.

VM # 1

Я запустил экземпляр VMware CentOS, который был зашифрован во время установки. Система загрузилась нормально (после ввода пароля дешифрования загрузки).

Затем я прошел шаги, чтобы включить FIPS-OpenSSL и перезагрузился. Система не принимала бы мой пароль для дешифрования загружаемого файла (который был бы очень простым для ввода).

VM # 2

Я установил вторую виртуальную машину с идентичной ОС OS / config без программного шифрования . Я включил FIPS, используя описанные выше шаги, перезагрузился, и все работает нормально, без проблем перезагрузка.

VM # 3

Я объединил третий экземпляр CentOS VM, также отказавшись использовать системное шифрование во время установки. После установки и базовой конфигурации я зашифровал тестовый том с помощью luks, а затем перезагрузился. Мне будет предложено ввести пароль, и система загрузится нормально.

Затем я включил FIPS-OpenSSL , перезагрузился – и получаю множество ошибок, где обычно я вижу пароль для загрузки, и система не загружается.

Я загрузил эту виртуальную машину в однопользовательский режим, вытащил fips = 1 из строки ядра и перезагрузился. Пароль загрузки был принят на этот раз.

Почему включено FIPS для OpenSSL, что приводит к сбою паролей загрузки?

Проблема заключалась в том, что я зашифровал тома перед включением FIPS. Поскольку garethTheRed упоминается в комментарии , LUKS использовал не одобренный FIPS алгоритм, поэтому, когда FIPS был включен, все пошло на пользу.

Решение заключается в

  1. Включить FIPS
  2. Шифрование томов

В этой последовательности.

Это руководство было также полезно для решения проблемы. Он длинный с дополнительным объяснением, поэтому я не буду копировать всю информацию здесь. Вот это трюк:

A. РАЗРЕШИТЬ ФИПС

  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. ОБЪЕМ ОБЪЕКТА ENCRYPT

  1. Вы уверены, что FIPS включен? Если нет, не продолжайте – вернитесь к ENABLE FIPS и убедитесь, что часть работает до продолжения …

  2. Получить путь к логическому тому, который вы хотите зашифровать. В моем примере это /dev/mapper/vg_mybox-LogVol03

  3. ОБРАТИТЕ ВСЕ ДАННЫЕ НА ЭТОТ ОБЪЕМ. Он будет УНИЧТОЖЕН.

  4. umount volume.

    В моем случае, 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. Убедитесь, что у mapper есть путь

     [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 чтобы он мог быть дешифрован при загрузке. Здесь вы можете указать passfile, но это не рекомендуется. Установите DRAC на сервере, если его нужно дистанционно администрировать (чтобы вы могли ввести пароль во время загрузки). crypttab man page

     [root@centos64]# vi /etc/crypttab db_fips UUID="2e52ffee-7a02-4c91-b6bf-223b05f90ded" 
  15. Перезагрузитесь, чтобы проверить.