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

Материал из Wiki МИАЦ ВО
Версия от 09:43, 3 ноября 2011; Misha (обсуждение | вклад) (Установка unrar v3.91)
Перейти к навигации Перейти к поиску

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

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

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

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

Инсталяция

Установка UNRAR

Внимание: Эту программу нужно выполнять только при отсутствии расширения php-rar

Установка unrar из пакетов

Для Manriva

# urpmi unrar

Путь до архиватора - /usr/bin/unrar.
После установки путь можно посмотреть

$ whereis unrar

Установка GNU unrar

1. Идем на сайт https://gna.org/projects/unrar/ далее в Download и выкачиваем архив unrar-0.0.1.tar.gz.
2. Распаковываем его и устанавливаем.

cp  unrar-0.0.1.tar.gz /usr/local/src
cd /usr/local/src
tar -xzf  unrar-0.0.1.tar.gz
cd unrar-0.0.1
./configure
make
make install

После этого архиватор unrar будет в каталоге /usr/local/bin

Установка php расширений

  1. Устанавливаем пакеты php-cli.*.rpm и php-rar*.rpm. Для версии 1.9в и выше нужен php-curl*.rpm.

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

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

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

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