为什么自 Ubuntu 12.04 以来 /dev/urandom 只能由 root 读取,我该如何“修复”它?

为什么自 Ubuntu 12.04 以来 /dev/urandom 只能由 root 读取,我该如何“修复”它?

我以前在很多服务器上使用过 Ubuntu 10.04 模板。自从换到 12.04 后,我遇到了一些问题,现在我已经将其隔离了。

/dev/urandom 设备仅可供 root 访问。

这导致 SSL 引擎(至少在 PHP 中)例如 file_get_contents(https://... 失败。

它也破坏了 redmine。

在 chmod 644 之后它可以正常工作,但重启后它不会继续存在。

所以我的问题是。

  1. 为什么会这样?我认为没有安全风险,因为...我的意思是...想窃取一些随机数据吗?

  2. 我该如何“修复”它?服务器是隔离的,仅由一个应用程序使用,这就是我使用 openvz 的原因。我想到了一些类似运行级别脚本之类的东西……但我如何有效地做到这一点?也许使用 dpkg 或 apt?

  3. /dev/shm 也是如此。在这种情况下,我完全理解为什么它无法访问,但我认为我可以用与修复 /dev/urandom 相同的方式“修复”它

答案1

如果从 udev 读取过多,可能会耗尽随机池,从而产生可预测的随机数。这可能是不是每个人都可以读取 /dev/urandom 的原因。(由于 Graeme Donaldson 是对的,因此删除)

如果您仍然想更改权限,请查看负责在 /dev/urandom 上设置模式的 udev 规则,而不是弄乱您的 init 脚本。

在 Debian 下,很容易找到有罪的规则:

$ dpkg -L udev | xargs grep urandom
/lib/udev/rules.d/91-permissions.rules:KERNEL=="urandom", MODE="0666"

就您而言,MODE 肯定不是 0666。

如果愿意,请根据 udev 配置规则进行更改。

笔记:http://lists.centos.org/pipermail/centos/2009-July/079134.html可能有助于改变 udev。

您基本上需要创建一个类似于 grep 结果的规则,但它具有正确的模式设置,并将其作为规则文件添加到 /etc/udev/rules.d/ 中(注意 Ubuntu 和 Debian 中可能存在的差异!)

答案2

至于如何解决这个问题,一个临时的解决办法就是

cat "chmod 666 /dev/urandom" >> /etc/rc.local

答案3

实际上,ubuntu 12.04 openvz 模板现已公开,并且他们还修复了 uraondm 和 shm 设备上的权限

答案4

在 RHEL 中:在 /etc/security/console.perms.d/ 中添加具有权限覆盖的安全规则

在 ubuntu 中肯定类似

相关内容