Новые инструменты помогут решить любые задачи

Появление Windows 2000 Active Directory (AD) произвело революцию в области служб каталогов. Однако со временем стал ощущаться недостаток инструментов командной строки для управления AD. К счастью, за время, прошедшее после выхода Windows Server 2003, Microsoft и независимые поставщики разработали новые и обновили существующие инструменты, которые облегчают управление AD. Пять инструментов — AdFind, AdMod, OldCmp, Dsrevoke и AdRestore — считаются незаменимыми среди сторонников использования командной строки. Эти инструменты содержат массу полезных функций и готовы к применению в среде AD.

Даже администраторам, предпочитающим графический интерфейс, следует знать возможности командной строки. Нередко в графическом интерфейсе необходимые функции отсутствуют. Еще один важный аргумент в пользу изучения этих инструментов — возможность управлять ими с помощью простых командных файлов. Утилиты командной строки можно запускать автоматически, пока администратор занят другими делами. Например, простой двустрочный сценарий запускает OldCmp, чтобы автоматически очистить неактивные учетные записи компьютеров и оповестить администратора о результатах операции по электронной почте.

В данной статье рассказывается о том, как повысить эффективность выполнения повседневных задач в среде AD с помощью AdFind, AdMod, OldCmp, Dsrevoke и AdRestore. Все пять инструментов распространяются бесплатно. Если не указано иное, то все они работают как с доменами Windows 2000, так и с Windows 2003.

AdFind

Недавно AdFind была дополнена некоторыми полезными функциями. Это, несомненно, лучший инструмент командной строки для отправки запросов в AD, своего рода расширенная команда Dsquery системы Windows 2003.

Автор AdFind — Джо Ричардс, специалист по AD, а по совместительству — квалифицированный программист. Он создал еще много других удачных утилит (известных как Joeware), в том числе AdMod и OldCmp. AdFind, AdMod и OldCmp можно получить с Web-узла автора (http://www.joeware.net). Обратившись на сайт, следует щелкнуть на ссылке Free Win32 C++ Based Tools.

AdFind располагает многочисленными параметрами — слишком многочисленными, чтобы дать исчерпывающую информацию о них в одной статье. Полный список параметров можно получить с помощью команды

adfind /?

Часто применяется параметр -b, который указывает основное отличительное имя (distinguished name, DN) для начала поиска. Если использовать параметр самостоятельно, то AdFind показывает атрибуты объекта, представленного основным DN, и атрибуты любых объектов, находящихся под основным DN.

AdFind поддерживает все мыслимые параметры стандартных запросов LDAP (Lightweight Directory Access). Параметр -f можно использовать, чтобы указать LDAP-фильтр, совместимый с RFC 2254, а параметр -s — для задания области поиска. Чтобы вывести на экран определенные атрибуты объекта, следует указать эти атрибуты вслед за командой в списке с разделителями пробелами. По умолчанию AdFind отображает все атрибуты, имеющие значения.

Например, предположим, что в организационной единице (OU) Workstations нужно найти объекты типа «компьютер», имена которых начинаются с rallen. Для каждого обнаруженного объекта утилита AdFind должна показать значения атрибутов name и whenCreated. Следует ввести команду

adfind -b «ou=workstations,

dc=rallencorp,dc=com» -f «(&(objectcategory=computer)

(name=rallen*))»

name whenCreated

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

С помощью параметра -h можно обратиться к определенным контроллерам домена (DC), а используя параметр -gc — отправить запрос в Global Catalog (GC). Если требуется провести аутентификацию с учетными данными, отличными от тех, с которыми была выполнена регистрация, следует указать имя пользователя и пароль с помощью параметров -u и -up, соответственно. Если нужно сделать основное имя DN стандартным контекстом именования корневого домена или домена по умолчанию, контекстом именования конфигурации или контекстом именования схемы, можно задействовать параметры -root, -default, -config или -schema соответственно. Если используется один из этих параметров, то параметр -b не нужен. Например, следующая команда опрашивает GC в дереве корневого домена леса обо всех группах, имена которых начинаются с HR:

adfind -gc -root

-f «(&(objectcategory=group)

(name=HR*))» name

Описанные выше функции реализованы практически в каждом инструменте запросов LDAP. Но возможности AdFind расширены:

  • можно выполнить сортировку или обратную сортировку по значению атрибута. Для этого используются параметры -sort и -rsort соответственно;
  • с помощью параметра -showdel можно показать удаленные объекты;
  • параметр -elapsed показывает длительность выполнения запроса;
  • с помощью параметра -tdc можно декодировать значение временного атрибута Large Integer.

Одна из самых примечательных функций AdFind — возможность вывести на экран статистику поиска (Search Stats) запроса. Например, следующая команда отображает информацию Search Stats о предыдущем запросе HR (на этот раз опрашивается GC в выбираемом по умолчанию домене):

adfind -stats+only -default -gc

-f «(&(objectcategory=group)

(name=HR*))» name

На экране 2 показан образец статистических данных. Эта информация может быть чрезвычайно полезной, если нужно диагностировать конкретный запрос или оценить его эффективность. Здесь приводятся отношения числа обнаруженных объектов к числу проверенных объектов, использованные индексы и расширенный фильтр запроса. В Search Stats содержится информация только для доменов Windows 2003.

AdMod

Недавно семейство Joeware было дополнено утилитой AdMod. Ранее я сравнивал AdFind с программой Dsquery, дополненной новыми возможностями. Такую же аналогию можно провести между AdMod и инструментами командной строки Dsmod, Dsmove и Dsrm от Microsoft. Несмотря на эффективность инструментов Microsoft, у них есть два серьезных недостатка. Во-первых, они предназначены для работы лишь с объектами определенных типов. Например, с помощью Dsmod можно изменять только объекты computer, contact, group, OU, server, user, quota и partition. Изменить объект любого другого типа нельзя. Во-вторых, чтобы сократить число символов, вводимых с клавиатуры при использовании этих инструментов, они дополнены такими параметрами, как -samid (запрашивает или устанавливает атрибут samAccountName) и -mgr (запрашивает или устанавливает атрибут manager). Программисты Microsoft руководствовались благими намерениями, предлагая сокращенные названия, но мне они не нравятся, так как приходится связывать в уме samid с samAccountName и mgr с manager. Такие названия могут поставить начинающих в тупик.

AdMod эти недостатки не свойственны. С помощью команды можно изменять (действие, выполняемое по умолчанию), перемещать (параметр -move), переименовывать (параметр -rename), удалять (параметры -del и -treedelete) и восстанавливать объекты после удаления (параметр undel). Функция восстановления после удаления действует только в доменах Windows 2003.

Требуется некоторое время, чтобы научиться изменять объекты, но затем делать это становится очень легко. Чтобы изменить один объект, необходимо указать основное имя DN с параметром -b. В конце команды нужно указать действие над атрибутом в следующем формате:

«Attribute:Operation:Value(s)»

Attribute представляет имя атрибута, который нужно изменить. Operation указывает действие, которое следует произвести над атрибутом. Существует пять возможных действий:

  • добавить однозначный атрибут, в этом случае нужно указать символ «+»;
  • сбросить однозначный или многозначный атрибут, для этого следует указать символ «-»;
  • удалить одно или несколько значений из многозначного атрибута, для этого используется символ «—»;
  • изменить значение однозначного или многозначного атрибута (стандартный вариант), в этом случае символ не указывается.

Value(s) представляет строковое значение или строковые значения, которые нужно обновить, добавить или удалить. Для стандартных операций и операций «+» следует указать только одно значение. Для операций «++» и «—» используется список из нескольких значений с разделением точками с запятой. Для операций «-» никаких значений указывать не требуется.

Например, следующая команда обновляет атрибут scriptpath в сценарии login.vbs для учетной записи пользователя rallen:

admod -b cn=rallen,cn=users,

dc=rallencorp,dc=com

«scriptpath::login.vbs»

Сбросить атрибут scriptpath для того же пользователя можно следующим образом:

admod -b cn=rallen,cn=users,

dc=rallencorp,dc=com

«scriptpath:-:»

Чтобы изменить одновременно группу объектов, можно направить результаты из AdFind в AdMod. Параметр -dsq команды AdFind возвращает только DN соответствующих объектов и помещает каждое имя DN на отдельной строке — идеальный материал для поточного ввода. AdMod может выполнить несколько проходов по списку и изменить каждый объект. Например, в следующей команде AdFind и AdMod сбрасывают значение атрибута scriptpath для всех пользователей стандартного домена:

adfind -default

-f «(&(objectcategory=

person)(scriptpath=*))»

-dsq | admod -unsafe «scriptpath:-:»

Один из компонентов этой команды — параметр -unsafe. Встроенный механизм безопасности AdMod исключает вероятность случайного изменения объектов. По умолчанию AdMod изменяет только 10 объектов за один проход. Однако можно указать параметр -safety и число изменяемых объектов. Чтобы снять любые ограничения, следует использовать параметр -unsafe.

OldCmp

Типичная проблема, с которой рано или поздно сталкивается большинство администраторов AD, — удаление старых (неактивных) учетных записей объектов computer. Нередко учетные записи computer создаются, но не используются или остаются в каталоге после удаления или смены операционной системы. Как правило, проходит некоторое время, прежде чем накапливается значительное число неактивных учетных записей computer, но рано или поздно это случается.

В прошлом удалить эти учетные записи можно было только с помощью сценария. Пример такого сценария приведен по адресу http://www.rallenhome.com/books/adcookbook/code.html, где нужно щелкнуть на ссылке Perl в пункте 8.8. Но теперь существует гораздо более простой метод. С помощью OldCmp можно искать, блокировать и удалять неактивные учетные записи computer. Более того, можно составить простой командный сценарий для автоматизации процесса.

Каким образом OldCmp определяет неактивный компьютер? Компьютеры с операционной системой Windows, входящие в домен, автоматически меняют пароли через каждые 30 дней. Возраст пароля компьютера хранится в атрибуте pwdLastSet объекта computer. Технически можно составить запрос для поиска в AD компьютеров со значением pwdLastSet, превышающим определенное число месяцев. К сожалению, подготовить такой запрос вручную сложно. Значение атрибута pwdLastSet имеет тип Large Integer, поэтому для получения правильного результата необходимы специальные вычисления. Избежать этих трудностей можно с помощью OldCmp.

Утилиты OldCmp и AdFind составлены одним автором, поэтому параметры OldCmp во многом совпадают с AdFind. В частности, описанные выше параметры -b, -h, -s и -f работают также, но в данном случае они используются в качестве поискового критерия для обнаружения учетных записей неактивных компьютеров. Чтобы избежать ошибок, не следует считать компьютер неактивным, пока возраст пароля не превысит 90 дней (принимаемое по умолчанию значение OldCmp). Чтобы наверняка избежать неприятностей, можно считать компьютер неактивным, если возраст пароля превышает 180 дней. Указать возраст пароля, отличный от стандартных 90 дней, можно с помощью параметра -age.

Чтобы использовать OldCmp для поиска, необходимо указать по крайней мере один из трех возможных параметров: -report (генерирует список учетных записей неактивных компьютеров в формате HTML), -disable (блокирует учетные записи неактивных компьютеров) или -delete (удаляет учетные записи неактивных компьютеров). Если запустить OldCmp только с параметров -report, то будут обнаружены все объекты computer в домене с паролем, возраст которого превышает 90 дней, и будет составлен HTML-отчет о результатах операции. В крупном домене с большим числом компьютеров выполнение команды займет довольно много времени. Чтобы ускорить поиск, можно обратиться к определенной OU с помощью параметра -b.

Генерируемый HTML-файл будет помещен в тот же каталог, из которого был запущен инструмент, если не указана иная папка с помощью параметра -file. Если указан параметр -sh, то OldCmp автоматически открывает созданный HTML-файл.

Чтобы регулярно составлять HTML-отчеты, достаточно подготовить командный (.bat) файл, который содержит две строки исходного текста (листинг 1). Первая строка запускает OldCmp, а вторая строка запускает Blat, инструмент командной строки для пересылки содержимого файла в почтовое сообщение. Blat можно загрузить с сайта http://blat.net. Во второй строке необходимо указать в параметре -to свой адрес электронной почты. Кроме того, путь к OldCmp и Blat должен быть указан в переменной среды PATH.

После того как командный файл будет готов, необходимо создать плановое задание. Для задания нужно указать пользователя и пароль доменной учетной записи, чтобы сценарий располагал достаточными полномочиями для опроса объектов computer в домене.

Идентифицировать неактивные компьютеры полезно, но на определенном этапе их учетные записи следует удалить. Общая рекомендация — сначала блокировать неактивные учетные записи computer, а спустя неделю или месяц удалить блокированные учетные записи. Период ожидания позволяет убедиться, что эти учетные записи никто не использует.

В листинге 2 содержится командный файл, который удаляет блокированные учетные записи computer и блокирует вновь обнаруженные неактивные учетные записи. В этом командном файле имеется две группы команд (изменять их порядок нельзя). В первой группе OldCmp используется для удаления всех блокированных учетных записей computer и генерации отчета deleted_comps.html. Затем команда Blat пересылает отчет по электронной почте в rallen@rallenhome.com. Во второй группе команд OldCmp блокирует все учетные записи computer, чьи пароли старше 180 дней, и генерирует отчет disabled_comps.html, который затем пересылается по электронной почте с помощью Blat.

Чтобы администраторы случайно не удалили и не блокировали тысячи учетных записей, при подготовке OldCmp было предусмотрено несколько мер безопасности, в том числе параметры -safety и -forreal, которые указаны в обеих группах команд. Параметр -safety ограничивает число учетных записей, удаляемых или блокируемых сценарием. По умолчанию OldCmp удаляет или блокирует не более 10 учетных записей. Указав параметр -safety со значением 100, можно удалить 100 учетных записей. Параметр -forreal разрешает удалить или блокировать учетные записи. Без параметра -forreal OldCmp просто сообщает об учетных записях, которые могут быть удалены или блокированы, но в действительности не производит над ними никаких операций.

Перед использованием командного файла в листинге 2 необходимо указать конкретный почтовый адрес в двух командах Blat. Кроме того, требуется удалить параметр -forreal из двух команд OldCmp, а затем выполнить тест, чтобы убедиться, что OldCmp верно удаляет и блокирует учетные записи.

Dsrevoke

Часто приходится слышать одобрительные отзывы о функции делегирования административных полномочий AD. Для конкретного субъекта безопасности (security principal) доступ можно ограничить вплоть до уровня атрибутов. Microsoft предоставляет мастера Delegation of Control Wizard, который автоматизирует процесс делегирования административных полномочий для определенных типов заданий. С помощью редактора ACL можно выполнить еще более глубокую настройку списков управления доступом.

Делегировать права доступа к определенной учетной записи легко, но отменить делегирование — непросто, по крайней мере так было до недавнего времени. Microsoft подготовила инструмент Dsrevoke, с помощью которого можно организовать циклическую обработку содержимого OU и удалить все элементы управления доступом (access control entry, ACE), содержащие определенный субъект безопасности. Поэтому, например, если организован сложный механизм делегирования для группы Help Desk, то с помощью Dsrevoke можно вернуться назад и удалить все ACE, содержащие субъект безопасности Help Desk. Такая функциональность полезна, поэтому следует безотлагательно загрузить Dsrevoke с www.microsoft.com/downloads.

С помощью Dsrevoke можно отыскивать (параметр /report) или удалять (параметр /remove) ACE с определенным субъектом безопасности. Запуская Dsrevoke, можно указать параметр /report или /remove, а затем использовать параметр /root, чтобы указать начальный корневой каталог для операций поиска или удаления. Команда заканчивается именем субъекта безопасности, который нужно отыскать или удалить. Например, следующая команда отыскивает в OU Workstations все ACE, содержащие субъекта безопасности Data Admins:

dsrevoke /report /root:ou=workstations,

dc=rallencorp,dc=com

«RALLENCORPData Admins»

Как показано на Экране 3, в Workstations OU имеется два ACE, содержащие субъект безопасности Data Admins. Чтобы удалить эти ACE, следует запустить ту же команду, лишь заменив /report параметром /remove:

dsrevoke /remove /root:ou=workstations,

dc=rallencorp,dc=com

«RALLENCORPData Admins»

Результат будет таким же, как и прежде, только появится запрос, нужно ли удалить элементы ACE.

Следует помнить об одном ограничении: Dsrevoke работает только с OU или корневым каталогом домена. Команду нельзя применять к таким контейнерам, как Computers (cn=Computers) или Users (cn=Users).

AdRestore

Что случается с объектом в AD после его удаления? Объект не исчезает полностью, а получает метку на удаление (tombstone). Спустя 60 дней (принимаемое по умолчанию время существования метки) объект, имеющий tombstone, удаляется окончательно.

До выпуска Windows 2003 способа восстановить такой объект не существовало. В настоящее время можно, по крайней мере, частично, восстанавливать удаленные объекты, и сделать это с помощью утилиты AdRestore компании Sysinternals (http://www.sysinternals.com/ntw2k/source/misc.shtml) очень просто.

Чтобы составить список всех удаленных объектов в текущем домене, следует запустить AdRestore без параметров:

adrestore

На экране 4 показан пример результатов выполнения команды.

Восстановить объект с меткой на удаление можно с помощью параметра -r, за которым следует имя восстанавливаемого объекта. Например, следующая команда восстанавливает учетную запись пользователя John Billings:

adrestore -r «John Billings»

Результаты работы команды будут похожи на представленные на экране 4, но появится запрос, следует ли восстановить объект. Как упоминалось ранее, AdRestore лишь частично восстанавливает объект. Восстановленный объект не сохраняет всех атрибутов исходного объекта.

Все, что нужно администратору

AdFind, AdMod, OldCmp, Dsrevoke и AdRestore резко повышают эффективность труда администратора при работе с AD. Благодаря этим мощным инструментам командной строки упрощается выполнение когда-то утомительных и трудных задач. А поскольку эти средства распространяются бесплатно, было бы непростительно упустить возможность дополнить ими инструментальный набор администратора.


Учебные материалы

РЕСУРСЫ MICROSOFT

Серия статей Microsoft Active Directory с информацией об AD: http://www.microsoft.com/seminar/events/ series/adaug.mspx


Робби Аллен (rallen@cisco.com) - системный архитектор и программист в ИТ- департаменте Cisco Systems. Один из авторов книги «Managing Enterprise Active Directory Services» (Addison-Wesley)

Поделитесь материалом с коллегами и друзьями