ИВАН КОРОБКО, сертифицированный специалист MCP, автор более 50 статей и двух книг. Занимается созданием различных приложений для Active Directory
Управление корзиной
Новый сервис в Active Directory
В Windows Server 2008 R2 реализовано несколько очень важных нововведений. Одно из них – корзина для восстановления учетных записей пользователей
в Active Directory.
Наряду с новой версией DFS, расширением схемы в Active Directory и многим другим в Windows Server 2008 R2, бета-версия которого уже доступна на сайте компании Microsoft [1], не только системный администратор, но и программист найдет один очень интересный сервис, с помощью которого можно восстанавливать удаленные объекты из каталога Active Directory. Создание такого сервиса потребовало от программистов Microsoft серьезной доработки основного инструмента управления этим сервисом – программной оболочки PowerShell и создания модуля для управления каталогом Active Directory (Windows PowerShell Integrated Scripting Environment). С его помощью реализовано управление учетными записями пользователей, групп, контейнеров, корзиной и другими объектами. По умолчанию этот сервис отключен.
Для включения этого сервиса необходимо выполнение следующих условий:
- Операционная система Windows Server 2008 R2 (Standard, Enterprise, DataCenter).
- Домен, функционирующий в режиме Windows Server 2008 R2.
- Windows PowerShell Integrated Scripting Environment (ISE).
- .NET Framework 3.5.1. Устанавливается вместе с операционной системой Windows Server 2008 R2. Необходим для работы Windows PowerShell ISE.
Активировать сервис можно из операционной системы семейства Windows Server 2008 R2 или Windows 7.
Установка PowerShell
Программное управление корзиной (Recycle Bin) и каталогом Active Directory в целом осуществляется с помощью модуля PowerShell [2] для управления Active Directory. В комплект Windows Server 2008 R2 входит Windows PowerShell Integrated Scripting Environment, в который включен этот модуль. По умолчанию PowerShell ISE не установлен.
Рисунок 1. Установка PowerShell ISE
После завершения процесса установки приложения в папке %SystemRoot%\system32\WindowsPowerShell\v1.0\Modules будут расположены дополнительные модули. В частности, в подпапке ActiveDirectory находится модуль управления объектами каталога Active Directory. Привязка модуля к оболочке осуществляется с помощью команды:
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit –ImportSystemModule
По умолчанию выполнение сценариев в PowerShell отключено, поэтому попытка импортировать нужный модуль с установленным по умолчанию уровнем доступа не увенчается успехом.
Существует четыре уровня безопасности запуска сценариев:
AllSigned – все файлы, в том числе и на локальной машине, содержащие сценарии на языке PowerShell, должны иметь цифровую подпись. При запуске файла оболочка задаст вопрос о том, доверяете ли вы данному издателю и можно ли доверять в дальнейшем файлам с этой подписью.
RemoteSigned – все сценарии, находящиеся в сети, должны быть подписаны. Файлы, запускаемые с локальной машины, могут не иметь цифровой подписи.
Restricted (по умолчанию) – выполнение сценариев запрещено.
Unrestricted – все сценарии, запускаемые с локального диска или из сети, могут не иметь цифровой подписи. Запуск файлов из сети сопровождается соответствующим предупреждением. Для его подавления необходимо в свойствах файла выбрать Unblock (разблокировать).
По умолчанию установлен режим Restricted, позволяющий работать с консолью только в интерактивном режиме.
Уровень безопасности задается с помощью параметра реестра ExecutionPolicy. Значение параметра соответствует названию уровня безопасности (см. листинг 1) или командлета Set-ExecutionPolicy, аргументом которого является одно из перечисленных в списке значений (см. рис. 2).
Листинг 1. Настройка параметра безопасности PowerShell по умолчанию
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/PowerShell1/Shell/Ids/Microsoft.PowerShell]
"ExecutionPolicy"="Restricted"
Рисунок 2. Запуск модуля для Active Directory
запускается каждый раз при запуске оболочки PowerShell. На серверах рекомендуется использовать уровень безопасности AllSigned.
Управление режимом функционирования домена
Чтобы активировать новые функции, реализованные в домене, необходимо установить (обновить) новую версию операционной системы на всех контроллерах домена, в данном случае Windows Server 2008 R2, а затем изменить режим функционирования леса на Windows 2008 R2.
Для смены режима функционирования можно воспользоваться одним из способов:
- с помощью командлета Set-ADForestMode в Power Shell ISE;
- с помощью стандартной оснастки.
Изменение режима с помощью PowerShell
Для изменения режима необходимо запустить PowerShell с модулем управления каталогом Active Directory. При выполнении этих условий будет доступен командлет Set‑ADForestMode, имеющий следующий синтаксис:
Set-ADForestMode -Identity <ADForest> -ForestMode <ADForestMode>
где ADForest – DNS-имя домена, а ADForestMode – режим работы леса. В данном случае Windows2008R2Forest (см. рис. 3).
Рисунок 3. Изменение уровня функционирования леса
Замечание: переход леса на новый уровень функционирования необратим.
Изменение режима с помощью графического интерфейса
Для смены режима можно воспользоваться одной из оснасток управления каталогом: Active Directory Users and Computer или Active Directory Domain and Trusts. В появившейся оснастке необходимо вызвать контекстное меню домена и выбрать пункт Raise Domain Functional Level. В выведенном на экран диалогом окне необходимо выбрать нужный уровень домена, например Windows Server 2008 R2, и нажать «Изменить». После завершения работы мастера необходимо перезагрузить контроллер домена.
Рисунок 4. Изменение уровня функционирования домена
Включение Recycle Bin
Для активации корзины используется командлет Enable-ADOptionalFeature, имеющий три атрибута (см. рис. 5):
Identity – значением параметра является составной путь CN=Recycle Bin Feature,CN=Optional Features, CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration, DC=tasmania,DC=ru в домене tasmania.ru.
Scope – область действия корзины. Значение параметра Scope принимает один из трех параметров: Unknown, Domain, ForestOrConfigurationSet. Если домен в лесу один, то необходимо указать наибольшую из областей по смыслу, а именно лес – ForestOrConfigurationSet. Если в качестве области будет указан domain, то при выполнении командлета в этом случае будет выведено сообщение об ошибке.
Target – DNS-имя домена или леса в зависимости от области применения. В данном случае tasmania.ru.
Рисунок 5. Включение корзины в Active Directory
Полный список доступных в модуле командлетов приведен в [2].
Анатомия удаленного объекта
Удаление объекта в каталоге Active Directory осуществляется традиционным образом: с помощью контекстного меню объекта необходимо выбрать пункт Delete и подтвердить выполнение желаемой операции в появившемся окне.
После включения корзины объект попадает в каталог CN=Deleted Objects,DC=tasmania,DC=ru. На рис. 6 приведен пример удаленной группы test. При удалении учетной записи со свойствами объекта происходят следующие преобразования:
- к имени объекта добавляется DEL:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx (см. рис. 6), где xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx – GUID объекта;
- параметру isDelete присваивается значение TRUE. С помощью этого атрибута помечаются удаленные объекты;
- первоначальное местоположение объекта является значением атрибута lastKnownParent.
Все остальные параметры остаются без изменения.
Рисунок 6. Удаленный в корзину объект Active Directory
Управление объектами корзины
Осуществляется с помощью PowerShell или какой-либо графической оболочки, например, ADExplorer [3], Softerra LDAP Browser [4] или Softerra LDAP Administrator [5]. В рамках этой статьи уделим внимание управлению объектов только с помощью PowerShell. Управление корзиной подразумевает просмотр содержимого и восстановление удаленных объектов.
Просмотр содержимого корзины
После включения корзины в Active Directory появляется объект CN=Deleted Objects,DC=tasmania,DC=ru. Как видно из составного пути, он расположен в корне домена. Для просмотра содержимого указанного объекта используется командлет Get-ADObject (см. рис. 7), который имеет два атрибута:
SearchBase – значением этого ключа является составной путь к контейнеру Deleted Objects, который располагается в корневом каталоге пространства defaultNamingContext. Для домена tasmania.ru путь к контейнеру CN=Deleted Objects,dc=tasmania,DC=ru.
IncludeDeletedobjects – присутствие ключа указывает на необходимость вывести объекты, атрибут которых isDeleted=TRUE.
Filter – обязательный ключ. С его помощью задаются критерии поиска. Если необходимо найти все объекты, то в качестве значения необходимо указать звездочку «*».
ldapFilter – применяется, если необходимо использовать традиционный фильтр, например (&(objectClass=group)). Правила написания запросов для поиска в Active Directory см. в [6].
Рисунок 7. Просмотр содержимого корзины
В листинге 2 приведен пример вывода всех учетных записей, имеющих атрибут isDeleted=TRUE. Корзина также имеет этот атрибут, поэтому первой записью в числе найденных будет учетная запись корзины.
Листинг 2. Вывод списка удаленных пользователей
Get-ADObject -SearchBase "CN=Deleted Objects,DC=tasmania, DC=ru" -includeDeletedObjects -filter * | format-table -autosize -property name, distinguishedname
В приведенном примере для удобства восприятия информации использован форматирующий вывод командлет format-table, располагающий выводимые данные в таблице. С помощью ключа autosize осуществляется «укладывание» информации, а с помощью ключа property осуществляется вывод колонки name, а затем distinguishedname.
Восстановление удаленных объектов
Восстановление объектов осуществляется с помощью совместного использования командлета Restore-ADObject. В некоторых случаях, когда необходимо восстановить группу объектов по указанным критериям, используется командлет Get-ADObject в сочетании с Restore-ADObject.
Для восстановления одиночного объекта используется Restore-ADObject. Для однозначной идентификации объекта рекомендуется указать GUID объекта – уникальное 128-битное число (см. листинг 3).
Листинг 3. Восстановление удаленного объекта по его GUID
Restore-ADObject -Identity 27d63f9d-4002-4214-a6b6-49cbf6f4eb49
Для восстановления группы объектов необходимо создать фильтр, это можно сделать двумя способами.
В первом способе используется обычный фильтр PowerShell. Для вызова этого фильтра указывают параметр ldapFilter, после которого в фигурных скобках {...} записывается критерий поиска. При его составлении используются операторы сравнения (см. таблицу 1) и логические операторы (см. таблицу 2).
Таблица 1. Операторы сравнения в PowerShell
Оператор
|
Значение
|
Оператор
|
Значение
|
-eq
|
равно
|
-ne
|
не равно
|
-lt
|
меньше
|
-gt
|
больше
|
-le
|
меньше или равно
|
-gt
|
больше или равно
|
-contains
|
содержит
|
-not contains
|
не содержит
|
Таблица 2. Логические операторы в PowerShell
Оператор
|
Значение
|
Оператор
|
Значение
|
-and
|
И
|
-not
|
НЕ
|
-or
|
ИЛИ
|
!
|
НЕ
|
Критерий поиска формируется по следующему шаблону:
{AD_Attribute EQ_Operator 'AD_Value' LOG_Operator ...}
AD_Attribute – название атрибута;
EQ_operator – оператор сравнения;
AD_Value – значение атрибута, заключаемое в одинарные кавычки;
LOG_Operator – логический оператор.
В листинге 4а приведен пример поиска всех учетных записей групп и их восстановления в соответствующие папки. Эта же операция для группы объектов осуществляется с помощью двух командлетов. Командлет Get-ADObject используется для поиска объектов по указанным параметрам, а затем с помощью оператора конвейера (|) осуществляется восстановление отобранных объектов.
Листинг 4а. Восстановление группы удаленных объектов (использование параметра Filter)
Get-ADObject -SearchBase "CN=Deleted Objects,DC=tasmania,DC=ru" -includeDeletedObjects -Filter {objectClass -eq 'group'} | Restore-ADObject
Рассмотрим второй способ – создание фильтра. Для тех администраторов, которые сталкивались с программированием Active Directory, он будет более понятен, поскольку для него используется LDAP-фильтр, признаком которого служит ключ ldapFilter. В листинге 4б приведен аналогичный пример с использованием другого фильтра [6].
Листинг 4б. Восстановление группы удаленных объектов (использование параметра ldapFilter)
Get-ADObject -SearchBase "CN=Deleted Objects,DC=tasmania,DC=ru" -includeDeletedObjects -ldapFilter "objectClass=group" | Restore-ADObject
В зависимости от поставленной задачи рекомендуется применять тот или иной фильтр. Например, для создания сценария (см. листинг 5), который восстанавливает все объекты, находившиеся в какой-либо папке, лучше всего использовать первый способ, поскольку в формировании фильтра используется значение атрибута lastKnownParent – составного пути к контейнеру, в котором хранился объект до удаления.
Листинг 5. Восстановление группы объектов удаленных из указанной папки
Get-ADObject -SearchBase "CN=Deleted Objects,DC=tasmania,DC=ru" -includeDeletedObjects -Filter {lastKnownParent -eq 'OU=WorkSpace,DC=tasmania, DC=ru'}
***
В последние годы Active Directory претерпевает множество значительных изменений, однако их реализация, в частности, корзина – частичная. Ее может использовать только опытный системный администратор, владеющий навыками программирования на PowerShell, который не так давно появился. Встроенный стандартный графический интерфейс для управления этими объектами отсутствует. Будем надеяться, что к выходу операционной системы в свет Microsoft исправит эти недочеты.
- Дистрибутив Release Candidate Windows Server 2008 R2 – http://www.microsoft.com/windowsserver2008/en/us/R2-Download.aspx.
- Список командлетов PowerShell в модуле для Active Directory – http://go.microsoft.com/fwlink/?LinkID=140056.
- Active Directory Explorer v1.2 (freeware) – http://download.sysinternals.com/Files/AdExplorer.zip.
- Softerra Ldap Browser 2.6 (freeware) – http://www.ldapadministrator.com/download.htm.
- Softerra Ldap Administrator (shareware) – http://www.ldapadministrator.com/download.htm.
- Правила написания фильтров поиска – http://msdn.microsoft.com/ru-ru/library/system.directoryservices.directorysearcher.filter.aspx.