Скрипт по обновлению антивирусных баз NOD32 под Linux (PHP)
Вот портировал скрипты по обновлению антивирусных баз NOD32 V2* и V3* в PHP.
Содержание
Версии скрипта
Буду тут выкладывать описание версий с датами для более удобного отслеживания за изменениями
- Версия 2.6 от 20.03.2012
- Добавлена закачка модуля PAGASUS.
- Версия 2.5 от 19.01.2012
- Может снимать ограничение версии для V5
- Устранена ошибка при ошибочном файле /arc/server
- Версия 2.4 от 27.12.2011
- Добавлен путь, как в nod32View для каждой версии базы, например, для версии V5 - eset_upd/v5.
- Убрана опция all_in_one из настроек.
- Устранено несколько мелких ошибок
- Версия 2.3 от 14.11.2011
- Исправлена ошибка, при закачке файлов V5 со свободных серверов, файлы которых собраны с помощью Nod32viewer.
- Исправлена ошибка, при закачке c помощью wget с пустым логином.
- Введена проверка на длину файлов при закачке и обновлении, при этом можно указать в настройках на сколько файлы могут максимально отличаться.
- Версия 2.2 от 7.11.2011
- Добавил возможность выбора из 4 вариантов разархиватора (7zip, unrar из пакетов, free gnu unrar и rar c http://www.rarlab.com/)
- Версия 2.1 от 3.11.2011
- Заменил архиватор unrar на 7zip, тк он есть во всех дистрибутивах и работает с архивами rar.
- Убрал функцию parse_ini_file(), тк 3 параметр появился только в версии php 5.3, а без него нормально не работает. А у многих стоят более старые версии.
- Версия 2.0 от 2.11.2011
- Удалена загрузка файлов через php fopen(). Из-за того, что не может работать через авторизованные прокси.
- Настроена работа через php curl и wget.
- Версия 2.0b от 20.10.2011
- Добавлена загрузка баз V5
- Доработка мелких замечаний.
- Версия 1.22 от 4.05.2011
- Исправлена ошибка, если в update.ver некоторые параметры передаются в кавычках.
- Версия 1.21 от 12.08.2010
- Добавлена закачка файлов нового модуля обновлений ESET "File system protection Module".
- Версия 1.20 от 21.07.2010
- Исправлена ошибка вывода в консоль, если файл update.ver не скачен (На нормальную работу не влияет).
- Версия 1.19 от 25.06.2010
- Возвращена возможность закачки с помощью wget.
- Теперь можно указать в файле настроек - какие компоненты качать (пока русские и английские).
- Версия 1.18 от 6.04.2010
- Исправлена ошибка по выкачиванию программных компонентов.
- Теперь можно указать в файле настроек - качать или нет программные компоненты.
- Если у Вас пароль от EAV, а не от ESS, то указав это в файле настроек, больше не будет возникать ошибки выкачивания файлов.
- Версия 1.17 от 11.03.2010
- Добавил по просьбе Boevik с форума возможность работать и с unrar v3.91 с сайта http://rarlab.com/download.htm.
- Версия 1.16 от 2.02.2010
- Добавил по просьбе Angpeu с форума в update.ver переменную all_in_one для случая, если для доступа к файлам обновлений нужен пароль, а файл update.ver и файлы обновлений находятся в одной директории.
- Версия 1.15 от 25.01.2010
- Убрал сравнение выкаченного файла и данных из update.ver по размеру.
- Данные о размера файла теперь берутся не из секции update.ver, а из реального размера файла.
- Версия 1.14b от 5.11.2009
- Добавлены новые секции для SELFDEFENSE64 и необязательные секции для компонентов для V3 и V4. Те если компоненты будут лежать в директории с обновлениями, а в update.ver нет на них ссылок, то они стираться не будут и будут добавлены в update.ver.
- Устранена ошибка при скачивании обновлений со свободных зеркал, где update.ver лежит вместе с файлами обновлений.
- Добавлена проверка на наличие модулей php-rar или unrar.
- Версия 1.13 от 25.10.2009
- Добавлены новая секция для закачки MAILSERVER.
- Версия 1.12d от 25.09.2009
- Попробовал исправить большинство ошибок при error_reporting = E_ALL в php.ini.
- Добавлены новые секции для закачки
- Версия 1.11 от 10.09.2009
- Исправлено несколько синтаксических ошибок.
- Исправлена ошибка по коду возврата GNU архиватора unrar.
- Не работал цикл по обновлению с другого сервера, если на первом прошла ошибка.
- Версия 1.10b от 13.07.2009
- Изменен архиватор rar на GNU версию unrar путь до архиватора вынесен в setup.php.
- При изменении версии или ошибке, письмо приходит только одно на обе версии базы.
- Версия 1.9b от 11.07.2009
- Закачка через wget изменена на php-cURL.
- Добавлен тихий режим, без отправки сообщений в консоль, если критических ошибок нет
- Если сервер указан, то пытается обновится только с него. Если не указан сервер (это касается только тех кто обновляется с официальных серверов), то список серверов берется из update.ver и скрипт пробует обновить базы с каждого сервера из этого списка, пока не получится. А то иногда бывает проблема с серверами (похоже из-за их перегрузки) - то их видно, то нет.
- Версия 1.8 от 1.07.2009
- Добавлена возможность закачивать файлы через прокси сервер с аутентификацией и без нее.
- Добавлена возможность отсылки дополнительного письма об обновлении баз на указанный п/я, в случае ошибки или удачного обновления с изменением версии.
- Версия 1.7 от 24.06.2009
- Имя пользователя, от которого работает WEB сервер вынесено в setup.php
- В начале скрипта umask меняется на 0022, а после выполнения возвращается на ту, что была до его выполнения.
- Версия 1.6 от 19.06.2009
- Если происходит ошибка при выкачивании файла, то обновление сразу завершается и восстанавливает базу данной версии Нода, которая была до этого. Раньше скрипт пытался выкачивать остальные файлы, а потом все равно происходило восстановление.
- Версия 1.5 от 16.03.2009 Теперь можно обновлять базы для NOD32 V4.
- Добавлены секции, которых не было в вервии V3 [SYSTEMSTATUS0], [SYSTEMSTATUS1],[SYSTEMSTATUS2],[SYSTEMSTATUS640],[SYSTEMSTATUS641],[SYSTEMSTATUS642],[SELFDEFENSE0],[SELFDEFENSE1],[SELFDEFENSE2],[SELFDEFENSE640],[SELFDEFENSE641],[SELFDEFENSE642]. Обновляется только файл секций section.php.
- Версия 1.4 от 21.01.2009
- Исправлена ошибка записи имени файла в создаваемой update.ver, если этого файла еще не было.
- Версия 1.3 от 16.01.2009
- Если при обновлении NOD32 V2 происходила ошибка, то она не сбрасывалась и для NOD32 V3
- Не правильно формировался блок [data0001] в файле update.ver в NOD32 V3, если в этой секции встречался знак =.
- Убрано отображение некоторых ненужных сообщений.
- Версия 1.2 от 2.12.2008
- Исправлено удаление файла, если он уже не нужен
- Версия 1.1 от 18.11.2008
- Первая версия.
Что умеет скрипт.
Умеет все тоже, что и скрипт на bash, только работает быстрее, один скрипт может обновлять обе версии и можно использовать на любой платформе (сам не пробовал) .
- Обновляет базы с официальных и бесплатных серверов NOD32 (для официальных серверов нужно задать имя и пароль для обновления). Причем, при обновлении с бесплатных серверов скрипт пробует обновится со всех серверов, указанных в update.ver и прекращает работу при первом удачном обновлении.
- Может работать через прокси сервер с аутентификацией и без нее.
- Может отправлять сообщение на указанный п/я с информацией об ошибке или при удачном обновлении с изменением версии базы.
- Обновляет сразу базы для V2, V3 и с версии 2.0b - V5, но может и отдельно.
- Если на сервере названия файлов не совпадают с локальными - не качает, а переименовывает файлы.
- Сам создает файл update.ver. Те при обновлении с зеркал обновляются только компоненты с более новыми версиями.
- Автоматически создает папки, нужные для работы программы, в том числе и для Web сервера.
- Создает папку на веб сервере с файлами обновления.
- При ошибке обновления восстанавливает базу в том виде, которая была до обновления.
Скрипт автоматически создает папки для временного хранения копий баз /var/lib/nod32/mirror_V2, /var/lib/nod32/mirror_V3 /var/lib/nod32/mirror_V5 и загружает туда файлы антивирусных баз. Если обновление прошло успешно, то переписывает базы в WEB директорию, а если произошла ошибка, то наоборот, восстанавливает базы, переписывая их из WEB директории в папку временного хранения.
Спасибо Kode - использовал его функции. Так как не очень большой спец в PHP, то прошу не пинать, а если можно то помочь доработать.
Из чего состоит
- update.php - Сам скрипт
- function.php - Файл функций
- section.php - Файл описания секций
- setup.php - Файл установок
Инсталяция
Установка пакетов
- Устанавливаем пакеты php-cli.*.rpm, php-rar*.rpm, php-curl*.rpm, unrar*.rpm и 7zip*.rpm, если не установлен.
Установка скрипта
- Выкачиваем архив nod_upd_php_v2.6.tar.bz2) и распаковываем в любой каталог, например, /etc/upd_prog/.
- Редактируем файл setup.php для каждого варианта антивируса - Устанавливаем:
- Измените, если нужно, путь до папки, где будут храниться временные файлы работы скрипта, например (define("DEFAULT_SAVE_PATH","/var/lib/nod32");).
- Отредактируйте, если нужно, имя пользователя от которого работает WEB сервер, например, define("HTTP_USER", "apache");.
- Если не установлен модуль php-rar:
- Разкоментируем нужную строку с переменной $unrar, где указан нужный Вам разархиватор.
- Разкоментируем строку с переменной $unrar[path], где указываем путь до вашего архиватора bash (можно узнать, запустив из консоли, например: whereis 7z).
- Если нужна закачка с помощью wget, то разкоментируем строку ($wget='/usr/bin/wget';) и указываем путь до wget в Вашей системе (можно узнать по команде из консоли: whereis wget). Если она закоментирована, будет использоваться php-curl.
- Если нужна, дополнительная отправка почты, то разкоментируйте строку с переменной $user_mail и укажите там нужный email. (Но при этом дб настроен и запущен почтовый сервер (postfix, sendmail или другой).)
- Если Вы хотите или должны использовать HTTP-Proxy, разкоментируйте строку с переменной $proxy и укажите свои параметры Прокси сервера, например, $proxy = 'http://login:passwd@www.rrr.ru:8080';.
- Если хотите, то можете указать, на сколько в байтах могут отличаться размер реальных файлов и размер, указанный в update.ver ($diff=1). Обычно эти размеры не отличаются более чем на 1 байт, а в 99% равны. По умолчанию принято $diff=1.
- Установите $quit=1 - не отображать сообщения на консоли, кроме сообщений об ошибках и $quit=0 - отображать сообщения на консоли.
- Имя пользователя, для всех серверов прописываем, например, $userV2='EAV-5075555'; или '$userV2=""; - для бесплатных серверов
- Пароль, например, $pswV2='kd3m4567'; или $pswV2=; - для бесплатных серверов
- Для каждой версии сервера настраиваем:
- Адрес сервера, например ('host'=>'http://89.202.157.139/',). Если он не указан, то список серверов берется из update.ver (для официальных серверов), если указан, то закачка происходит только с него. Адрес можно указать двумя способами, например, для версии V5 - http://host.ru/nod325/ и http://host.ru/nod325/eset_upd/v5/.
- Web каталог для каждой версии баз, например, 'www'=>'/var/www/nod32/',.
- Программные компоненты, тут комментируем строки с ненужными программными компонентами, то они выкачиваться не будут, а если были до этого выкачаны, то будут удалены. Я, например, для V2 оставил все программные компоненты, а для V3 - нет, тк размер файлов компонентов для V3 более 80Mb, а я постоянно переписываю базы на флешку и мне эти 80 Mb не нужны. Те решайте сами - нужны они или нет. К тому же на Офе лежат старые версии компонентов.
- Версия пароля для обновлений. Если у Вас логин и пароль для EAV - укажите 'ess'=>0, если от ESS, то 'ess'=>1.
- Для V5 можно указать снять ограничение версии для обновления компонентов. Но я бы не рекомендовал это делать, пока нельзя записать альтернативные сервера, без изменения реестра и перезагрузки, тк после обновления придется снова менять реестр.
- Пробуем из под root запустить файл update.php.
- Теперь в crontab прописываем запуск скрипта
# Обновление баз NOD32* 00 09,15 * * * root /etc/upd_prog/php/update.php
и наслаждаемся автоматическим обновлением 2 раза в сутки