我正在设置一些东西 - 究竟是什么可能并不重要。
无论如何,我从我的应用程序中收到一个错误,表明需要 /dev/random 和 /dev/urandom 但缺失。
所以我从包含它们的 Linux 版本中复制了它们,然后一切正常。
这个可以吗?因为我这样做可能会出现什么问题?如果这不行,是否有“正确”的方法来创建 /dev/random 和 /dev/urandom?
答案1
要正确创建两个设备,请使用:
mknod -m 444 /dev/random c 1 8
mknod -m 444 /dev/urandom c 1 9
/dev/random
将生成高熵伪随机数据。如果熵耗尽,它将阻塞,直到为新的 PRD 生成足够的熵。
/dev/urandom
不关心熵是否足够高,根据当前的密码学理解,这实际上没有意义。结果是urandom
在熵干旱期间不会阻塞,但由于初始种子使用了足够的熵,因此随机性的“弱点”此时纯粹是理论上的。
答案2
是的,您可以复制/dev/random
设备。如果您从中获取它们的 Linux 文件系统具有兼容的定义(相同的主要和次要编号),那么它就可以工作。
您不能只使用cp
不带参数的文件,因为这会复制随机数据而不是文件系统对象。使用cp -a
。 (-a
是“保留一切”的 GNU 选项)。
其次,当然您必须是 root,如果您尝试创建/dev
条目,则可以假设您是 root。如果普通用户尝试cp -a /dev/random foo
,他们会收到:
cp: cannot create special file `foo': Operation not permitted
如果您有权限,cp -a
它将创建特殊(字符设备)文件的副本。
另一种方法就是 mknod。如果我们碰巧知道设备的主设备号random
是 1,次设备号是 8,我们可以这样做
mknod foo c 1 8 # character device, major 1, minor 8
现在foo
指向与 相同的内核设备/dev/random
。权限也很重要;创建条目时/dev
,注意权限;使用-m
的参数mknod
。
如果使用 复制/dev/random
现有的 Linux 文件系统树cp -a
,它应该已经拥有正确的权限(当然还有所有权)。
但是,我会调查为什么您的系统没有这些条目!