Сегодня я попробую разобраться с проблемой корректной работы софта под правами пользователем на примере ПО (Prima Expert Digital Microscope) для цифрового микроскопа от АО «ЛОМО».

Устройство в сборе

Как и на многих предприятиях у нас строгая политика безопасности прописанная в СТП и рядовые сотрудники не имеют админских прав, поэтому периодически случаются проблемы с работой софта под пользовательской учетной записью, т.к. ПО требует расширенных прав.

Итак что имею на старте, ОТК(отдел технического контроля) запросил установку сопровождающего микроскоп ПО «Эксперт Prima версия 1.0» на обычную пользовательскую машину с Windows XP.

Цифровая камера

Установка была произведена, но обнаружена следующая проблема. Программа не видит камеру и обрезает интерфейс после запуска из под пользователя, под администратором ПО работает корректно.



Первое, что я попробовал предпринять – это дал права на изменение пользователю в каталог с программой LOMO.



Это действие не дало положительных результатов. Вооружившись утилитой Process Monitor, настроил в ней фильтр на процесс Prima.exe и запускаю ПО «Эксперт Prima».



Утилита выводит все затрагиваемые ресурсы системы для работы Prima.exe



Далее для удобства работы экспортирую результат в csv и открываю с помощь Microsoft Excel.



Сортирую по полю Detail и иду смотреть затрагиваемые кусты, меня интересует значение Desired Access: Read/Write.



Даю полные доступ пользователю на папки реестра:

HKLM\Software\Microsoft\VfWWDM Mapper
HKLM\System\CurrentControlSet\control\MediaResources\msvideo\MSVideo.VFWWDM

Почему именно эти папки? Т.к. пользователь имеет полный доступ к HKCU — это его ветка.

Запускаю для проверки, программа работает должным образом.



Надеюсь, статья окажется полезной начинающим админам и эникейщикам. Этот способ я использую очень давно т.к. он универсален и не разу меня не подводил.

Комментарии (28)


  1. istui
    06.04.2016 16:13

    А есть способ отучать особо наглые программы от UAC в W8.1/10? Например, чтобы распаковать архив, они запрашивают права админа, несмотря на наличие доступа к требуемой директории.

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


    1. FishDude
      06.04.2016 17:12

      Возможно вопрос был не о том, но… Если нужно просто убрать лишний запрос, а права админа уже есть — достаточно запустить программу с помощью шедулера. Например, CCleaner именно так «сам себя» и запускает.


      1. istui
        06.04.2016 17:30

        я вхожу в группу администраторы, но по умолчанию доступ к части директорий требует подтверждения от UAC в W8.1/10. Я не хочу разрешать всякому «левому» софту, особенно если он не подписан, доступ к папке windows и т.д., который она получит при повышении привелегий, особенно, если я понимаю, что без этих прав программа 100% обойдется (папка программы доступна на запись и без привелегий, процесс обновления затрагивает только саму папку — я проверял через process monitor).

        По-хорошему перед обновлением программа сама должна проверить разрешения на запись в свою директорию, и, только если его нет, выводить запрос на повышение привелегий, как поступают все «культурные» разработчики. В Windows многое секретов, я знаю далеко не все, поэтому и надеюсь, что может быть какой-то хитрый способ обхода (нечто вроде песочницы: и нажал «да», и прав все равно не дал)


        1. MichaelBorisov
          06.04.2016 21:30
          +3

          Я недавно обнаружил, что под Win7 любая программа, в названии которой имеются слова «updater», «install» или «setup», будет запрашивать привилегии через UAC, даже несмотря на то, что в программу честно прописан манифест, прямо указывающий, что админские права не нужны. Стоит только переименовать екзешник — и запрос UAC пропадает.


          1. navion
            06.04.2016 22:14
            +3

            Это можно отключить в политике «Detect application installations and prompt for elevation». Оно ещё ищет строки в ресурсах:
            blogs.msdn.microsoft.com/uac/2006/01/13/identification-of-administrative-applications


            1. MichaelBorisov
              06.04.2016 23:04
              +2

              Как бы да, но разработчик же не может это сделать на компьютерах пользователей. Поэтому придется называть свои непривилегированные программы так, чтобы в них не было слов «update», «setup» и «install». Некрасивое решение.


              1. navion
                07.04.2016 12:46

                У манифеста с asInvoker разве не будет приоритета?


        1. holomen
          07.04.2016 08:15
          +1

          Вроде как temp лежит внутри windows, а архиваторы туда постоянно лезут. Вынести этот злосчастный темп, точнее оба — и пользовательский и системный (в переменных среды). Может поможет? Я их давно уже выношу в корень на автомате из соображений удобства — чтобы далеко не лазить при зачистке.


        1. Ziptar
          11.04.2016 02:07

          Существует прекрасная утилита от Марка Русиновича. Подробнее в его блоге: https://blogs.technet.microsoft.com/markrussinovich/2006/03/02/running-as-limited-user-the-easy-way/


    1. Skler0z
      06.04.2016 17:31
      +4

      Если на иконке приложения виден значок UAC в виде щита, велика вероятность, что для запуска с правами админа используется манифест а не API и можно обойтись без дизассемблера.
      Нужно открыть EXE-файл в любой программе, позволяющей редактировать ресурсы (Resource Hacker — навскидку), и в manifest'е заменить в узле «requestedExecutionLevel» значение атрибута «level» на «asInvoker».


      1. istui
        06.04.2016 17:33
        +1

        Кстати да! и я же сам писал когда-то манифесты, но забыл… Спасибо!!!
        P.S. ник в тему :)


      1. andreishe
        07.04.2016 03:25

        не API

        Про какой API идет речь?


        1. Skler0z
          07.04.2016 11:25

          WinAPI, ShellExecute c 'runas', вроде бы.


          1. andreishe
            07.04.2016 19:16

            Спасибо. Я подумал, что появилось что-то для элевации текущего процесса.


    1. navion
      06.04.2016 21:20
      +1

      1. istui
        06.04.2016 23:10

        Я так и думал, что что-то похожее должно быть!


  1. Marsikus
    06.04.2016 16:30

    Если программу еще разрабатывают, то может стоит обратиться к разработчикам, сообщить им о проблеме и вынужденном способе решения?


  1. tangro
    06.04.2016 20:43
    +5

    Автор, оцените в результате какого спора длиной в год Вам достался инвайт: geektimes.ru/post/248118/#comment_8310958
    :)


  1. SysCat
    06.04.2016 21:31

    А какая модель микроскопа?


  1. yosemity
    06.04.2016 22:46
    +1

    Статья однозначно полезная, но хочу заметить, что при невозможности записи в реестр у вас бы не было SUCCESS значения, похоже скрин был сделан когда уже все заработало. Далее, импоритировать в Эксель нет необходимости, фильтры в PM отличные, да и зачастую приходится не пару веток ресстра разрешения дать… Устанете в эксель такскать после каждого шага. Следует просто добавить фильтр для <> SUCCESS.


    1. qu_ba
      07.04.2016 08:11

      Да, все верно! Делал скрины, уже после победы над проблемой))))
      Тут наверное дело привычки, экспорт в Excel действительно не обязательный шаг!!!


  1. toto20002
    07.04.2016 08:15

    Есть еще вариант воспользоваться утилитой AdmiLink которая создает специальный ярлык позволяющий запускать конкретный софт от имении другой ученой записи без ввода пароля. Это более быстрый способ, но не такой красивый.


    1. yosemity
      07.04.2016 21:51
      +1

      Поясните, как это работает? Механика UAC и тем более ограниченные права не позволяют так делать.


      1. toto20002
        08.04.2016 15:50
        +1

        Ограниченные права позволяют запускать приложение от имени другой учетной записи, а AdmiLink безопасно автоматизирует этот процесс.
        Утилита по шагам запрашивает данные, и генерирует ярлык с путем вида:

        C:\Windows\saferun.exe -th C:\Windows\AdmiRun.Exe -d+ -i+ -w- -l+ -c- -a- -m- Z/2B8tY5AABDRcgV9RAWOUft2sfSYo1dWM6F5mnNlh7aIU2ZH97rtISnA/F6LmWk «C:\Program Files\...\...\....EXE»

        В этой строке зашифрованы все данные для запуска. Параметры UAC стандартные, работает нормально.


    1. kav4ik
      08.04.2016 08:02
      +2

      Как мне кажется этой программой нужно осторожно пользоваться, т.к. была у меня ситуация что с помощью программы AdmiLink давал доступ к одной программе (название уже не припомню), так вот некоторые мои студенты умудрялись через help этой программы запускать, командную оболочку, с повышенными привилегиями.


      1. istui
        08.04.2016 08:55

        Кто ищет, тот всегда найдет (с)
        В вашем случае и подобных (банкоматы, библиотечные терминалы и т.д.) нужны белые списки.


      1. toto20002
        08.04.2016 16:08

        Да, действительно, через некоторые приложения можно запустить исполняемый файл, например, если приложение использует диалог открытия файла со свободным выбором типа файла. Потенциальная дыра.