Автоматическое обновление 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
image

Другие параметры командной строки (доступны по стандартным ключам /? или /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 станет отличным подарком для системных администраторов, чей праздник мы недавно отметили!
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 17

    0
    На небольших предприятиях скрипт действительно может быть полезен.
    Но Вы не предусмотрели что могут быть и 64-bit клиенты. Вариант установки\проверки JRE x86 на 64-битных компьютерах отсутсвует
      0
      Да, я задумывался об этом вопросе. Несколько причин, почему оставил всё как есть. Скрипт имеет в первую очередь практическую направленность — обслуживание парка компьютеров (клиентов) в зоне моей ответственности. Практика показала, что 99% рабочих станций 32х-битные, а единичные случаи у кого 64х-битные — либо вообще не используют java, либо прекрасно обходятся 32х-битным плагином.

      Далее, перед тем как опубликовать скрипт с поддержкой 64х-битных версий, надо его проверить. С тестовой средой проблем нет, но в продакшене у меня нет установленных 64х-битных java-плагинов, а выкладывать в паблик не откатанный на практике скрипт я считаю неэтичным.

      В любом случае — переход на 64 бита это лишь вопрос времени, поэтому, выкладывая мои наработки в общий доступ, я надеюсь, что кто-нибудь форкнет и добавит поддержку 64х-битных версий раньше, чем жизнь заставит это сделать меня :).
      0
      «автоматическое обновление java» в гугле на первой странице половина ссылок сосредоточены на проблеме как отключить автоматическое обновление Java

      Возможно эта ситуация возникает потому что
      а для установки обновления от Sun необходимо чтобы пользователь обладал правами локального администратора, что часто встречается у домашних пользователей и никогда в доменной сети хорошего администратора.

      Уведомления вылазят, пользователи запускают обновления, получают ошибки, начинают звонить кому ни попадя из it-отдела. И тем, кто занимается поддержкой пользователей в части использования софта, его настройки (т.е. хелпдеску, назовём так условно). И тем, кто занимается чисто железно-технической частью (ремонт, который можно совершить своими силами, заправка картриджей, протяжка СКС). И администратору. Для большинства пользователей такого разделения обязанностей нет, для них всё едино: компьютерщик, программист. Бороться с этим достаточно тяжко. В такой ситуации многие администраторы видят более простым решением отключать обновления.
      Это одна причина. Вторая причина, которую видел — это софт написанный некоторыми писаками, который работает с исключительно определёнными версиями java. Тоже бывает.
        0
        Небольшой хинт — Flash, Java и прочая можно обновлять через WSUS.
        Родного интерфейса для добавления сторонних пакетов у него нет, но сама возможность в архитектуру заложена, и есть несколько сторонних решений для этого — в т.ч. и бесплатных.
          0
          Несомненно можно. Но — неудобно и много возни — приходится делать много лишних движений.
          Опять же — как
          отслеживать появление обновлений на сайтах производителей (это несложно делать с плановыми обновлениями, а ведь иногда появляются срочные – внеплановые)
          ?
            +1
            Все можно обновлять через WSUS, включая exe, но JRE и Flash представлены в ввиде родного msi от разработчиков, а добавить во WSUS msi — несколько кликов мышкой. Для отслеживания актуальных версий я использую плагин для браузера от SurfPatrol. И то, что вы пишите в статье про отсутствие родного msi — не соответствует действительности. Я тоже раньше велосипеды изобретал, вплоть до собственного приложения, но потом понял. что это не нужно.
              0
              И еще, чтобы отключить автоапдейт явы надо прописать в реестр один раз ключ, для текущей актуальной версии, далее при обновлении настройки будут сохраняться. Напрмер так:
              HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6.0_31\MSI','AUTOUPDATECHECK','REG_SZ','0'
                0
                в csJavaInstallerParams есть ключик JAVAUPDATE=0, который тоже должен отключать автоапдейт.
                0
                Для отслеживания актуальных версий я использую плагин для браузера от SurfPatrol
                Уважаемый yosemity, подскажите, пожалуйста, как Вы получаете информацию о появлении новых версий плагинов (если это не вручную — запустить браузер и открыть страничку).

                И то, что вы пишите в статье про отсутствие родного msi — не соответствует действительности

                неверно, я не пишу что родного msi нет. Они есть. Но, повторяю, это неудобно. И если для для flash надо просто сходить на страницу Adobe Flash Player Distribution и выкачать 2 файла ( и прикрутить к WSUS), то для java придётся для каждой версии скачать Offline Install, достать из него MSI и CAB (How do I deploy Java using Active Directory across a network?). И прикрутить к WSUS. Зачем эти ежемесячные (а то и чаще) лишние хлопоты, если можно настроить 1 раз и переложить головную боль по поводу обновления плагинов со своей шеи на скрипт?

                Не спорю — WSUS замечательная штука, через него можно делать многие полезные вещи. Его «движок» использует SCCM, можно и ручками раскидывать софт и обновления (напр. через Local Update Publisher). Но, как показывает практика, во многих компаниях на 10-30 пользователей домен AD есть, а WSUS еще нет…
                Эту систему я разработал более 1.5 года тому назад (сейчас только причесал код и выложил в паблик), первый порыв был использовать WSUS + Local Update Publisher. Но мне показалось неудобным и трудоёмким. И требующим постоянного внимания, т.к. у меня в обслуживании несколько несвязанных между собой компаний, от 10 до 300 рабочих станций, WSUS есть не везде. Т.е. пришлось бы постоянно этим вопросом заниматься, выполняя обезьянью работу. А так я просто «держу руку на пульсе» просматривая отчёты.
                Человек должен думать, а компьютер — работать.
                Обложить всё скриптами и читать хабру — не это ли золотая мечта админа?
                  0
                  Браузер открыт всегда. в правом верхнем иглу иконка, если она синяя — все ок, если красная — что-то не то.

                  >Обложить всё скриптами и читать хабру — не это ли золотая мечта админа?
                  Для меня — нет, скучно становится, плюс деградация. Постоянно что-то кручу и изучаю. А WSUS доступен из инета в том числе. Я, например весь софт устанавливаю и обновляю через WSUS. У меня это список из 18 приложений. И если юзер просит установить какой-то софт, то если он бесплатный, я просто его разворачиваю всем. Писать скрипты — муторно и долго, у скриптов свои задачи.
                  Я не говорю, что обязательно юзать ВСУС, но это быстро, удобно и без велотранспорта.
                    0
                    Браузер открыт всегда. в правом верхнем иглу иконка, если она синяя — все ок, если красная — что-то не то.

                    ок. А что произойдёт, когда Вы будете в отпуске? Или заболеете? Кто будет смотреть на иконку?

                    Постоянно что-то кручу и изучаю.

                    Вот, и я о том же — скрипт писался, чтоб было больше времени и возможностей заниматься чем-то новым и действительно интересным, а не ловить момент появления обновлений и раскладывать их по 6 конторам.

                    В любом случае, для Вас скрипт тоже может быть полезен — он может следить за появлением новых версий плагинов и стучать в почту, а также с его помощью можно посмотреть версии плагинов, установленных на удалённом компьютере (/ShowVersion[:comp])

                    А если научить его самостоятельно выкладывать обновления во WSUS — тогда точно наступит админское счастье :)
                      0
                      > ок. А что произойдёт, когда Вы будете в отпуске? Или заболеете? Кто будет смотреть на иконку?

                      Да ничего не произойдет, ну заапрувлю на неделю-две позже, это не проблема, я в любом случае все апдейты на тестовой группе сначала разворачиваю, да и вообще, даже при 0day дыре в том же флеше не вижу критичной проблемы, довольно часто бывает, что вендор очень сильно опаздывает с апдейтами даже уже при во всю эксплуатируемых уязвимостях. Да и админских прав у юзеров нет. Если я заболею или еще чего, то несвежая Java — это фигня )) Кстати, и еще, если вы вдруг заболеете и Оракл или Адоб сменит алгоритм раздачи апдейтов, то тоже все полетит к чертям ;)

                      Повторюсь, я не говорю, что скрипт плохой, он замечательный. Я про то, что он всего лишь для JRE и Flash, при чем крайне узко заточенный. А еще есть куча софта, который надо обслуживать. Тратить столько времени на подгонку для каждого ПО — лишняя трата сил и времени. В рамках изучения — ради бога.

            0
            В этом случае обновления будут установлены с правами локального администратора при загрузке компьютера, тихо и незаметно для пользователя.

            Вообще то «Автозагрузка» раздела «Конфигурация компьютера» выполняется от LocalSystem
            Скачиваем скрипт, размещаем его, например, в папке NETLOGON на контроллере домена

            Да забудьте вы уже про NETLOGON для скриптов входа давно есть специальные папки в каждой политике.

            И интересно как поведёт себя Ваш скрипт, если для доступа в Интернет используется proxy-севрер?
              0
              Вообще то «Автозагрузка» раздела «Конфигурация компьютера» выполняется от LocalSystem

              The LocalSystem account is a predefined local account used by the service control manager. [skip] Its token includes the NT AUTHORITY\SYSTEM and BUILTIN\Administrators SIDs; these accounts have access to most system objects.
              © MSDN: LocalSystem Account (Windows)
              что imho равнозначно фразе «правами локального администратора»

              для скриптов входа давно есть специальные папки в каждой политике.

              Лично я — сторонник централизации. Обычно размещаю сам скрипт в NETLOGON, а в папках политик — вызывающий файл, который уточняет параметры командной строки (для группы «тестеров» — продвинутых пользователей, которые первыми получают обновления включена высокая детализация и отправка сообщений на почту, остальным всё делается «втихую», чтоб не захламлять ящик сообщениями об успешных установках)
              Так проще вносить изменения — придётся отредактировать только 1 файл, который будет использоваться всеми политиками.

              И интересно как поведёт себя Ваш скрипт, если для доступа в Интернет используется proxy-севрер?

              Специально не тестировал, но, т.к. используется ServerXMLHTTP, предполагаю, что оно будет подчиняться настройкам Proxycfg.exe (netsh winhttp set proxy для w2k8\w7), см. Frequently asked questions about ServerXMLHTTP Q6. What is the Proxy Configuration Utility?
              0
              Камрады, поделитесь, пожалуйста, мануалом как обновлять сабж через WSUS!
                +1
                Local Update Publisher
                На его wiki странице есть статьи как обновлять
                  0
                  спасибо, добавил в статью

              Only users with full accounts can post comments. Log in, please.