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

Сервер Ubuntu 11.04 зависает из-за чрезмерного потребления ЦП в режиме ландшафта-sysinfo

Я запускаю что-то вроде простого сервера (на основе Ubuntu 11.04) на микроэкземпляре Amazon EC2, цель которого просто координировать деятельность нескольких веб-серверов. Машина работала нормально в течение нескольких недель, но теперь часто зависает, а его ЦП был установлен на 100%.

Я вошел в систему через SSH и запустил top, который показал, что landscape-sysinfo злоумышленник использовал все системные ресурсы. А pstree показал, где он был расположен:

init─┬─atd
     ├─cron
     ├─dhclient3
     ├─dovecot─┬─2*[dovecot-auth]
     │         ├─3*[imap-login]
     │         └─3*[pop3-login]
     ├─6*[getty]
     ├─master─┬─pickup
     │        └─qmgr
     ├─mountall
     ├─mysqld───11*[{mysqld}]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd─┬─sshd───sshd───bash
     │      ├─sshd───sshd───bash───top
     │      ├─sshd───sshd───bash───pstree
     │      └─sshd───sh───run-parts───50-landscape-sy───landscape-sys+
     ├─udevd───2*[udevd]
     ├─upstart-socket-
     ├─upstart-udev-br
     └─vsftpd

Процесс нарушения указан здесь как последний дочерний элемент sshd. Если я убью вручную landscape-sysinfo, машина возвращается в нормальное состояние - до тех пор, пока процесс самопроизвольно не возрождается, обычно через несколько мгновений. (Я могу поручиться за другого sshd процессы в приведенном выше дереве. Они были законными.)

Я не имею понятия почему landscape-sysinfo появляется случайным образом. Я вдвойне не понимаю, почему это дитя sshd.

Я явно не в восторге от того, что на моей машине работают процессы SSH, которые я не могу учесть. Изначально я опасался взлома / трояна / бэкдора, поэтому я запустил chkrootkit и rkhunter, но они оба пришли чистыми.

Кто-нибудь знает, что может вызвать разгул этого процесса? Есть мысли о том, как остановить его возрождение?

Некоторое время назад я выяснил настоящую причину проблемы и решил, что должен задокументировать ее здесь для других, у которых могут быть похожие проблемы. Основная причина оказалась сложнее и сложнее, чем я ожидал.

Коротко, run-parts все время работал нормально. Его выход из строя был всего лишь симптомом другой проблемы. Цепочка отказов выглядела примерно так:

1) На совершенно другой машине, lsyncd (утилита для синхронизации файлов, основанная на rsync) по причинам, не зависящим от нас. Однако нас беспокоит то, что lsyncd пытался синхронизировать файлы с этим микроэкземпляром (который проявил проблемы) по SSH.

2) Потому что lsyncd делал десятки одновременных подключений через SSH, каждое из которых, казалось, приветствовалось баннером входа в SSH landscape-sysinfo Ubuntu предоставляет по умолчанию. Это объясняет, что landscape-sysinfo есть и почему он является потомком SSH. Оказалось, что run-parts был виноват, но на самом деле проблема заключалась в том, что на машину засыпали соединения SSH.

3) Проблема усугублялась тем, что это микро-экземпляр на EC2, и С тех пор я обнаружил, что Amazon жестко ограничивает микро-экземпляры, потребление ЦП которых постоянно превышает определенный порог. (Подробное объяснение деталей см. Бродяга Грега. Большое спасибо Грегу за эту статью!)

Таким образом, машина работала медленно в течение нескольких секунд, пока ее забрасывали соединениями SSH, а затем стала непригодно медленно после того, как сработало дросселирование.

Тайна раскрыта!

Это регулярное задание cron, которое собирает данные о производительности.

Смотреть Вот для (легких) инструкций по удалению. Чтобы просто удалить его полностью, если вы не заботитесь о сборе данных, либо удалите пакет (если он вам позволяет), либо просто найдите для него запись crontab и закомментируйте ее.