![为什么自 Ubuntu 12.04 以来 /dev/urandom 只能由 root 读取,我该如何“修复”它?](https://linux22.com/image/585033/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%87%AA%20Ubuntu%2012.04%20%E4%BB%A5%E6%9D%A5%20%2Fdev%2Furandom%20%E5%8F%AA%E8%83%BD%E7%94%B1%20root%20%E8%AF%BB%E5%8F%96%EF%BC%8C%E6%88%91%E8%AF%A5%E5%A6%82%E4%BD%95%E2%80%9C%E4%BF%AE%E5%A4%8D%E2%80%9D%E5%AE%83%EF%BC%9F.png)
我以前在很多服务器上使用过 Ubuntu 10.04 模板。自从换到 12.04 后,我遇到了一些问题,现在我已经将其隔离了。
/dev/urandom 设备仅可供 root 访问。
这导致 SSL 引擎(至少在 PHP 中)例如 file_get_contents(https://... 失败。
它也破坏了 redmine。
在 chmod 644 之后它可以正常工作,但重启后它不会继续存在。
所以我的问题是。
为什么会这样?我认为没有安全风险,因为...我的意思是...想窃取一些随机数据吗?
我该如何“修复”它?服务器是隔离的,仅由一个应用程序使用,这就是我使用 openvz 的原因。我想到了一些类似运行级别脚本之类的东西……但我如何有效地做到这一点?也许使用 dpkg 或 apt?
/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 中肯定类似