среда, 9 сентября 2015 г.

GPO AD: Computer Startup scripts and Powershell (часть 1: Создание.Запуск)

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



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

В Microsoft подразумевается, что свои скрипты вы будете размещать в папке, которая соответствует редактируемой политике. Но во-первых, это не всегда так, а во-вторых логично предположить, что права (хотя-бы на чтение) у компьютера, который будет обращаться к скрипту - имеются. Однако это тоже ложное мнение! Итак, первое, с чем мы определимся...

Выбор расположения скриптов и права доступа


Мои скрипты расположены не только в папке политики, которая их и будет выполнять.

Один скрипт у меня находится: \\domen.local\SysVol\domen.local\Policies\{E4A966DE-1FFE-40C8-B3B2-50888E146A4D}\Machine\Scripts\Startup\Main.ps1

Второй скрипт вызывается из первого и у меня он находится: \\domen.local\NETLOGON\zabbix_install.ps1

В случае первого скрипта необходимо: Открыть в редакторе GPO (нужной вам политики): Конфигурация компьютера - Политики - Конфигурация Windows - Сценарий (запуск/завершение) - выбрать Автозагрузка.

В открывшемся окне перейти на вкладку Сценарии PowerShell и нажать внизу кнопку: Показать файлы





Открывшаяся папка - то, что вам нужно. Сюда вы копируете свои скрипты, которые планируете выполнять этой политикой. И сразу проверяете права этой папки.

На вкладке Безопасность  проверяем наличие прав доступа на чтение и выполнение - группе Domain Computers

Права для SYSTEM (Full) - как правило выставляются корректно изначально. Creator Owner - так же являются корректными. 





Если права отсутствуют - добавляем их.

И это касается каждой папки, к которой планируется обращение от имени доменного компьютера!!!

Т.е. в моем случае - мне было необходимо дать такие права еще для папки \\domen.local\NETLOGON а так-же для шары, к которой обращается скрипт и пишет туда логи. \\shara\LOG

Выбор скрипта для запуска и редактирование GPO


Интерфейс добавления скрипта для обработки в GPO неоднозначен, что касается выбора расположения скрипта и предоставляет различные возможности. А именно: прописать скрипт по локальному пути, по сетевой шаре, указать параметры запуска и даже порядок выполнения, относительно скриптов-пакетников.

Я тестировал различные варианты и уже сложно сказать, что работало, а что нет. Потому-что если одно работало - то другое уже отказывалось.  Именно поэтому я сообщаю лишь итоговый рабочий вариант.

Вы скопировали скрипт в папку используемой политики в этом-же окне жмете кнопку добавить и выбираете скрипт. Однако в окне скриптов (это видно на скрине выше)  - пути к файлу нет. И это нормально. Я тестировал варианты: прописать путь до скрипта даже по сети, например: \\shara\PS\Main.ps1 и такое тоже выполнялось, если права на чтение папки компьютерами домена - присутствовало. Поэтому экспериментируйте.



По большому счету все. НО! По умолчанию, ваши PS скрипты не будут запускаться даже из сети, основываясь на безопасности GPO. 

Путей решения несколько. Разрешить запуск любых скриптов. Или использовать политику безопасности, которая позволит запускать скрипты, расположенные локально или в сети, но при этом скрипты должны быть подписаны.

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

Изменение политики безопасности PowerShell - Выполнение сценариев


Находим нужную политику: Конфигурация Компьютера - Административные шаблоны - Компоненты Windows - Windows PowerShell и открываем политику: "Включить выполнение сценариев"

По умолчанию она выключена, а это значит, что выполнение скриптов ЗАПРЕЩЕНО!

Включая - нам становятся доступны опции политики выполнения и если вас не интересует подпись сертификатов - вы выбираете "Разрешить все сценарии".



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

Для проверки текущей политики безопасности существует командлет:

Get-ExecutionPolicy 

Restricted - блокируются любые скрипты.

AllSigned - разрешены только те, которые имеют цифровую подпись

RemoteSigned - скрипты, на локальном компьютере, можно запускать без ограничений. Скрипты, загруженные из интернета - только при наличии цифровой подписи.

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

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

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

powershell.exe -executionpolicy bypass -File C:\scripts\backup.ps1

Кстати запуск из cmd или bat - Это еще один наиболее простой запуск ps1 скрипта без заморочки на политику безопасности и подписании скриптов :) 

Запуск скриптов в Windows Server 2012 R2  Windows 8.1 и выше


Это еще один подводный камень. По умолчанию, в версиях 2012 R2 и Windows 8.1 скрипты компьютера на запуск - имеют задержку на выполнение в 5 минут. 

Чтобы это исправить необходимо скорректировать еще один пункт в политике безопасности.

На данный момент уровень моего домена и леса = 2012. Как и все контроллеры домена, под управлением Windows Server 2012. А в этих версиях отсутствует параметр управления этой задержкой. Поэтому первое, что необходимо сделать, это скачать административные шаблоны ADMX отсюда: http://www.microsoft.com/ru-ru/download/details.aspx?id=41193

Скачав файл Windows8.1-Server2012R2ADMX-RTM запустите его установку на одном из контроллеров домена. Путь по умолчанию будет: C:\Program Files (x86)\Microsoft Group Policy\Windows 8.1-Windows Server 2012 R2\PolicyDefinitions\ Зайдите в эту папку и удалите лишние языковые директории. Я оставил лишь en-US и ru-RU т.к. имею в распоряжении русскую и английскую версию оснастки.

Теперь необходимо создать Централизованное хранилище политик. На контроллере домена скопировать папку PolicyDefinitions целиком из %systemroot% в папку %systemroot%\sysvol\domain\policies\ 

Затем скопировать содержимое из папки C:\Program Files (x86)\Microsoft Group Policy\Windows 8.1-Windows Server 2012 R2\PolicyDefinitions\ в папку %systemroot%\sysvol\domain\policies\PolicyDefinitions\ 
В последствии эти шаблоны будут автоматически распространены и для других контроллеров домена. А вам необходимо только перезапустить оснастку редактора групповых политик.

Переходим к настройке: Конфигурация компьютера - Политики - Административные шаблоны - Групповая политика - Настроить задержку сценария входа 

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



Теперь наши скрипты будут также успешно работать и в Windows 2012 R2 и Windows 8.1 при загрузке компьютера!

Продолжение: 

GPO AD: Computer Startup scripts and Powershell (часть 2: Создание своего сертификата. Подпись скриптов)

GPO AD: Computer Startup scripts and Powershell (часть 3: PsExec. Ловим ошибки)

Также вы можете посмотреть мои обращения в Microsoft Technet, где мне успешно помогали решать эти задачи. За что коллегам отдельная благодарность!

Запуск f2.ps1 из f1.ps1 и вывод в лог.

Не срабатывает сценарий Logon в GPO для политики Компьютера