Статьи

Занурення в шаблони і приручення GPO Windows

У черговій статті з циклу «конспект адміна» мені хотілося б освіжити в пам'яті кілька нюансів використання групових політик

У черговій статті з циклу «конспект адміна» мені хотілося б освіжити в пам'яті кілька нюансів використання групових політик. Заодно порозважатися зі створенням своїх шаблонів і з автоматизацією роботи з цими самими політиками.



Я не буду розповідати, що таке групові політики, і зупинюся лише на основних моментах, які варто мати на увазі при роботі з ними.


У системах Windows крім доменних існують і локальні групові політики - управляти ними можна за допомогою оснастки gpedit.msc на системах редакції Professional і вище. Часто вважається, що без домену можна налаштовувати локальні групові політики тільки для всіх користувачів на комп'ютері. Це не зовсім вірно - з виходом Windows Vista з'явилася можливість використовувати множинну локальну групову політику або MLGPO. Цей механізм дозволяє налаштовувати окремі політики для різних користувачів.


Дістатися до нього можна через виклик консолі mmc: при додаванні оснащення «Управління об'єктами групової політики» натиснути кнопку «Огляд». Далі на вкладці «Користувачі» вже можна вибрати конкретного користувача або групу «Адміністратори» і «Не адміністратори». На жаль, управління для групи користувачів не реалізовано.


Управління груповою політикою для окремих користувачів
Управління груповою політикою для окремих користувачів.


Бувало й так, що на окремій термінальному сервері розгортали Active Directory тільки для того, щоб окремому користувачеві налаштувати поведінку драйвера для EasyPrint. Не треба так.

При додаванні доменних групових політик варто пам'ятати про порядок їх застосування - політика, застосована останньої, буде володіти найвищим пріоритетом (та й на співбесідах часто запитують).


Отже, припустимо, що у нас є комп'ютер в домен і чотири групові політики: локальна на цьому комп'ютері; політика на підрозділ, в якому знаходиться комп'ютер; політика на домен і політика на ліс. Порядок їх застосування буде наступним:


  1. Локальна групова політика.
  2. Групова політика сайту.
  3. Групова політика домену.
  4. Групова політика верхнього підрозділу.
  5. Групова політика дочірнього підрозділу.

Тобто чим ближче до об'єкта, тим приоритетнее, за винятком локальної групової політики. Якщо треба відключити застосування вищих політик, то ставте блокування успадкування.


Блокування спадкування
Блокування спадкування.


Будь-яку групову політику можна умовно розділити на дві конфігурації - користувача і комп'ютера. Зазвичай політики з настройками комп'ютерів призначаються на підрозділ, в якому знаходяться комп'ютери. А політики з настройками користувачів - на користувачів.


Якщо треба застосувати настройки комп'ютера до підрозділу з користувачами і навпаки, використовують так зване замикання групової політики. Наприклад, така настройка знадобиться, коли потрібно застосувати специфічні політики до користувачів для роботи на термінальних серверах.


Робота замикання налаштовується безпосередньо в політиці - «Налаштування комп'ютера - Адміністративні шаблони - Система - Режим обробки замикання користувальницької групової політики». Детальніше про механізм вже писали в статті про використання Merge \ Replace в GPO . Я лише додам, що режим замикання групової політики - теж частий питання на співбесіді.


Налаштування замикання групової політики
Налаштування замикання групової політики.


Фізично доменні групові політики знаходяться в папці SYSVOL на контролерах домену. Папка реплицируется між контролерами. Кожна групова політика виглядає як папка з ім'ям у вигляді GUID.


Групові політики домену
Групові політики домену.


Правила фільтрації, настроюються через редактор групової політики, такі самі прав NTFS на відповідну підпапку.


Говорячи про правила фільтрації, не можна не згадати оновлення MS16-072, яке «зламало» групові політики. Тепер для того щоб працювали правила фільтрації, треба додавати до кожного фільтру правило «на читання», але не «на застосування» групі Domain Computers.

В одній папці з груповою політикою існують подпапки Machine і User, відповідні налаштувань користувача і комп'ютера. Якщо заглибитися в папки, можна легко зрозуміти структуру групової політики:


  • У корені папки знаходиться файл GPT.ini з настройками групової політики, такими як її назва.
  • У підпапках Machine і User сидять файли registry.pol з настройками відповідних гілок реєстру.
  • По дорозі Microsoft \ Windows NT \ SecEdit можна знайти шаблон налаштувань безпеки - GptTmpl.inf.
  • В папці Preferences знаходяться переваги групових політик, що вдають із себе подпапки з файлами xml.
  • У папці Applications сидять дистрибутиви для розгортання через групові політики.
  • В папці Scripts знаходяться скрипти на logon \ logoff для користувача і startup \ shutdown для комп'ютера.
  • В папці Documents and Settings є налаштування перенаправлення користувача тек.
  • Нарешті, в папці Adm знаходяться застарілі шаблони групової політики.

Детальніше про структуру можна почитати в матеріалі Group Policy Basics , Тому перейдемо відразу до шаблонів.



По суті своїй адміністративні шаблони - це спеціальні файли з інструкціями зі зміни клієнтського реєстру (гілки HKCU або HKLM) і настройками відображення змінних параметрів через «Управління груповою політикою». В принципі, реєстр можна міняти і через «Уподобання групових політик». Але різниця тут не тільки в красивому інтерфейсі.


Спосіб зміни реєстру Як поводиться при видаленні політики зі стандартними настройками можна змінити параметр вручну можна змінити параметр через додаток Шаблони Параметр реєстру відновлюється на значення «за замовчуванням», якщо настройки за замовчуванням є в шаблоні - - Уподобання політик Параметр реєстру не змінюється + +

Порівняння переваги групових політик і адміністративних шаблонів.


Іншими словами, настройка реєстру через шаблони групових політик більш сувора. Тоді як настройка через переваги групових політик нагадує періодичне застосування reg-файлу. Звичайно, переваги дозволяють не тільки міняти параметри реєстру, а й досить гнучко налаштовуються. Тим і цінні.


Це актуально при зміні гілки Policies, і настроюється програма має зберігати свої настройки в реєстрі. Просте зміна параметрів через Уподобання та Шаблони буде працювати схожим чином, тільки шаблони можуть виявитися зручніше.

До появи Windows Vista \ 2008 рік в якості шаблону групових політик брали виключно стандарт .adm. Будучи з простою структурою, яку було легко редагувати вручну, цей стандарт мав і ряд недоліків:


  • Для кожної мови доводилося створювати окремий файл шаблону.
  • Файл шаблону фізично перебував у папці з груповою політикою. При використанні одного і того ж шаблону він зберігався в кожну папку, що збільшувало займане місце і час реплікації.
  • Чи не підтримувалися мультістроковие параметри і параметри QWORD.

На заміну застарілого стандарту з'явився новий. Нові шаблони представляють собою два файли: сам шаблон, незалежний від мови - .admx і мовної «пакет» до нього - файл .adml. Тепер шаблони можна «покласти» в центральне сховище, і звертатися до нього, не виплоджуючи однакові файли в папці SYSVOL.


Не обійшлося без ложки дьогтю - тепер вміст файлу являє собою популярний в індустрії формат XML. І створювати нові шаблони в блокноті стало вже не так зручно.


Під більшість параметрів, які можуть знадобитися, шаблони вже існують. Крім того, багато виробників додатків випускають свої адміністративні шаблони. Ось кілька прикладів:



Якщо виникає необхідність розробити і впровадити свій адміністративний шаблон, то найпростіший варіант - це створити старий файл .adm і конвертувати його в admx спеціальної утилітою . Варіант складніше - починати відразу з .admx.



Для початку розберемо простий приклад. Створимо шаблон групової політики, який дозволить нам включати і вимикати відображення прихованих і системних файлів, а заодно і відображення розширень.


Відразу скажу, що це можна провернути через «Уподобання групових політик» - в параметрах панелі управління - опції папки. Але ми легких шляхів не шукаємо і заодно не хочемо, щоб параметри відображення можна було міняти вручну.

За необхідні нам параметри відповідають три ключа в реєстрі:


  • Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Advanced \ Hidden.
  • Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Advanced \ HideFileExt.
  • Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Advanced \ ShowSuperHidden.

Вміст ADM-шаблону, який розберемо далі, під спойлером.

CLASS USER CATEGORY !! ShowExplorer POLICY !! ShowHiddenFiles KEYNAME "Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Advanced" EXPLAIN !! ShowHiddenFilesExplanation VALUENAME "Hidden" VALUEON NUMERIC "1" VALUEOFF NUMERIC "2" END POLICY POLICY !! ShowFileExtensions KEYNAME " Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Advanced "EXPLAIN !! ShowFileExtensionsExplanation VALUENAME" HideFileExt "VALUEON NUMERIC" 0 "VALUEOFF NUMERIC" 1 "END POLICY POLICY !! ShowSuperHiddenFiles KEYNAME" Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Advanced " EXPLAIN !! ShowSuperHiddenFilesExplanation VALUENAME "ShowSuperHidden" VALUEON NUMERIC "1" VALUEOFF NUMERIC "0" END POLICY END CATEGORY [strings] ShowExplorer = "Відображення файлів в провіднику" ShowHiddenFiles = "Показувати приховані файли" ShowHiddenFilesExplanation = "Коли ця настройка включена, провідник буде показувати приховані файли. " ShowSuperHiddenFiles = "Показувати системні файли" ShowSuperHiddenFilesExplanation = "Коли ця настройка включена, провідник буде показувати системні файли" ShowFileExtensions = "Показувати розширення файлів" ShowFileExtensionsExplanation = "Коли ця настройка включена, провідник буде показувати розширення файлів"

Розберемо докладніше синтаксис файлу.


  • CLASS. Може приймати значення USER або MACHINE - в залежності від класу буде зміняться гілка реєстру HKCU або HKLM відповідно.
  • CATEGORY. Рядок, в якій задається ім'я «папки» політики.
  • POLICY. У рядку задається назва конкретної політики - у нас таких буде три.
  • KEYNAME. Шлях в реєстрі до змінним параметрами.
  • EXPLAIN. Відсилання до «змінної» з поясненням настройки.
  • VALUENAME. Назва змінюваного параметра в реєстрі.
  • VALUEON ** VALUEOFF **. Значення, яке буде приймати параметр при включенні і виключенні його в політиці.
  • [strings]. Секція зі значеннями змінних, які я використовував для текстових рядків. Можна їх не використовувати, але тоді можуть бути проблеми через російської мови.

Крім задіяних опцій є й інші, наприклад:


  • EDITTEXT. Текстове поле для введення.
  • NUMERIC. Поле для введення цифр.
  • CHECKBOX. Список, де можна відзначати параметри «галочками».
  • COMBOBOX. Список з «перемикачем»
  • DROPDOWNLIST. Випадаючий список.
  • LISTBOX. Список для введення декількох елементів.

Детальніше з усіма параметрами можна ознайомитись в розділі MSDN ADM Format .


Встановити новий шаблон не просто, а дуже просто - достатньо натиснути правою кнопкою миші по пункту «Адміністративні шаблони», вибрати «Додати або видалити шаблони» і додати наш свіжостворений шаблон.


Доданий шаблон
Доданий шаблон.


Після установки шаблону він відобразиться в гілці «Класичні адміністративні шаблони».



Тепер можна конвертувати наш шаблон в .admx за допомогою утиліти faAdmxConv з ADMX Migrator .


Конвертуємо шаблон
Конвертуємо шаблон.


Після конвертації вийшов шаблон .admx і папку Ru-ru з файлом локалізації .adml потрібно скопіювати в папку% Systemroot% \ PolicyDefinitions для локальної політики або в папку Sysvol \ PolicyDefinitions на контролері домену.


Встановлений шаблон
Встановлений шаблон .admx.


Повний лістинг отриманого шаблону і файлу локалізації під спойлером.

шаблон:


<? Xml version = "1.0" encoding = "utf-8"?> <PolicyDefinitions revision = "1.0" schemaVersion = "1.0"> <policyNamespaces> <target prefix = "fullarmor" namespace = "FullArmor.6fb075d6-ddee-4302 -9d06-50c4d83e1910 "/> <using prefix =" windows "namespace =" Microsoft.Policies.Windows "/> </ policyNamespaces> <supersededAdm fileName =" E: \ 1 \ explorer.adm "/> <resources minRequiredRevision =" 1.0 "/> <supportedOn> <definitions> <definition name =" SUPPORTED_NotSpecified "displayName =" $ (string.ADMXMigrator_NoSupportedOn) "/> </ definitions> </ supportedOn> <categories> <category name =" ShowExplorer "displayName =" $ (string.ShowExplorer) "/> </ categories> <policies> <policy name =" ShowHiddenFiles "class =" User "displayName =" $ (string.ShowHiddenFiles) "explainText =" $ (string.ShowHiddenFilesExplanation) "presentation = "$ (presentation.ShowHiddenFiles)" key = "Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Advanced" valueName = "Hidden"> <parentCategory ref = "ShowExplorer" /> <supportedOn ref = "SUPPORTED_NotSpecified" /> <enabledValu e> <decimal value = "1" /> </ enabledValue> <disabledValue> <decimal value = "2" /> </ disabledValue> </ policy> <policy name = "ShowFileExtensions" class = "User" displayName = " $ (string.ShowFileExtensions) "explainText =" $ (string.ShowFileExtensionsExplanation) "presentation =" $ (presentation.ShowFileExtensions) "key =" Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Advanced "valueName =" HideFileExt "> <parentCategory ref = "ShowExplorer" /> <supportedOn ref = "SUPPORTED_NotSpecified" /> <enabledValue> <decimal value = "0" /> </ enabledValue> <disabledValue> <decimal value = "1" /> </ disabledValue> </ policy> <policy name = "ShowSuperHiddenFiles" class = "User" displayName = "$ (string.ShowSuperHiddenFiles)" explainText = "$ (string.ShowSuperHiddenFilesExplanation)" presentation = "$ (presentation.ShowSuperHiddenFiles)" key = "Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Advanced "valueName =" ShowSuperHidden "> <parentCategory ref =" ShowExplorer "/> <supportedOn ref =" SUPPORTED_NotSpecified "/> <enabledValue> <decimal valu e = "1" /> </ enabledValue> <disabledValue> <decimal value = "0" /> </ disabledValue> </ policy> </ policies> </ policyDefinitions>

Файл локалізації:


<? Xml version = "1.0" encoding = "utf-8"?> <PolicyDefinitionResources revision = "1.0" schemaVersion = "1.0"> <displayName> </ displayName> <description> </ description> <resources> <stringTable> <string id = "ShowExplorer"> Відображення файлів в провіднику </ string> <string id = "ShowHiddenFiles"> показувати приховані файли </ string> <string id = "ShowHiddenFilesExplanation"> Коли ця настройка включена, провідник буде показувати приховані файли. </ string> <string id = "ShowSuperHiddenFiles"> показувати системні файли </ string> <string id = "ShowSuperHiddenFilesExplanation"> Коли ця настройка включена, провідник буде показувати системні файли </ string> <string id = "ShowFileExtensions"> показувати розширення файлів </ string> <string id = "ShowFileExtensionsExplanation"> Коли ця настро ка включена, провідник буде показувати розширення файлів </ string> <string id = "ADMXMigrator_UnresolvedString"> ADMX Migrator encountered a string that is not present in the source ADM string table. </ string> <string id = "ADMXMigrator_NoSupportedOn"> ADMX Migrator encountered a policy that does not have a supportedOn value. </ string> </ stringTable> <presentationTable> <presentation id = "ShowHiddenFiles" /> <presentation id = "ShowFileExtensions" /> <presentation id = "ShowSuperHiddenFiles" /> < / presentationTable> </ resources> </ policyDefinitionResources>

Дійсно, xml в новому форматі читається трохи гірше, ніж старий .adm. Для полегшення роботи з новим форматом в постачанні ADMX Migrator є утиліта faAdmxEditor.msc. Крім цієї утиліти є і скрипти для конвертації reg-файлів в шаблони, і сторонні платні утиліти.


Звичайно ж, можна обійтися без ось-цього-всього і розібратися самостійно - залишу це в якості домашнього завдання. Благо на порталі MSDN є докладний опис XML-схеми , І є непогані матеріали з прикладами в мережі. Наприклад, « Адміністративні шаблони групової політики ».


Тепер перейдемо до автоматизації.



Працювати з груповими політиками з командного рядка досить сумно. Основних інструментів можна виділити три.


PowerShell. є набір командлетів для резервного копіювання, відновлення і управління груповими політиками. Створення нових політик обмежена - можна лише змінювати реєстр. Втім, в більшості випадків і цього досить. Як приклад створимо групову політику, яка відключить автоматичне оновлення Adobe Reader DC.


За вимкнути автоматичне оновлення відповідає ключ реєстру bUpdater в гілці [HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Adobe \ Acrobat Reader \ DC \ FeatureLockDown]. Встановивши параметр в 0, ми відключимо опцію.


Створення групової політики на PowerShell буде виглядати так:


Import-module -Name GroupPolicy Write-Host "Створюємо новий об'єкт політики з ім'ям Adobe_Reader_disable_autoupdate" New-GPO -Name Adobe_Reader_disable_autoupdate Write-Host "Додаємо потрібне нам значення реєстру" Set-GPRegistryValue -Name "Adobe_Reader_disable_autoupdate" -key "HKLM \ SOFTWARE \ Policies \ Adobe \ Acrobat Reader \ DC \ FeatureLockDown "-ValueName bUpdater -TypeDWord -value 0 Write-Host" прілінковивают новий об'єкт до потрібного OU "Set-GPLink -Name Adobe_Reader_disable_autoupdate -Target" ou = Computers, dc = domain, dc = com " -LinkEnabled Yes


Новоствореного групова політика.


Повний список і опис командлетів доступні в матеріалі Technet Group Policy Cmdlets in Windows PowerShell .


Інтерфейс COM до GPMC (консолі керування груповою політикою). Спосіб дозволяє зробити з політиками багато, на будь-якій мові програмування, що підтримує COM-інтерфейси. На жаль, популярність він не придбав і прикладів в мережі досить мало, незважаючи на багату опис методів інтерфейсу на порталі MSDN. Нечисленні приклади використання доступні для завантаження в галереї Technet.


LGPO.exe. Не так давно Microsoft замінив набір утиліт для роботи з локальними груповими політиками на єдину утиліту. Завантажити її можна на офіційному сайті . Утиліта зручна для копіювання та розгортання локальних групових політик. Заявлена ​​і підтримка MLGPO. Створювати свої політики теж можна. Також програма зручна для створення і зміни файлів реєстру registry.pol. Для прикладу змінимо локальну групову політику, додавши в неї відключення поновлення нещасного Acrobat Reader DC.


Зробимо бекап локальної групової політики командою


lgpo.exe / b C: \ Temp / n "Backup"

У папці C: \ Temp з'явиться підпапка з GUID за структурою схожа з доменними груповими політиками:


Тепер розгорнемо registry.pol в текстовий файл:


LGPO.exe / parse / m C: \ temp \ {GUID} \ DomainSysvol \ GPO \ Machine \ registry.pol >> reg.txt

Синтаксис текстового файлу очевидний. Додамо в нього значення реєстру для відключення автоматичного поновлення «Акробата»:


Доданий в файл параметр реєстру
Доданий в файл параметр реєстру.


Тепер залишиться загорнути наш reg.txt назад в registry.pol і імпортувати змінився файл назад в локальну групову політику:


LGPO.exe / r C: \ Temp \ reg.txt / w C: \ Temp \ registry.pol LGPO.exe / m C: \ Temp \ registry.pol

Всі ці махінації, звичайно ж, можна загорнути в один скрипт і використовувати для масового зміни локальної групової політики звичним інструментом для запуску команд на віддалених комп'ютерах. Детальніше про методи запуску команд можна почитати в нашій статті «1000 ++ спосіб запуску команд на віддаленому комп'ютері» .


Звичайно ж, знаючи структуру доменної групової політики, ніщо не заважає зробити зручний саме вам інструмент для створення і управління політиками. Поділіться в коментарях, чи є у вас свої способи настройки реєстрів для користувача машин?

Encoding = "utf-8"?
Encoding = "utf-8"?
Поділіться в коментарях, чи є у вас свої способи настройки реєстрів для користувача машин?

Новости