Скрипт по обновлению антивирусных баз NOD32 под Linux (PHP)

Материал из Wiki МИАЦ ВО
Версия от 08:08, 20 января 2012; Misha (обсуждение | вклад) (Установка скрипта)
Перейти к навигации Перейти к поиску

Вот портировал скрипты по обновлению антивирусных баз NOD32 V2* и V3* в PHP.

Версии скрипта

Буду тут выкладывать описание версий с датами для более удобного отслеживания за изменениями

  1. Версия 2.5 от 19.01.2012
    1. Может снимать ограничение версии для V5
    2. Устранена ошибка при ошибочном файле /arc/server
  2. Версия 2.4 от 27.12.2011
    1. Добавлен путь, как в nod32View для каждой версии базы, например, для версии V5 - eset_upd/v5.
    2. Убрана опция all_in_one из настроек.
    3. Устранено несколько мелких ошибок
  3. Версия 2.3 от 14.11.2011
    1. Исправлена ошибка, при закачке файлов V5 со свободных серверов, файлы которых собраны с помощью Nod32viewer.
    2. Исправлена ошибка, при закачке c помощью wget с пустым логином.
    3. Введена проверка на длину файлов при закачке и обновлении, при этом можно указать в настройках на сколько файлы могут максимально отличаться.
  4. Версия 2.2 от 7.11.2011
    1. Добавил возможность выбора из 4 вариантов разархиватора (7zip, unrar из пакетов, free gnu unrar и rar c http://www.rarlab.com/)
  5. Версия 2.1 от 3.11.2011
    1. Заменил архиватор unrar на 7zip, тк он есть во всех дистрибутивах и работает с архивами rar.
    2. Убрал функцию parse_ini_file(), тк 3 параметр появился только в версии php 5.3, а без него нормально не работает. А у многих стоят более старые версии.
  6. Версия 2.0 от 2.11.2011
    1. Удалена загрузка файлов через php fopen(). Из-за того, что не может работать через авторизованные прокси.
    2. Настроена работа через php curl и wget.
  7. Версия 2.0b от 20.10.2011
    1. Добавлена загрузка баз V5
    2. Доработка мелких замечаний.
  8. Версия 1.22 от 4.05.2011
    1. Исправлена ошибка, если в update.ver некоторые параметры передаются в кавычках.
  9. Версия 1.21 от 12.08.2010
    1. Добавлена закачка файлов нового модуля обновлений ESET "File system protection Module".
  10. Версия 1.20 от 21.07.2010
    1. Исправлена ошибка вывода в консоль, если файл update.ver не скачен (На нормальную работу не влияет).
  11. Версия 1.19 от 25.06.2010
    1. Возвращена возможность закачки с помощью wget.
    2. Теперь можно указать в файле настроек - какие компоненты качать (пока русские и английские).
  12. Версия 1.18 от 6.04.2010
    1. Исправлена ошибка по выкачиванию программных компонентов.
    2. Теперь можно указать в файле настроек - качать или нет программные компоненты.
    3. Если у Вас пароль от EAV, а не от ESS, то указав это в файле настроек, больше не будет возникать ошибки выкачивания файлов.
  13. Версия 1.17 от 11.03.2010
    1. Добавил по просьбе Boevik с форума возможность работать и с unrar v3.91 с сайта http://rarlab.com/download.htm.
  14. Версия 1.16 от 2.02.2010
    1. Добавил по просьбе Angpeu с форума в update.ver переменную all_in_one для случая, если для доступа к файлам обновлений нужен пароль, а файл update.ver и файлы обновлений находятся в одной директории.
  15. Версия 1.15 от 25.01.2010
    1. Убрал сравнение выкаченного файла и данных из update.ver по размеру.
    2. Данные о размера файла теперь берутся не из секции update.ver, а из реального размера файла.
  16. Версия 1.14b от 5.11.2009
    1. Добавлены новые секции для SELFDEFENSE64 и необязательные секции для компонентов для V3 и V4. Те если компоненты будут лежать в директории с обновлениями, а в update.ver нет на них ссылок, то они стираться не будут и будут добавлены в update.ver.
    2. Устранена ошибка при скачивании обновлений со свободных зеркал, где update.ver лежит вместе с файлами обновлений.
    3. Добавлена проверка на наличие модулей php-rar или unrar.
  17. Версия 1.13 от 25.10.2009
    1. Добавлены новая секция для закачки MAILSERVER.
  18. Версия 1.12d от 25.09.2009
    1. Попробовал исправить большинство ошибок при error_reporting = E_ALL в php.ini.
    2. Добавлены новые секции для закачки
  19. Версия 1.11 от 10.09.2009
    1. Исправлено несколько синтаксических ошибок.
    2. Исправлена ошибка по коду возврата GNU архиватора unrar.
    3. Не работал цикл по обновлению с другого сервера, если на первом прошла ошибка.
  20. Версия 1.10b от 13.07.2009
    1. Изменен архиватор rar на GNU версию unrar путь до архиватора вынесен в setup.php.
    2. При изменении версии или ошибке, письмо приходит только одно на обе версии базы.
  21. Версия 1.9b от 11.07.2009
    1. Закачка через wget изменена на php-cURL.
    2. Добавлен тихий режим, без отправки сообщений в консоль, если критических ошибок нет
    3. Если сервер указан, то пытается обновится только с него. Если не указан сервер (это касается только тех кто обновляется с официальных серверов), то список серверов берется из update.ver и скрипт пробует обновить базы с каждого сервера из этого списка, пока не получится. А то иногда бывает проблема с серверами (похоже из-за их перегрузки) - то их видно, то нет.
  22. Версия 1.8 от 1.07.2009
    1. Добавлена возможность закачивать файлы через прокси сервер с аутентификацией и без нее.
    2. Добавлена возможность отсылки дополнительного письма об обновлении баз на указанный п/я, в случае ошибки или удачного обновления с изменением версии.
  23. Версия 1.7 от 24.06.2009
    1. Имя пользователя, от которого работает WEB сервер вынесено в setup.php
    2. В начале скрипта umask меняется на 0022, а после выполнения возвращается на ту, что была до его выполнения.
  24. Версия 1.6 от 19.06.2009
    1. Если происходит ошибка при выкачивании файла, то обновление сразу завершается и восстанавливает базу данной версии Нода, которая была до этого. Раньше скрипт пытался выкачивать остальные файлы, а потом все равно происходило восстановление.
  25. Версия 1.5 от 16.03.2009 Теперь можно обновлять базы для NOD32 V4.
    1. Добавлены секции, которых не было в вервии V3 [SYSTEMSTATUS0], [SYSTEMSTATUS1],[SYSTEMSTATUS2],[SYSTEMSTATUS640],[SYSTEMSTATUS641],[SYSTEMSTATUS642],[SELFDEFENSE0],[SELFDEFENSE1],[SELFDEFENSE2],[SELFDEFENSE640],[SELFDEFENSE641],[SELFDEFENSE642]. Обновляется только файл секций section.php.
  26. Версия 1.4 от 21.01.2009
    1. Исправлена ошибка записи имени файла в создаваемой update.ver, если этого файла еще не было.
  27. Версия 1.3 от 16.01.2009
    1. Если при обновлении NOD32 V2 происходила ошибка, то она не сбрасывалась и для NOD32 V3
    2. Не правильно формировался блок [data0001] в файле update.ver в NOD32 V3, если в этой секции встречался знак =.
    3. Убрано отображение некоторых ненужных сообщений.
  28. Версия 1.2 от 2.12.2008
    1. Исправлено удаление файла, если он уже не нужен
  29. Версия 1.1 от 18.11.2008
    1. Первая версия.

Что умеет скрипт.

Умеет все тоже, что и скрипт на bash, только работает быстрее, один скрипт может обновлять обе версии и можно использовать на любой платформе (сам не пробовал) .

  1. Обновляет базы с официальных и бесплатных серверов NOD32 (для официальных серверов нужно задать имя и пароль для обновления). Причем, при обновлении с бесплатных серверов скрипт пробует обновится со всех серверов, указанных в update.ver и прекращает работу при первом удачном обновлении.
  2. Может работать через прокси сервер с аутентификацией и без нее.
  3. Может отправлять сообщение на указанный п/я с информацией об ошибке или при удачном обновлении с изменением версии базы.
  4. Обновляет сразу базы для V2, V3 и с версии 2.0b - V5, но может и отдельно.
  5. Если на сервере названия файлов не совпадают с локальными - не качает, а переименовывает файлы.
  6. Сам создает файл update.ver. Те при обновлении с зеркал обновляются только компоненты с более новыми версиями.
  7. Автоматически создает папки, нужные для работы программы, в том числе и для Web сервера.
  8. Создает папку на веб сервере с файлами обновления.
  9. При ошибке обновления восстанавливает базу в том виде, которая была до обновления.

Скрипт автоматически создает папки для временного хранения копий баз /var/lib/nod32/mirror_V2, /var/lib/nod32/mirror_V3 /var/lib/nod32/mirror_V5 и загружает туда файлы антивирусных баз. Если обновление прошло успешно, то переписывает базы в WEB директорию, а если произошла ошибка, то наоборот, восстанавливает базы, переписывая их из WEB директории в папку временного хранения.

Спасибо Kode - использовал его функции. Так как не очень большой спец в PHP, то прошу не пинать, а если можно то помочь доработать.

Из чего состоит

  1. update.php - Сам скрипт
  2. function.php - Файл функций
  3. section.php - Файл описания секций
  4. setup.php - Файл установок

Инсталяция

Установка пакетов

  1. Устанавливаем пакеты php-cli.*.rpm, php-rar*.rpm, php-curl*.rpm, unrar*.rpm и 7zip*.rpm, если не установлен.

Установка скрипта

  1. Выкачиваем архив nod_upd_php_v2.5.tar.bz2) и распаковываем в любой каталог, например, /etc/upd_prog/.
  2. Редактируем файл setup.php для каждого варианта антивируса - Устанавливаем:
    1. Измените, если нужно, путь до папки, где будут храниться временные файлы работы скрипта, например (define("DEFAULT_SAVE_PATH","/var/lib/nod32");).
    2. Отредактируйте, если нужно, имя пользователя от которого работает WEB сервер, например, define("HTTP_USER", "apache");.
    3. Если не установлен модуль php-rar:
      1. Разкоментируем нужную строку с переменной $unrar, где указан нужный Вам разархиватор.
      2. Разкоментируем строку с переменной $unrar[path], где указываем путь до вашего архиватора bash (можно узнать, запустив из консоли, например: whereis 7z).
    4. Если нужна закачка с помощью wget, то разкоментируем строку ($wget='/usr/bin/wget';) и указываем путь до wget в Вашей системе (можно узнать по команде из консоли: whereis wget). Если она закоментирована, будет использоваться php-curl.
    5. Если нужна, дополнительная отправка почты, то разкоментируйте строку с переменной $user_mail и укажите там нужный email. (Но при этом дб настроен и запущен почтовый сервер (postfix, sendmail или другой).)
    6. Если Вы хотите или должны использовать HTTP-Proxy, разкоментируйте строку с переменной $proxy и укажите свои параметры Прокси сервера, например, $proxy = 'http://login:passwd@www.rrr.ru:8080';.
    7. Если хотите, то можете указать, на сколько в байтах могут отличаться размер реальных файлов и размер, указанный в update.ver ($diff=1). Обычно эти размеры не отличаются более чем на 1 байт, а в 99% равны. По умолчанию принято $diff=1.
    8. Установите $quit=1 - не отображать сообщения на консоли, кроме сообщений об ошибках и $quit=0 - отображать сообщения на консоли.
    9. Имя пользователя, для всех серверов прописываем, например, $userV2='EAV-5075555'; или '$userV2=""; - для бесплатных серверов
    10. Пароль, например, $pswV2='kd3m4567'; или $pswV2=; - для бесплатных серверов
    11. Для каждой версии сервера настраиваем:
      1. Адрес сервера, например ('host'=>'http://89.202.157.139/',). Если он не указан, то список серверов берется из update.ver (для официальных серверов), если указан, то закачка происходит только с него. Адрес можно указать двумя способами, например, для версии V5 - http://host.ru/nod325/ и http://host.ru/nod325/eset_upd/v5/.
      2. Web каталог для каждой версии баз, например, 'www'=>'/var/www/nod32/',.
      3. Программные компоненты, тут комментируем строки с ненужными программными компонентами, то они выкачиваться не будут, а если были до этого выкачаны, то будут удалены. Я, например, для V2 оставил все программные компоненты, а для V3 - нет, тк размер файлов компонентов для V3 более 80Mb, а я постоянно переписываю базы на флешку и мне эти 80 Mb не нужны. Те решайте сами - нужны они или нет. К тому же на Офе лежат старые версии компонентов.
      4. Версия пароля для обновлений. Если у Вас логин и пароль для EAV - укажите 'ess'=>0, если от ESS, то 'ess'=>1.
      5. Для V5 можно указать снять ограничение версии для обновления компонентов. Но я бы не рекомендовал это делать, пока нельзя записать альтернативные сервера, без изменения реестра и перезагрузки, тк после обновления придется снова менять реестр.
  3. Пробуем из под root запустить файл update.php.
  4. Теперь в crontab прописываем запуск скрипта
# Обновление баз NOD32*
00 09,15 * * * root /etc/upd_prog/php/update.php

и наслаждаемся автоматическим обновлением 2 раза в сутки

Настройка сервера Apache для доступа к базам по паролю