TPM модуль не работает

1. Проблема

Нерабочий TPM модуль из-за rngd сервиса

Статус сервиса:

rngd.service - Hardware RNG Entropy Gatherer Daemon
   Loaded: loaded (/usr/lib/systemd/system/rngd.service; enabled)
   Active: failed (Result: exit-code) since Thu 2014-09-11 12:48:40 UTC; 46min ago
  Process: 28069 ExecStart=/sbin/rngd -f (code=exited, status=1/FAILURE)
 Main PID: 28069 (code=exited, status=1/FAILURE)

 systemd[1]: Started Hardware RNG Entropy Gatherer Daemon.
 rngd[28069]: Unable to open file: /dev/tpm0
 rngd[28069]: can't open any entropy source
rngd[28069]: Maybe RNG device modules are not loaded
systemd[1]: rngd.service: main process exited, code=exited, status=1/FAILURE
 systemd[1]: Unit rngd.service entered failed state.

2. Причины проблемы:

  1. Процессор может не поддерживать Intel 82802 Firmware Hub (работает от процессоров Ivy bridge и далее)

  2. Сервисный файл запущен некорректно

  3. Процессор или ОС не работает с rbrand в

    cat /proc/cpuinfo | grep rdrand
  4. Для виртуальных машин проверить состояние rngd можно по этой статье ссылка

3. Решения

3.1. Решение 1

  1. Установить пакет rng-tools по ссылке ссылка или dnf install rng-tools

  2. Проверить наличие HRWNG который использует rngd

    [root 07-10 15:54:53 ~]# ll /dev/hwrng
    crw-------. 1 root root 10, 183 Jun  8 19:09 /dev/hwrng
  3. Остановить сервис rngd и запустить его:

    systemctl stop rngd
    systemctl start rngd
  4. Проверить состояние сервиса командой systemctl status rngd

    [root 07-10 15:51:46 ~]# systemctl status rngd
    ? rngd.service - Hardware RNG Entropy Gatherer Daemon
       Loaded: loaded (/usr/lib/systemd/system/rngd.service; enabled; vendor preset: enabled)
       Active: active (running) since Mon 2023-07-10 15:50:28 AEST; 1min 19s ago
     Main PID: 807744 (rngd)
        Tasks: 3 (limit: 11155)
       Memory: 3.3M
       CGroup: /system.slice/rngd.service
               ??807744 /usr/sbin/rngd -f --fill-watermark=0 -x pkcs11 -x nist -x qrypt -D daemon:daemon
    
    Jul 10 15:50:28 censored.com rngd[807744]: Disabling 5: NIST Network Entropy Beacon (nist)
    Jul 10 15:50:28 censored.com rngd[807744]: Disabling 9: Qrypt quantum entropy beacon (qrypt)
    Jul 10 15:50:28 censored.com rngd[807744]: Initializing available sources
    Jul 10 15:50:28 censored.com rngd[807744]: [hwrng ]: Initialization Failed
    Jul 10 15:50:28 censored.com rngd[807744]: [rdrand]: Initialization Failed
    Jul 10 15:50:28 censored.com rngd[807744]: [jitter]: JITTER timeout set to 5 sec
    Jul 10 15:50:28 censored.com rngd[807744]: [jitter]: Initializing AES buffer
    Jul 10 15:50:32 censored.com rngd[807744]: [jitter]: Enabling JITTER rng support
    Jul 10 15:50:32 censored.com rngd[807744]: [jitter]: Initialized
    Jul 10 15:50:32 censored.com rngd[807744]: Process privileges have been dropped to 2:2

Если решение 1 не помогло:

3.2. Решение 2

  1. Переписываем для systemd , чтобы использовался по умолчанию rngd.service файл

    cp /usr/lib/systemd/system/rngd.service   /etc/systemd/system
  2. Изменяем значения в сервисном файле

    Было:

    ExecStart=/sbin/rngd -f

    Должно стать:

    ExecStart=/sbin/rngd -f -r /dev/urandom -o /dev/random
  3. Перезаписываем демон сервиса

    systemctl daemon-reload
  4. Запускаем сервис

    systemctl start rngd.service
  5. Проверяем состояние сервиса

    systemctl start rngd.service