服务器突然用尽了熵

由于昨天重启,我们的一台虚拟服务器(Debian Lenny,用Xen虚拟化)在尝试通过基于SSH / TLS的协议进行连接时,会不断用尽熵,导致超时等。 有什么方法可以检查哪个进程正在吃掉所有的熵?

编辑:

我试过的:

  • 添加额外的熵源:time_entropyd,rng-tools将随机数回送到随机,伪随机文件访问 – 每秒钟捕获大约1 MiB附加熵,问题仍然存在
  • 通过lsof,netstat和tcpdump检查exception活动 – 什么都不是。 没有明显的负载或任何东西
  • 停止守护进程,重新启动永久会话,重新启动整个虚拟机 – 不会改变行为

到底什么工作:

  • 等候。 从昨天中午开始,就没有连接问题了。 熵值仍然较低(128字节峰值),但TLS / SSH会话已经没有明显的延迟了。 我正在慢慢地将客户切换回TLS(他们全部五个!),但我不希望现在有任何行为改变。 所有的客户现在再次使用TLS,没有问题。 真的,真的很奇怪。

作为诊断工具的来源,会使用审计工作来设置一些东西? 如果没有开放/dev/random ,没有办法消耗熵池,所以如果你在处理开放/dev/random进行审计,罪魁祸首(或者至less是进一步检查的候选集)应该相当快速地剔除。

通常对于需要“足够”熵的面向公众的服务器,我会build议像熵密钥,硬件设备(USB)向Linux熵池中添加随机位的东西。 但是你不和外面的世界交谈。

虚拟机可能会遇到缺less外部随机性的问题。

您的备注“备份域控制器”的确添加了可能的熵使用:Windows域在证书中使用随机数字。

lsof (列表打开的文件)也许有帮助。 这显示哪个进程当前持有哪些文件打开。 在你的情况下,这只有当你赶上你的过程,以消除熵,如果这一进程没有把手柄打开时间更长。

 $ lsof /dev/urandom COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME xfce4-ses 1787 to 15r CHR 1,9 0t0 8199 /dev/urandom applet.py 1907 to 9r CHR 1,9 0t0 8199 /dev/urandom scp-dbus- 5028 to 10r CHR 1,9 0t0 8199 /dev/urandom firefox 6603 to 23r CHR 1,9 0t0 8199 /dev/urandom thunderbi 12218 to 23r CHR 1,9 0t0 8199 /dev/urandom 

只是从我的工作站样品。 但是深入研究lsof可能会有所帮助。

如果没有更好的解决scheme,你可以把大枪放进去,全局地打开open()系统调用来logging试图随意打开/ etc / [u]的进程。

只要(tm)写一个定义open()这个日志的库,然后调用原始的libc open()。

提示: man ld.so/etc/ld.so.preload

我们在这里有类似的东西: https : //stackoverflow.com/questions/9614184/how-to-trace-per-file-io-operations-in-linux

CAVEAT:我从来没有这样做过。 可能会打破你的系统,因为每个打开()将通过你的lib运行。 在debugging环境中,或者如果你是RM Stallman,可能还可以。