Гвидо Грилленмайер (guido.grillenmeier@hp.com) — главный инженер группы Enterprise Services Group компании HP. Имеет сертификаты Microsoft Directory Services MVP, Microsoft Certified Architect

Active Directory (AD) обеспечивает делегирование управления учетными записями пользователей, групп или компьютеров любым субъектом безопасности. Но назначаемые по умолчанию разрешения AD могут затруднить задачу ограничения видимости определенных данных только кругом действительно заинтересованных пользователей. Методы сокрытия данных AD могут основываться на типичных разрешениях AD, особом режиме разрешения AD, именуемом List Mode (режим списка), или малоизвестном параметре — разряде конфиденциальности (confidentiality bit).

. Темами будущих статей станут включение режима List Mode в лесу AD и изменение выбираемых по умолчанию параметров безопасности объектов в AD.

Использование обычных разрешений

С помощью обычных разрешений AD можно ограничить возможности пользователей просмотром и доступом только к выделенным объектам и атрибутам. Принцип прост: если у пользователя нет полномочий на просмотр объекта или атрибута, AD не показывает ему соответствующую информацию.

Для просмотра объектов в организационной единице (OU) пользователю необходимо, по крайней мере, разрешение вывода списка содержимого (List Contents) в данной OU. Как было показано в первой статье цикла, различным субъектам безопасности, в том числе прошедшим проверку пользователям (Authenticated Users), предоставляется разрешение на чтение для любой вновь созданной OU. Этим субъектам также предоставляется разрешение List Contents на организационную единицу, хотя это разрешение не действует в AD по умолчанию. Разрешение на чтение по умолчанию представляет собой комбинацию разрешений, в том числе List Contents, как показано на экране 1.

 

Набор разрешений, обеспечивающий разрешение чтения
Экран 1. Набор разрешений, обеспечивающий разрешение чтения

По умолчанию разрешение List Contents включает достаточные права для перечисления всех объектов в OU. Это не означает, что пользователь может автоматически просматривать атрибуты всех объектов в OU; для этого ему требуется разрешение на чтение соответствующих атрибутов объектов в организационной единице. Но администратор не может определять, какие объекты будут показаны. Этот порядок можно изменить, включив режим списка (List Mode) в AD, как описано в следующем разделе.

Если разрешение List Contents для прошедших проверку пользователей удалено из OU, то запрос всех объектов пользователя в лесу AD не принесет сведений об объектах в этой организационной единице. То же относится к использованию средства выбора объектов Windows для перечисления объектов. Обычно средство выбора объектов применяется для добавления пользователей или групп к выбранному субъекту безопасности при предоставлении разрешений для доступа к ресурсам. По умолчанию средство выбора объектов отображает все объекты в контейнерах, для которых текущий пользователь имеет разрешение List Contents (соответствующие выполняемой пользователем задаче).

Удаление разрешения List Contents для прошедших проверку пользователей из организационной единицы фактически скрывает все объекты в этой OU для всех пользователей в AD, если только пользователи не являются членами других групп, которым назначены соответствующие разрешения. Явный отказ группе в разрешении List Contents приводит к такому же результату. Но чтобы сделать картину более понятной и прозрачной для каждого системного администратора, лучше работать с положительными (разрешить) вместо негативных (отказать) разрешениями; подробнее об этом я расскажу чуть ниже.

Не составляет труда удалить разрешение для одной OU с помощью оснастки Active Directory Users and Computers консоли управления Microsoft Management Console (MMC) или из пользовательского интерфейса ADSI Edit, открыв вкладку Security свойства объекта. Чтобы сделать это из командной строки, можно воспользоваться утилитой Dsacls, поставляемой вместе с операционной системой. Dsacls входит в состав набора вспомогательных инструментов Windows Server. Дополнительные сведения можно найти в статье «Dsacls Syntax»(http://technet.microsoft.com/en-us/library/cc787520%28v=ws.10%29.aspx).

С помощью этой команды нельзя удалить напрямую одно разрешение. Первоначально необходимо удалить все разрешения для соответствующего субъекта безопасности, а затем назначить новые. Обратите внимание, что хотя большинство компаний по-прежнему использует Dsacls, в Windows Server 2008 R2 и более новых версиях появились новые команды AD для Windows PowerShell, о которых рассказано во врезке «Managing Active Directory Permissions via Windows PowerShell». В этих командах предусмотрены новые параметры для управления безопасностью объектов AD.

Не следует легкомысленно относиться к удалению всех разрешений для субъекта безопасности из командной строки, особенно если неизвестно, какими именно разрешениями на объекте располагает субъект безопасности. Сначала следует подготовить отчет о списках управления доступом (ACL) объекта, чтобы при необходимости без труда восстановить их. Это можно сделать с помощью двух инструментов, каждому из которых свойственны свои преимущества и недостатки. Microsoft Dsrevoke обеспечивает хорошие результаты благодаря отчетам о списках ACL для определенного субъекта безопасности. Однако этого нельзя сделать для таких широко известных субъектов безопасности, как Authenticated Users, и для встроенных субъектов, в частности Administrators. Кроме того, инструмент поддерживается только для Windows Server 2003 и предыдущих версий. Dsacls всегда выдает список разрешений для всех субъектов безопасности, как показано на экране 2; это лучше, чем полное отсутствие разрешений.

 

Часть результатов команды Dsacls при перечислении списков ACL на?организационной единице
Экран 2. Часть результатов команды Dsacls при перечислении списков ACL на?организационной единице

Удаление разрешений

Чтобы удалить разрешения List Contents для прошедших проверку пользователей в новой OU, введите следующую команду:

dsacls  /R 

В нашем примере эта команда выглядит так:

dsacls «OU=newOU,DC=root,DC=net» /R «Authenticated Users»

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

dsacls  /G :RCRPLO

В нашем примере команда имеет вид:

dsacls «OU=newOU,DC=root,DC=net» /G «Authenticated Users»:RCRPLO

Чтобы объединить две команды, обычно создают пакетный файл и используют переменные. Чтобы запустить команды с помощью одной инструкции командной строки, введите команду &&:

set DN="OU=newOU,DC=root,DC=net"&& set SP="Authenticated Users"
&& dsacls %DN% /R %SP%&& DSACLS %DN% /G %SP%:RCRPLO

Обратите внимание, что любой символ, предшествующий команде &&, является частью предшествующей команды. Вероятность ошибки возрастает, если предварительно назначена переменная с помощью команды set, и завершающий пробел добавляется к переменной.

В результате этих изменений AD не передаст никаких данных, сохраненных в атрибуте, по запросу пользователя, которому отказано в доступе для чтения к этому атрибуту. В пользовательском интерфейсе AD отображается пустое поле в оснастке Active Directory Users and Computers консоли управления MMC или для значения атрибута при использовании ADSI Edit, как показано на экране 3.

 

Содержимое атрибутов с доступом для чтения (слева) и без доступа для чтения (справа), с?использованием ADSI Edit
Экран 3. Содержимое атрибутов с доступом для чтения (слева) и без доступа для чтения (справа), с?использованием ADSI Edit

Особая проблема управления доступом для чтения на уровне атрибута в AD — следствие группирования атрибутов в наборы свойств разрешений и огромного количества явных разрешений, назначаемых по умолчанию новым объектам в AD.

Предположим, требуется запретить доступ к атрибуту homePhone всем пользователям, кроме сотрудников отдела кадров. В статье «Скрытые данные в Active Directory» отмечалось, что homePhone — один из 47 атрибутов, принадлежащих набору свойств Personal Information, и прошедшим проверку пользователям назначаются разрешения для чтения этого набора свойств любого нового пользовательского объекта в AD. Удалить разрешение для чтения из одного атрибута непросто, если он является членом набора свойств, которому назначено разрешение чтения для объекта. Необходимо удалить разрешение на чтение для всего набора свойств и заменить его отдельным разрешением на чтение для всех свойств, кроме ненужного. Чтобы удалить разрешение, предоставленное прошедшим проверку пользователям для чтения пользовательского атрибута homePhone, необходимо заменить разрешение на чтение для набора свойств Personal Information («Личные сведения») сорока шестью отдельными разрешениями на чтение для всех других атрибутов в наборе свойств. Другой вариант: изменить атрибуты, принадлежащие набору свойств, однако корректировку набора свойств пока отложим.

Хотя в целом рекомендуется избегать запретов разрешений, в данном случае удобно запретить чтение для атрибута homePhone соответствующего пользовательского объекта для группы безопасности, включающей всех пользователей, кроме сотрудников отдела кадров. Назовем эту группу сторонними пользователями. Однако создание и своевременное обновление такой группы — уже само по себе сложная задача. Другая проблема заключается в невозможности просто установить запрет разрешения на уровне OU или домена и разрешить соответствующим объектам пользователя наследовать его. Как описано выше, явное разрешение, предоставленное прошедшим проверку пользователям непосредственно на объекте пользователя, переопределит унаследованное разрешение от родительских объектов. Поэтому необходимо добавить явный запрет чтения для группы сторонних пользователей всем объектам пользователя в лесу AD.

Снова Dsacls

Если вы не хотите назначать запрет разрешения всем объектам, раз за разом щелкая мышью в графическом интерфейсе, эту задачу довольно просто выполнить из командной строки с помощью Dsacls. Поскольку для достижения цели требуется назначить явные разрешения на каждом объекте пользователя, необходимо запустить отдельные команды Dsacls — каждую со своим именем (DN) объекта пользователя, для которого нужно установить запрет разрешения. Существуют различные способы получить список имен DN объектов пользователя: в частности, с помощью инструмента командной строки Dsquery, поставляемого в составе Windows 2003; этим инструментом можно воспользоваться и для запроса к контроллеру домена (DC) Windows 2000, если таковой имеется. Дополнительные сведения о применении Dsquery можно найти на сайте Microsoft.

Чтобы запретить доступ для чтения к атрибуту homePhone на одном объекте пользователя, введите команду:

dsacls  /D :RP;homePhone

Например, команда будет выглядеть так:

dsacls «CN=Doe\, John,OU=newOU,DC=root,DC=net» /D root\
non-HR-users:RP;homePhone

Для нескольких объектов необходимо сначала создать список различающихся имен и сохранить их в файле. Можно применить Dsquery:

dsquery user  > queryresult.txt

Например, команда будет иметь вид:

dsquery user OU=newOU,DC=root,DC=net > queryresult.txt

Затем, убедившись, что результаты запроса соответствуют ожиданиям, необходимо выполнить цикл for, чтобы применить команду Dsacls ко всем объектам в файле:

for /f «delims=» %I in (queryresult.txt) do DSACLS «%~I» /D root\
non-HR-users:RP;homePhone

Эта команда назначает нужное разрешение для всех объектов, перечисленных в файле queryresult.txt.

Итак, используя назначаемые по умолчанию разрешения AD для сокрытия объектов и атрибутов, помните, что:

  • необходимо понимать разрешения по умолчанию и текущие разрешения, назначенные объекту и его родительскому контейнеру; если пользователю не назначено разрешение List Contents на объекте контейнера, то объекты в контейнере невидимы;
  • необходимо понимать механизм назначения разрешений атрибутам через наборы свойств; атрибут невидим, если пользователь не имеет доступа для чтения или доступ запрещен;
  • если нужно назначить запрет разрешения для атрибута и этот атрибут является частью набора свойств, которому явно назначено разрешение, то запрет разрешения для атрибута следует явно назначить всем объектам, на которые он должен влиять.

Границы возможностей

Несомненно, мы можем использовать разрешения AD, чтобы скрыть данные в AD. Существует еще два довольно очевидных способа сокрытия данных: режим List Object и изменение назначаемого по умолчанию дескриптора безопасности объектов в AD. Эти методы будут описаны в следующих статьях, прежде чем мы перейдем к более сложным темам: встроенным наборам свойств, разрешениям атрибутов AD с разрядом конфиденциальности и отфильтрованным наборам атрибутов (FAS).

Экран 1. Набор разрешений, обеспечивающий разрешение чтения

Экран 2. Часть результатов команды Dsacls при перечислении списков ACL на организационной единице

Экран 3. Содержимое атрибутов с доступом для чтения (слева) и без доступа для чтения (справа), с использованием ADSI Edit