Ad Widget

Collapse

Подписанный PowerShell скрипт. TimeOut

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Belfigor
    Member
    • Jul 2016
    • 69

    #1

    Подписанный PowerShell скрипт. TimeOut

    Имеется скрипт, который определяет количество ядер у процессора, взятый с хабра. Имеется ОС Windows 10
    1) Просто скопировав его текст в Windows Powershell ISE и сохранив, без прав администратора ОС естественно не захотела его запускать.
    2) У центра сертификации в локальной сети, был получен сертификат для подписания кода, скрипт был подписан, и при первом запуске без прав администратора, задал вопрос "Хотите ли вы всегда запускать этот скрипт без вопросов?"
    3) Ответ был да, и скрипт начал запускаться двойным кликом мыши.
    4) В конфиг агента добавлена строка: UserParameter=PSScript[*],powershell -File "C:\zabbix\pss\$1". Агент был перезапущен

    После всех манипуляций при отправке запроса
    zabbix_get -s 192.168.5.34 -p 10050 -k "PSScript[procCores.ps1]" --tls-connect psk --tls-psk-identity "testwin" --tls-psk-file /home/zabbix/zabbix_agentd.psk
    Возвращается ZBX_NOTSUPPORTED: Timeout while executing a shell script.

    Если вместо procCores.ps1 указываю имя несуществующего ps1 файла, возвращается ответ
    Code:
    ▒▒㬥▒▒ "C:\zabbix\pss\pro1cCores.ps1" ▒▒▒ ▒▒ࠬ▒▒▒ -File ▒▒ ▒▒▒▒▒▒▒. ▒▒▒▒▒▒ ▒▒▒▒ ▒ ▒▒▒▒▒▒▒饬▒ 䠩▒▒ ▒ ▒▒▒७▒▒▒ ".ps1" ▒ ▒▒▒▒⢥ ▒▒㬥▒▒ ▒▒ࠬ▒▒▒ -File.
    Windows PowerShell
    (C) ▒▒௮▒▒▒ ▒▒▒▒▒▒▒▒ (Microsoft Corporation), 2016. ▒▒ ▒ࠢ▒ ▒▒▒饭▒.
    Понятно что PowerShell что-то отвечает.

    А вот при попытке запустить именно подписанный скрипт - в ответ таймаут.

    Если снять ограничение на запуск скриптов:
    Code:
    Set-ExecutionPolicy Unrestricted
    то отрабатывает нормально

    Как добиться того чтобы заббикс мог работать с подписанными ps1 скриптами, т.к. ставить разрешение на запуск неподписанных скриптов ну ваще не вариант.


    Ответ: https://www.zabbix.com/forum/showpos...0&postcount=10
    Last edited by Belfigor; 23-06-2017, 14:03.
  • Belfigor
    Member
    • Jul 2016
    • 69

    #2
    Скрипт начал отрабатывать и возвращать результат через zabbix_get но лишь с преминением политики запуска:
    Code:
    Set-ExecutionPolicy RemoteSigned LocalMachine
    То есть любой скрипт созданный на локальной машине, а не полученный из вне, будет запускаться, независимо подписан или нет.

    Всё же хотелось бы запускать с режимом
    Code:
    Set-ExecutionPolicy AllSigned –Force
    Чтобы любой скрипт для запуска должен был быть подписан

    Comment

    • sadman
      Senior Member
      • Dec 2010
      • 1611

      #3
      Сделайте так:

      Code:
      UserParameter=PSScript[*],powershell -NoProfile -ExecutionPolicy "RemoteSigned" -File "C:\zabbix\pss\$1"

      Comment

      • Belfigor
        Member
        • Jul 2016
        • 69

        #4
        Заменил свою строчку в конфиге агента на:
        Code:
        UserParameter=PSScript[*],powershell -NoProfile -ExecutionPolicy "RemoteSigned" -File "C:\zabbix\pss\$1"
        zabbix_get вернул значение, как и когда я устанавливаю значение RemoteSigned глобально через powershell, командой
        Code:
        Set-ExecutionPolicy RemoteSigned LocalMachine
        Заменил RemoteSigned на AllSigned, запускаться перестало:
        Code:
        UserParameter=PSScript[*],powershell -NoProfile -ExecutionPolicy "AllSigned" -File "C:\zabbix\pss\$1"
        , и снова zabbix_get возвращает
        Code:
        ZBX_NOTSUPPORTED: Timeout while executing a shell script
        И таки всё логично, при RemoteSigned, спокойно запускаются скрипты созданные на локальной машине (как мой), а любые другие скрипты будут требовать подписи чтобы запускать их.

        Отправляя команду через cmd, запущенную НЕ от администратора, при глобальной установленной настройке запуска AllSigned
        Code:
        C:\WINDOWS\system32>powershell -NoProfile -ExecutionPolicy "AllSigned" -File "C:\zabbix\pss\procCores.ps1"
        {
            "data":  [
                         {
                             "{#PROCNUM}":  "0"
                         },
                         {
                             "{#PROCNUM}":  "1"
                         }
                     ]
        }
        Всё отрабатывает нормально.

        То есть только заббикс агент получается не хочет запускать подписанный скрипт.
        Когда идет запуск с параметром RemoteSigned, в логе при Debug=4 появляется такая запись:
        Code:
         14372:20170614:155255.128 Requested [PSScript[procCores.ps1]]
         18236:20170614:155255.749 In collect_perfstat()
         18236:20170614:155255.751 End of collect_perfstat()
         14372:20170614:155255.871 EXECUTE_STR() command:'powershell -NoProfile -ExecutionPolicy "RemoteSigned" -File "C:\zabbix\pss\procCores.ps1"' len:199 cmd_result:'{
        
            "data":  [
        
         '
         14372:20170614:155255.872 Sending back [{
        
            "data":  [
        
                         {
        
                             "{#PROCNUM}":  "0"
        
                         },
        
                         {
        
                             "{#PROCNUM}":  "1"
        
                         }
        
                     ]
        
        }]
        А при AllSigned,
        Code:
         22220:20170614:155432.264 Requested [PSScript[procCores.ps1]]
         13996:20170614:155432.505 In collect_perfstat()
         13996:20170614:155432.507 End of collect_perfstat()
         13996:20170614:155433.510 In collect_perfstat()
         13996:20170614:155433.512 End of collect_perfstat()
         13996:20170614:155434.514 In collect_perfstat()
         13996:20170614:155434.516 End of collect_perfstat()
         13996:20170614:155435.518 In collect_perfstat()
         13996:20170614:155435.520 End of collect_perfstat()
          8396:20170614:155436.158 In zbx_tls_accept()
        Помогите побороть этот недуг . Ведь иначе либо разрешать запускать любые неподписанные скрипты, либо в русную создавать файл со скриптом на каждой машине

        Comment

        • sadman
          Senior Member
          • Dec 2010
          • 1611

          #5
          Ничего не понял.

          Скрипт же запускается через UserParameter. Что вы еще от него хотите?

          Comment

          • sadman
            Senior Member
            • Dec 2010
            • 1611

            #6
            Вот я сейчас специально посмотрел у себя:

            Code:
            PS D:\> Get-ExecutionPolicy -List | ft -autosize
            
                    Scope ExecutionPolicy
                    ----- ---------------
            MachinePolicy       Undefined
               UserPolicy       Undefined
                  Process       Undefined
              CurrentUser      Restricted
             LocalMachine      Restricted
            Это значения по умолчанию, т.е. не самая жесткая, как я понимаю, настройка, но дыр в безопасности нет.

            Code:
            UserParameter=wsfc[*], powershell -NoProfile -ExecutionPolicy "RemoteSigned" -File C:\zabbix\scripts\wsfc.ps1 -Action "$1" -ObjectType "$2" ....
            Запрос с Zabbix Server
            Code:
            master$ zabbix_get -s x.x.x.x -k "wsfc[Get,ClusterResourcePhysicalDisk,State,d0b42eee-7da9-4e45-b312-25fe2d0ee9b2]"
            [I]Online[/I]
            Т.е. на конкретной Windows машине работает только конкретный скрипт, прописанный в Zabbix Agent-е. Распространяется он обычным копированием.

            Ваш вариант с AllSigned я проверить не могу, так как наворотов типа центра сертификации не держу.

            Comment

            • Belfigor
              Member
              • Jul 2016
              • 69

              #7
              С сертификатом то как раз и проблема, политика RemoteSigned говорит о том, что на локальной машине можно запустить абсолютно любой скрипт, не зависимо подписан он или нет, если он создан этой машине, без админских прав.

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

              То есть вариант что скинули вы, работает здесь и сейчас на моем компе. И все сервера которых всего несколько десятков, я обязательно подключу к заббиксу используя эту схему. Но стоит мне залить этот код на типовую пользовательскую удаленную машину, он перестанет там работать и будет просить админского подтверждения, пока я и там не изменю политику на RemoteSigned и не пересоздам сам файл скрипта, или же не разрешу запуск не подписанных скриптов.

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

              Comment

              • sadman
                Senior Member
                • Dec 2010
                • 1611

                #8
                Originally posted by Belfigor
                С сертификатом то как раз и проблема, политика RemoteSigned говорит о том, что на локальной машине можно запустить абсолютно любой скрипт, не зависимо подписан он или нет, если он создан этой машине, без админских прав.
                Т.е. хотите отрезать пользователям возможно запускать скрипты в принципе, если они не созданы администратором с подписью, даже в том случае, когда пользователь делает трюк с "-ExecutionPolicy" в командной строке?

                Проблема в том что любой локально созданный скрипт, при копировании его на удаленную машину, начинает попадать в категорию RemoteSigned и всё равно будет требовать цифровой подписи, для того чтобы запускаться без админских прав.
                У меня не попадает. Нормально себе так обламывается:

                Code:
                Не удается загрузить файл C:\zabbix\scripts\test.ps1, так как выполнение скриптов запрещено для данной системы. Введите "get-help about_signing" для получения дополнительных сведений.
                Но, если в командной строке ему переуказать политику, то вполне себе работает.

                Но стоит мне залить этот код на типовую пользовательскую удаленную машину, он перестанет там работать и будет просить админского подтверждения, пока я и там не изменю политику на RemoteSigned и не пересоздам сам файл скрипта, или же не разрешу запуск не подписанных скриптов.
                Или я что-то не понимаю или у нас разные винды. Я скопировал скрипт, запустил, обломался, запустил с указанной в командной строке политикой - получил адекватный результат. Без "Запустить под учетной записью администратора".

                Впрочем, я так сильно в PS не залезал, могу и упускать какие-то моменты.


                Вот с тем чего не хватает заббиксу я и хочу попытаться разобраться
                Выполняйте агента не под LocalSystem, а под... ну, каким-нибудь иным аккаунтом, которому можно добавлять и урезать права. Например у меня был случай, когда всё вставало колом, если в дебрях командлетов выполнялся WMI, который делал запрос на удаленный хост. Пришлось менять Zabbix Agent-у аккаунт на тот, что имел право на доступ к сети.

                Comment

                • Belfigor
                  Member
                  • Jul 2016
                  • 69

                  #9
                  Originally posted by sadman
                  Выполняйте агента не под localsystem, а под... ну, каким-нибудь иным аккаунтом, которому можно добавлять и урезать права. Например у меня был случай, когда всё вставало колом, если в дебрях командлетов выполнялся wmi, который делал запрос на удаленный хост. Пришлось менять zabbix agent-у аккаунт на тот, что имел право на доступ к сети.
                  Таки вот это я не пробовал! Спасибо за наводку

                  Comment

                  • Belfigor
                    Member
                    • Jul 2016
                    • 69

                    #10
                    Собственно ответ:
                    Поднимаем в домене центр сертификации
                    В шаблоны добавляем Code Sign шаблон сертификата
                    Генерируем себе сертификат
                    Через групповые политики распространяем сертификат по всем компам в домене, чтобы он попал в "Доверенные издатели"
                    Настраиваем так же через групповые политики запуск службы от учетки с админскими правами (возможно этот пункт излишен)
                    Через групповые политики распространяем по всем компам сертификат Центра сертификации как "Доверенного центра сертификации"

                    После этого, все PS скрипты подписанные нашим сертификатом Code Sign, будут спокойно запускаться в домене с политикой AllSigned

                    Comment

                    Working...