Заставляем плагин госуслуг работать для всех пользователей в терминальной среде

  • Tutorial

КПДВ:Госуслуги


Уже более года все наши сотрудники работают только в опубликованных приложениях, а централизуем мы всё это через Parallels RAS. Есть у нас и автоматический механизм публикации ЭЦП: если авторизованный пользователь запускает сайт, допустим таможни, то предварительно в его HKCU пишется ЭЦП компании и запускается нужный плагин. Это отлично работает с КОНТУР, СБИС, КРИПТО-ПРО, но плагин от госуслуг (IFCPlugin) пришлось допиливать напильником, а к разработчикам остались вопросы…


Когда поступила заявка на установку очередного плагина, читающего ЭЦП, я не ожидал ничего сложного. Для работы с ЭЦП у нас выделен отдельный RDS-хост на котором уже стояло несколько плагинов и всё отлично работало. Я скачал плагин госуслуг с официального сайта и не мудрствуя лукаво запустил установку в машинном контексте из привилегированного шелла:


msiexec -i c:\pathtofile\mypackage.msi ALLUSERS=1

На первый взгляд, установка прошла успешно. В списке установленных программ на этом хосте появился «Плагин пользователя систем электронного правительства», под своей учетной записью я смог авторизоваться с помощью ЭЦП. Но у других пользователей плагин так и не заработал, будто и не был установлен.


Куда же ты запропастился?


Плагин госуслуг, в отличие от других аналогичных решений, никак не сообщает о своем присутствии пользователю. Нет иконки в трее, нет группы в стартовом меню, не нашел я его и в "Program Files". Т.к. под моей учеткой работала авторизация в Chrome, а она работает с помощью браузерного плагина, который, в свою очередь, должен иметь MessagingHost, я решил поискать этот процесс.


Каково же было мое удивление, когда я обнаружил этот процесс (ifc_chrome_host.exe) в собственной $Env:APPDATA! Иными словами, инсталлятор плагина, полностью игнорируя машинный контекст, поставил приложение внутрь моего профиля. Причем даже не в $Env:LOCALAPPDATA, а в подлежащую роумингу часть профиля. У нас включен роуминг аппдаты (на эту тему можно долго холливорить, но мы считаем, что в нашем случае — это правильно). Т.е. IFCPlugin установился в мой профиль, хранящийся на файловом сервере, куда только я имею доступ, но зарегистрировал себя и свои классы в машинном контексте на RDS-хосте. Вполне логично, что у пользователей плагина, по сути, не было.


Достаем напильник


Открываем старую добрую orca и смотрим на структуру директорий установщика IFCPlugin.msi:


MSI:Directory


TARGETDIR = AppDataFolder. Чем руководствовались разработчики я понять не смог. Заменяем на ProgramFiles64Folder или ProgramFilesFolder по вкусу.


Смотрим что с реестром:


MSI:Registry


Как видим, всё, кроме классов, прописывается в HKCU. Т.к. меня волновало функционирование лишь плагина для Google Chrome, то я изменил ветку только трем отмеченным параметрам на 2, что соответствует HKLM. Подозреваю, что для Firefox сработает аналогично.


Еще один напильник


Устанавливаю заново. Плагин ожидаемо появляется в $Env:ProgramFiles, но у пользователей, почему-то сразу падает процесс ifc_chrome_host.exe, хотя он уже запускается. Берем procmon и смотрим что ему не хватает.


Выясняется, что он пытается писать логи вот сюда:


$Env:ProgramFiles\Rostelecom\IFCPlugin\X.X.X.X\x32\LOGS

Пользователи, по умолчанию, разумеется, не имеют там доступа на запись. Исправляем.


Заключение


Работает. Что курили разработчики и зачем это было сделано именно так, осталось для меня загадкой.

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 8

    0
    А пару месяцев назад у них была версия 3.0.6.0 «для всех пользователей».
    Положил статью в закладки, пригодиться при обновлении плагина
      0
      Да, я пытался найти что-то такое — не удалось. Отсутствие какой-либо вменяемой технической документации тоже поражает. Игнорирование контекста установки и неиспользование LOCALAPPDATA вообще дно…
      +1

      Плагин рассчитан исключительно для работы на обычном десктопе под учётной записью с правами администратора. Домен? Терминальный сервер? Писать логи в профиль?? Не, не слышали…

        0

        Скажите, а не показывать мне код, написанный за мои, как налогоплатильщика, деньги это вообще законно?

          0
          Это я не знаю, я не политик и не юрист ;) Но судя по тому, что уже видно в .msi — код нам лучше не видеть. Иначе, я боюсь, это будет преследовать всю жизнь ;)
          0

          Установщики плагинов иногда делают в AppData, чтобы установка не требовала прав администратора. Это довольно важно для массового сегмента.


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

            0
            Тут я с вами абсолютно согласен. Но!

            1. Оно даже не возмутилось на ALLUSERS=1 и успешно установилось в машинном контексте в мою личную AppData. Другой пользователь установить как пользователь уже не мог. Ему предлагалось «восстановить или удалить» уже существующую установку. Да, из моей AppData.

            2. По сравнению с п.1 мелочи, но таки LocalAppData
              0

              Думаю, такой сценарий использования просто не рассматривался и не тестировался (установка от учётной записи системы).
              Установщик получил учётную запись, ее и использовал :)


              Обычная недоработка/баг. Заведите тикет, кажется они принимали баг-репорты по email.


              Хотя Ваш воркэраунд тоже поможет при таком сценарии.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое