Автоматическое обновление Adobe Flash Player & Java RE в домене Windows/AD
Привет!
Выложил на гитхаб VBS скрипт, который уже больше года поддерживает актуальность установленных версий Java&Flash на компьютерах пользователей в домене Windows( Active Directory), с минимальными усилиями со стороны администратора и минимальными неудобствами для пользователей.
Почему пришлось изобретать велосипед и как пользоваться этим скриптом см. далее
intro
Не секрет, что одним из популярнейших направлений атак на компьютеры сегодня являются уязвимости Flash & Java, которые эксплуатируются при обычном посещении злонамеренных или взломанных сайтов (пример mysql.com в сентябре 2011 г)
И хотя компании Adobe и Oracle уже внедрили механизмы авто-обновления в свои продукты, существенным их недостатком является сложность в настройке и эксплуатации. Чтобы использовать механизм автоматического обновления от Adobe придётся просмотреть 50-ти страничный Administration Guide и выполнить массу действий, а для установки обновления от Sun необходимо чтобы пользователь обладал правами локального администратора, что часто встречается у домашних пользователей и никогда в доменной сети хорошего администратора.
Вопрос на serverfault.com “How do you manage Java in your Windows/Active Directory environment?” не получил чёткого ответа, лишь общие слова про использование скриптов и Group Policy, ручную пересборку MSI-пакетов, использование сторонних сервисов (ninite.com). Однако это всё требует постоянной ручной работы, а у хорошего админа всё должно происходить автоматически.
Таким образом, поддержка актуальности установленных версий плагинов браузера перекладывается на плечи администратора и превращается в серьёзную задачу – надо отслеживать появление обновлений на сайтах производителей (это несложно делать с плановыми обновлениями, а ведь иногда появляются срочные – внеплановые), выкачивать и выкладывать в локальный репозиторий, создавать файлы установки (например MSI), следить за ходом развёртывания обновлений…
Большие компании для этих целей используют большие продукты наподобие SCCM, средние — WSUS + Local Update Publisher(на хабре есть туториал про него от yosemity, а foxyovovich подсказал wiki, где все описано про java, flash, reader ), а мелкие просто пускают процесс на самотёк. Что интересно, по запросу «автоматическое обновление java» в гугле на первой странице половина ссылок сосредоточены на проблеме как отключить автоматическое обновление Java.
FJUpdater.vbs
Для тех, у кого уже есть AD, но еще нет WSUS (или есть WSUS, но нет времени\возможности\желания заниматься ручной работой) я предлагаю FJUpdater.vbs. Это VBS скрипт, написанный 1.5 года тому назад, чтобы упростить себе жизнь и автоматизировать выполнение данной задачи. Скрипт проверяет актуальность установленных на компьютере версий Java&Flash (сравнивая с информацией с сайтов Sun & Adobe или локального репозитория), и, при необходимости, автоматически скачивает (через интернет(HTTP) или локальную сеть(SMB) соответственно) и устанавливает обновления. Запуск скрипта на компьютерах пользователей предлагается осуществлять через групповые политики (GPO) — параметр «Автозагрузка» раздела «Конфигурация компьютера». В этом случае обновления будут установлены с правами локального администратора при загрузке компьютера, тихо и незаметно для пользователя.
Об ошибках и результатах своей деятельности может присылать отчёт на почту.
Скрипт успешно трудится в 6-и не связанных друг с другом компаниях, входящих в зону мой ответственности, с числом пользователей от 10 до 300.
Общая схема установки и работы
1) Создаем сетевую папку, доступную на запись для учётной записи пользователя, от имени которого будет запускаться проверка обновлений в интернете, и на чтение для группы «Компьютеры домена» (Domain Computers).
2) Скачиваем скрипт, размещаем его, например, в папке NETLOGON на контроллере домена и редактируем раздел отправки почты и путь сохранения установщиков в константе csInstallerPath.
3) Выделяем какой-нибудь компьютер (например – виртуальную машину) с такой же ОС, как у пользователей. Данный компьютер будет контрольным «эталоном-индикатором» – с ним будут сравниваться версии плагинов через интернет. Поэтому, на нём должны быть установлены все плагины и настроена регулярная их проверка.
Для этого первый запуск скрипта производим с ключом /WEBModeSaveInstallForce. Скачиваются актуальные версии установщиков и помещаются в локальную папку (csInstallerPath), а также генерируются файлы-флаги с номерами версий плагинов. После успешного получения, поочередно устанавливаем все плагины – запускаем java_installer.exe для Java, flashP_installer.exe для Flash Player Plugin (Firefox, Mozilla, Netscape, Opera) и flashA_installer.exe для Flash Player ActiveX (IE).
«Родные» механизмы авто-обновлений следует отключить. Как это сделать для Java можно посмотреть на официальном сайте. В случае с Flash выбрать пункт «Никогда не проверять обновления».
Вместо них, чтоб поддерживать актуальность компьютера-эталона и сетевого репозитория, настраиваем регулярный запуск скрипта с ключом /WEBModeSaveInstall:1 через планировщик задач или nncron.
4) В групповых политиках клиентских компьютеров, в разделе «Конфигурация компьютера \ Конфигурация Windows \ Сценарии (запуск\завершение)\Автозагрузка» (Computer Configuration\Windows Settings\Scripts\Startup) добавляем запуск скрипта с ключом /WEBMode:0
При перезагрузке клиентского компьютера произойдёт актуализация версий установленных плагинов – Java, Flash Player Plugin, Flash Player ActiveX
Другие параметры командной строки (доступны по стандартным ключам /? или /help)
/mail:1 = отправлять e-mail при ошибках работы или при наличии обновлений
/debug:0 = не выводить ничего
/debug:1 = записывать только сообщения о выполняемых действиях (default)
/debug:2 = записывать подробные сообщения
/debug:3 = записывать детальные сообщения о вызываемых функциях и их параметрах
/MailTest = проверка правильности настройки отправки почты (присылает тестовое сообщение)
/ShowVersion[:comp] = выводит версии установленных на компьютере плагинов Java & Flash. При запуске без параметров — на локальном компьютере, если есть параметр — он трактуется как имя\адрес компьютера
При запуске без параметров скрипт просто выполняет обновление установленных плагинов через интернет.
Живёт тут: github.com/osterik/FJUpdater
На написание данного скрипта подвигла идея, почерпнутая у коллеги по цеху ccccp, автора утилиты NetOp Manager. Но его механизм требовал использования отдельного Perl-cкрипта для каждого плагина, не мог автоматически выцарапать ссылку на скачивание обновления Java с сайта Sun, а клиентская часть была написана на KiXtart, что создавало определенные сложности в настройке всего хозяйства.
Как это работает
Структура достаточно проста – информация о программе (она же выводится при запросе справки), параметры конфигурации, общая логика (Main), специфический код работы с сайтами Adobe & Sun, служебные процедуры и функции (доступ к файлам, реестру, http, отправка почты и т.п.)
Тонкие моменты
В случае с JAVA номер актуальной версии можно просто подсмотреть в файле www.java.com/applet/JreCurrentVersion2.txt, а вот чтобы скачать полный (оффлайн) установщик, надо посмотреть ссылку на странице java.com/en/download/windows_manual.jsp. Для версии 1.7.25 она равна javadl.sun.com/webapps/download/AutoDL?BundleId=79063, но для каждой версии цифры разные. Эта задача решается в функции sJavaGetLinkToDownload.
В случае с Flash наоборот – парсить приходится номер актуальной версии (на странице www.adobe.com/software/flash/about). Функция sFlashVersionWEBGet ищет ячейки таблицы с последовательностью из 4-х чисел, разделенных точками, и, в зависимости от параметра sFlashType (тип Flash-проигрывателя( A=ActiveX, P=Plugin), возвращает первую или третью строчку таблицы. Загрузка полных установочных пакетов осуществляется по ссылкам download.macromedia.com/pub/flashplayer/current/support/install_flash_player.exe и
download.macromedia.com/pub/flashplayer/current/support/install_flash_player_ax.exe.
Естественно, время от времени ссылки меняются, поэтому, чтоб не пропустить этот момент, рекомендуется на компьютере из п3. (который регулярно запускает скрипт с ключом /WEBModeSaveInstall:1) также включить отправку логов по почте, ключ /mail:1. При обнаружении расхождений версий или ошибок функций доступа к сайтам производителей скрипт даст о себе знать.
Надеюсь, FJUpdater станет отличным подарком для системных администраторов, чей праздник мы недавно отметили!