Вирусы на Linux. Много запущенных процессов perl, нагружающих процессор.

Опубликовано admin - чт, 04/25/2013 - 06:12

Вирусы на Linux в нашей компании достаточно редкое явление, но иногда приходят клиенты с медленно работающими сайтами, и в процессе обнаружения узких мест обнаруживается, что сервер себя странно ведет. Сегодня расскажу об одном таком случае.
К нам обратился клиент с медленно работающим сайтом, я подключился по ssh и стал смотреть на что же тратятся ресурсы сервера. Запустил top и увидел следующую картину:

1125 wwwuser 20 0 4708 2472 1032 R 32 0.1 8133:04 perl 
1213 wwwuser 20 0 4708 2548 1100 R 32 0.1 18558:18 perl 
3912 wwwuser 20 0 4708 2532 1100 R 32 0.1 17291:47 perl 
21038 wwwuser 20 0 4708 2384 956 R 29 0.1 3323:27 perl 
1541 wwwuser 20 0 4712 2384 956 R 28 0.1 10712:59 perl 
21029 wwwuser 20 0 4708 2544 1092 R 28 0.1 5689:23 perl 
22862 wwwuser 20 0 4712 2548 1092 R 28 0.1 6588:16 perl 
1196 wwwuser 20 0 4708 2548 1100 R 28 0.1 6191:47 perl 
1546 wwwuser 20 0 4712 2384 956 R 27 0.1 16920:10 perl 
1186 wwwuser 20 0 4708 2540 1100 R 27 0.1 16774:50 perl 
3903 wwwuser 20 0 4708 2476 1036 R 27 0.1 18234:33 perl 
9886 wwwuser 20 0 4712 2480 1032 R 27 0.1 1751:53 perl 

То есть процессор нагружали только процессы perl - и это при том что сервер работает на связке nginx + apache, которые обслуживают Drupal сайт (соответсвенно на php).
Решил посмотреть на вывод

ps aux | grep perl

Не тут-то было, процессов perl вообще не было.

Далее посмотреть вывод команды ps aux

wwwuser  18979  0.0  0.0   4844   228 ?        S    Apr14   0:00 /usr/local/apache/bin/httpd -DSSL
wwwuser  18983  0.0  0.3   4844  1928 ?        S    Apr14  10:28 /usr/local/apache/bin/httpd -DSSL
wwwuser  18990  0.0  0.0   4844   228 ?        S    Apr14   0:00 /usr/local/apache/bin/httpd -DSSL
wwwuser  18994  0.0  0.1   4844   748 ?        S    Apr14   1:55 /usr/local/apache/bin/httpd -DSSL
wwwuser  18997  0.0  0.0   4844   228 ?        S    Apr14   0:00 /usr/local/apache/bin/httpd -DSSL
wwwuser  19001  0.0  0.3   4844  1804 ?        S    Apr14  10:28 /usr/local/apache/bin/httpd -DSSL
wwwuser  19224  0.0  0.0   4844   228 ?        S    Apr14   0:00 /usr/local/apache/bin/httpd -DSSL
wwwuser  19228  0.0  0.3   4844  1824 ?        S    Apr14  10:26 /usr/local/apache/bin/httpd -DSSL
wwwuser  20667  0.0  0.0   4844   228 ?        S    Apr14   0:00 /usr/local/apache/bin/httpd -DSSL
wwwuser  20671  0.0  0.3   4844  1804 ?        S    Apr14  10:16 /usr/local/apache/bin/httpd -DSSL

Помимо большинства нормальных процессов в выводе присутсвует много процессов, запущенных командой: /usr/local/apache/bin/httpd
При этом файла /usr/local/apache/bin/httpd не существовало.

Далее выполняем команду lsof -p 1125 (просмотр используемых файлов процессом 1125), и получаем следующий вывод:

perl    1125 wwwuser  cwd    DIR     8,5    36864   69410 /tmp
perl    1125 wwwuser  rtd    DIR     8,5     4096       2 /
perl    1125 wwwuser  txt    REG     8,5  1224372   88910 /usr/bin/perl
perl    1125 wwwuser  mem    REG     8,5    17836   99536 /usr/lib/perl/5.10.1/auto/IO/IO.so
perl    1125 wwwuser  mem    REG     8,5  1421892  203999 /lib/libc-2.12.1.so
perl    1125 wwwuser  mem    REG     8,5   121578  204013 /lib/libpthread-2.12.1.so
perl    1125 wwwuser  mem    REG     8,5     9736  204002 /lib/libdl-2.12.1.so
perl    1125 wwwuser  mem    REG     8,5    21964   99538 /usr/lib/perl/5.10.1/auto/Socket/Socket.so
perl    1125 wwwuser  mem    REG     8,5   118084  203996 /lib/ld-2.12.1.so
perl    1125 wwwuser  mem    REG     8,5   149392  204003 /lib/libm-2.12.1.so
perl    1125 wwwuser  mem    REG     8,5    38360  204001 /lib/libcrypt-2.12.1.so
perl    1125 wwwuser    0r   CHR     1,3      0t0    4299 /dev/null
perl    1125 wwwuser    1w  FIFO     0,8      0t0 1688813 pipe
perl    1125 wwwuser    2w  FIFO     0,8      0t0 1688813 pipe
perl    1125 wwwuser    3w  FIFO     0,8      0t0 1688813 pipe

Видим запуск /usb/bin/perl.

Дальше наши действия простые

rm /usr/bin/perl 
killall -9 perl

После этого проблема исчезла, но подозреваю, что это еще не все.

P.S. Если кто сталкивался с такой проблемой, напишите, пожалуйста ваше решение в комментариях.

UPD. Спасибо, Сергею, что указал на неполноту статьи. Конечно, просто так сервер оставить нельзя, потому что без /usr/bin/perl некоторые системные скрипты не смогут отрабатывать.

После удаления я сделал ссылку /usr/bin/perl на файл /usr/bin/perl5.10.1

ln -s /usr/bin/perl5.10.1 /usr/bin/perl

Теперь все скрипты perl будут корректно выполнятся.

Теги

Добавить комментарий

Filtered HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd>
  • Строки и абзацы переносятся автоматически.
  • Web page addresses and email addresses turn into links automatically.