Назад | Перейти на главную страницу

На сервере внезапно заканчивается энтропия

После вчерашней перезагрузки на одном из наших виртуальных серверов (Debian Lenny, виртуализированный с помощью Xen) постоянно заканчивается энтропия, что приводит к тайм-аутам и т. Д. При попытке подключения по протоколам с поддержкой SSH / TLS. Есть ли способ проверить, какие процессы поглощают всю энтропию?

Редактировать:

Что пробовал:

Что в итоге сработало:

С участием lsof в качестве источника диагностической утилиты, будет ли установка чего-либо с помощью аудита работать? Невозможно исчерпать пул энтропии без открытия /dev/random, поэтому если вы проведете аудит обработки открытия /dev/random, виновник (или, по крайней мере, набор кандидатов для дальнейшего экзамена) должен довольно быстро выбыть.

Обычно для общедоступного сервера, нуждающегося в «достаточной» энтропии, я бы предложил что-то вроде энтропийного ключа, аппаратного устройства (USB), добавляющего случайные биты в пул энтропии Linux. Но вы не разговариваете с внешним миром.

У виртуальных машин может быть проблема с отсутствием внешней случайности.

Ваше замечание «резервный контроллер домена» действительно добавляет возможное использование энтропии: домены 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 может помочь.

Если нет лучшего решения, вы можете использовать большие пушки и глобально обернуть системный вызов open () для регистрации процессов, которые пытаются открыть / etc / [u] random.

Просто (tm) напишите библиотеку, определяющую open (), которая ведет журналы, а затем вызывает исходную libc open ().

Подсказка для этого: мужчина ld.so и /etc/ld.so.preload.

У нас было нечто подобное: https://stackoverflow.com/questions/9614184/how-to-trace-per-file-io-operations-in-linux

CAVEAT: Сам никогда не делал этого. Может сломать вашу систему, так как каждый open () будет проходить через вашу библиотеку. Возможно, все в порядке в среде отладки или если вы R.M. Столмен.