由于昨天重启,我们的一台虚拟服务器(Debian Lenny,用Xen虚拟化)在尝试通过基于SSH / 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,可能还可以。