gpt4 book ai didi

linux - 如何在 Docker 中处理对/dev/(u)random 等的请求?

转载 作者:太空狗 更新时间:2023-10-29 11:11:56 25 4
gpt4 key购买 nike

为了我们项目的文档目的,我正在寻找以下信息:

我们正在使用 Docker 部署各种需要 SSL/TLS 熵和其他内容的应用程序。这些应用程序可能使用/dev/random、/dev/random、getrandom(2) 等。我想知道如何在 Docker 容器中处理这些请求,而不是一台运行所有服务(并访问一个共享熵)的虚拟机来源)。

到目前为止,我已经(粗略地)研究了 libcontainer 和 runC。不幸的是,我没有找到我的问题的任何答案,尽管我确实有一种直觉,这些请求被传递到主机上的等效调用。

您能否引导我找到支持此声明的任何文档,或者我是否弄错了这些请求实际上以不同方式处理?

最佳答案

Docker 容器是“加强版的 chroot”。无论如何,内核在所有 docker 容器和主机系统之间都是相同的。所以所有内核调用共享同一个内核。

所以我们可以在我们的主机上做(在任何文件夹中,作为 root):

mknod -m 444 urandom_host c 1 9

在一些 linux chroot 中:

wget <alpine chroot> | tar -x <some folder>
chroot <some folder>
mknod -m 444 urandom_in_chroot c 1 9

我们可以做到

docker run -ti --rm alpine sh -l
mknod -m 444 urandom_in_docker c 1 9

然后任何程序对任何urandom_in_dockerurandom_in_chroot的所有调用open(2)read(2) > 和 urandom_host 将进入同一个内核,进入同一个内核 urandom 模块,绑定(bind)到主编号为 1 和次编号为 9 的特殊字 rune 件,根据 this list随机数生成器。

至于虚拟机,内核是不同的(如果有内核的话)。所以所有对任何 block /特殊字 rune 件的调用都由不同的内核翻译(也可能使用不同的虚拟化架构和不同的指令集)。从主机上看,虚拟机作为单个进程(取决于实现)是可见的,如果虚拟化系统/程序调用/dev/urandom,它可能/也可能不会调用主机/dev/urandom。在虚拟化中,任何事情都可能发生,这取决于特定的实现。

因此,在 docker 中对/dev/urandom 的请求的处理方式与在主机上的处理方式相同。至于 urandom 在内核中的处理方式,可能是 here是一个好的开始。

如果您需要熵,请务必使用并安装 haveged。

关于linux - 如何在 Docker 中处理对/dev/(u)random 等的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52699235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com