启动时的系统日志消息:未初始化的 urandom 读取

Mar*_*ter 7 boot init-script syslog random

CPU是AMD GX-412TC SOC

\n
\n

GX-412TC GE412TIYJ44JB 4 6W 2MB 1.0GHz/\n1.4GHz 不适用 DDR-1333 0-90\xc2\xb0C

\n
\n

其中没有rdrand

\n
grep rdrand /proc/cpuinfo\n# nothing\n
Run Code Online (Sandbox Code Playgroud)\n

我在syslog机器启动后看到以下消息:

\n
kernel: random: dd: uninitialized urandom read (512 bytes read)\nkernel: random: cryptsetup: uninitialized urandom read (32 bytes read)\n
Run Code Online (Sandbox Code Playgroud)\n

这些消息到底意味着什么?我能做什么?

\n

这是否意味着ddcryptsetup尝试读取/dev/urandom,但没有足够的熵?

\n

我正在使用haveged守护程序,但它是在引导过程后期启动的,在出现此消息之后。

\n

这是我的引导脚本启动顺序:

\n
/etc/rcS.d/S01hostname.sh\n/etc/rcS.d/S01mountkernfs.sh\n/etc/rcS.d/S02mountdevsubfs.sh\n/etc/rcS.d/S03checkroot.sh\n/etc/rcS.d/S04checkfs.sh\n/etc/rcS.d/S05mountall.sh\n/etc/rcS.d/S06bootmisc.sh\n/etc/rcS.d/S06procps\n/etc/rcS.d/S06urandom\n/etc/rcS.d/S07crypto-swap\n/etc/rc2.d/S01haveged\n/etc/rc2.d/S01networking\n/etc/rc2.d/S04rsyslog\n/etc/rc2.d/S05cron\n/etc/rc2.d/S05ssh\n
Run Code Online (Sandbox Code Playgroud)\n

系统日志中的消息来自这两个脚本:

\n
/etc/rcS.d/S06urandom  -> dd\n/etc/rcS.d/S07crypto-swap -> cryptsetup\n
Run Code Online (Sandbox Code Playgroud)\n

应该haveged先开始urandom

\n

我使用的是 Debian 10。

\n

另外,我应该补充一点,这台机器是裸板,没有键盘。唯一的接口是串行控制台。haveged我认为这会对可用熵产生影响,这也是我首先安装的原因。如果没有haveged,则sshd守护进程将在几分钟内不会启动,因为它没有足够的熵。

\n

fro*_*utz 2

为了让haveged工作,它必须与你的内核\xe2\x80\x94兼容,有一个问题haveged在>=5.x的内核版本中没有做任何事情,看看haveged仍然有用/相关吗?GitHub 上#57 。

\n

维护者很友善地重新引入了功能,但必须发布这些补丁,然后首先将其放入各种发行版中......旧版本要么根本无法启动,要么实际上不会做任何事情如果它正在运行(使用 检查strace),因为内核的熵池似乎不再缺少 \xe2\x80\x94,但 crng init 由于某种原因仍然需要时间。

\n

它还必须很早就运行,因此如果您正在使用 initramfs,那么您还必须在使用随机设备之前一段时间在 initramfs 中开始运行。在传统的 init 系统中,haveged 应该在/proc /sys /dev可用时立即运行。

\n

我不确定 hasged 到底需要多长时间才能将熵发送到内核......它必须首先自行收获随机性,并且还对其运行一些质量测试。在我的上一次测试中(使用已修补的haveged),启动haveged和内核报告之间有大约半秒的延迟random: crng init done

\n

除了 haged 之外,您还可以考虑保存/恢复随机种子,如果您有网络,一点流量也可能有助于内核收集一些熵。

\n