Как на этапе разработки, так и в промышленной эксплуатации доменные и локальные группы безопасности я рассматриваю как фундамент механизма назначения разрешений. В некоторых случаях я могу назначать те или иные разрешения отдельным пользователям, однако более правильным подходом при их назначении мне представляется назначение необходимых разрешений группам и последующее добавление соответствующих пользователей в эти группы. Причем, если требуется лишить пользователя каких-либо разрешений, достаточно исключить его из соответствующей группы. Для дальнейшего упрощения процесса управления локальными группами можно использовать сценарии. С их помощью можно быстро получать информацию о членстве в тех или иных группах, добавлять и удалять членов группы, а также изменять свойства групп.
В сценариях командной строки для работы с группами можно задействовать несколько специальных утилит — Findgrp, Cusrmgr, MemberOf и LG. Информация о том, как использовать эти утилиты и где их найти, приведена в таблице. Опубликованный ниже список ответов на часто задаваемые вопросы поможет выбрать оптимальный способ применения этих программных средств для конкретного случая. Чтобы показать, как пользоваться этими программными средствами, приведу примеры применения пяти сценариев. В этих примерах используется далеко не вся функциональность предложенных утилит, более полную информацию об их возможностях можно получить из встроенной справочной системы каждой из них.
Утилиты Local, Findgrp и Cusrmgr входят в состав пакетов Resource Kit. Microsoft часто публикует утилиты из пакетов Resource Kit предыдущих выпусков для свободного использования. К сожалению, на данный момент утилиты Local, Findgrp и Cusrmgr не являются свободно распространяемыми, получить их можно только в составе одного из пакетов Resource Kit. Или же надо периодически заглядывать на сайт Microsoft, ожидая, когда они станут доступными. Что касается утилит MemberOf и LG, то их можно найти на Web-сайте Joeware.net.
Часто задаваемые вопросы
В. Являются ли сегодня утилиты Global и Local эффективным инструментом для работы с содержимым групп? Мне необходим сценарий, с помощью которого можно собрать информацию о членах локальных групп Administrators, Backup Operators и Power Users с перечисленных в списке компьютеров или серверов сети моей компании. Какую утилиту можно для этого использовать и как записать результаты в файл?
О. Утилита Local по-прежнему актуальна, и я часто ею пользуюсь. Утилиту Global я практически не применяю, поскольку не работаю с глобальными группами так часто, как большинство администраторов. До выхода операционной системы Windows 2000 утилиты Global и Local поставлялись в составе пакетов Resource Kit. Одно из ограничений утилиты Local состоит в том, что она не может работать со вложенными группами, поэтому с помощью команды Local нельзя получить информацию о членах какой-либо группы, если она является вложенной. Иногда это ограничение может быть принципиальным, иногда нет. Следует также отметить, что утилита Local представляет собой лишь средство построения запросов, изменять какие-либо параметры групп с ее помощью нельзя. И тем не менее в некоторых ситуациях этот традиционный инструмент по-прежнему успешно используется.
Что касается упомянутого в вопросе сценария, то информацию о членах групп можно получить несколькими способами. Мы не знаем, с каким количеством систем приходится иметь дело, поэтому в сценарии GetAdministratorsAndOtherKeyGroups.bat, приведенном в листинге 1, показаны два способа получения данных о членстве в группах с помощью утилиты Local. Подход, применяемый для получения этой информации на большом количестве компьютеров, иллюстрируется фрагментом кода с меткой A листинга 1. Меткой B на листинге 1 обозначен фрагмент кода, показывающий, как можно получить эти же данные для небольшого количества опрашиваемых компьютеров.
В. Мне нужно изменить описания нескольких локальных групп. Мы включаем в описание группы номер телефона ее владельца. Если необходимо изменить этот номер, приходится искать все группы, владельцем которых является данный пользователь, после чего изменять номер вручную. При этом не нужно изменять весь текст комментария, поскольку он содержит и другую информацию о группе. Мне кажется, что я могу существенно сэкономить время, если использую для процедуры изменения телефона сценарий, но я не знаю, какую утилиту использовать для этих целей и как реализовать сценарий так, чтобы он изменял только номер телефона, сохраняя остальное содержимое поля комментария без изменений.
О. В данном случае можно воспользоваться LG, утилитой модификации локальных групп от Joeware.net. Про утилиту LG можно сказать, что это более мощный вариант утилиты Local. Как можно использовать эту утилиту, показано в сценарии CommentReplace.bat (см. листинг 2). Сценарий выполняет поиск номера телефона, который указывается в строке с меткой А (листинг 2). Для замены найденного телефонного номера на новый в сценарии используется команда подстановки Set (см. фрагмент с меткой B, листинг 2). Более подробно с возможностями утилиты LG можно ознакомиться через ее встроенную справочную систему.
В. Мне нужно создать простой сценарий, который позволял бы нашей службе поддержки пользователей просматривать или сравнивать содержимое групп в случае проблем, связанных с отсутствием доступа. Какую утилиту я должен использовать в этом сценарии и есть ли способ сделать его более удобным для пользователей, не имеющих опыта работы со сценариями?
О. Наиболее типичным инструментом для поиска информации о членстве пользователей в группах традиционно является команда Findgrp. Как и Local, утилита Findgrp была написана до появления Windows 2000 и вложенных групп, поэтому она может предоставлять информацию только о прямом членстве в группах. Но в некоторых случаях этого вполне достаточно. Мне неизвестно, насколько подробную информацию в данном случае желательно предоставить специалистам службы технической поддержки, поэтому я написал два сценария. Показанный в листинге 3 сценарий FindUserLocalGroups.bat извлекает с помощью утилиты Findgrp информацию о прямом членстве в группах.
В сценарии MemberOf-SorterandCounter.bat, показанном в листинге 4, используется утилита MemberOf от Joeware.net, с помощью которой извлекается информация как о прямом членстве в группах, так и о членстве во вложенных группах.
Для функционирования обоих сценариев необходим ввод пользовательских данных, для чего в них применяется конструкция Set/P. Затем введенные данные записываются в соответствующую переменную. Например, при запуске сценария FindUserLocalGroups.bat на экран выводится подсказка Type the domainUserID and press Enter: (Введите <имя домена><имя пользователя>), затем эти данные сохраняются в переменной fgname. Специалисты службы поддержки могут скопировать откуда-либо, а затем вставить сюда информацию о пользователе и получить результат в форматированном виде, который можно просмотреть на экране либо скопировать и вставить в сообщение электронной почты, текстовый документ или электронную таблицу. Для более наглядного представления результатов имена групп сортируются в алфавитном порядке, для чего используется команда Sort.
В. В нашей компании прошла реорганизация и теперь нужно изменить имена локальных групп в домене. Я боюсь, что, если начать их менять вручную через графический интерфейс, это займет много времени и может привести к ошибкам. Могу ли я внести эти изменения при помощи сценария?
О. До появления утилиты Cusmgr выполнить подобные изменения с помощью сценария было довольно трудно. В листинге 5 показан разработанный мною сценарий ChangeLocalGroupNames.bat, который поможет справиться с переименованием групп.
Нужно создать входной список имен групп в файле с разделителями в виде запятой (CSV), где первым идет старое имя группы, а вторым — новое имя. Поскольку необходимо внести большое количество изменений, сначала, видимо, нужно тщательно проверить точность написания имен во входном списке, а затем проверить несколько групп и только после этого запускать сценарий с полным их списком. Для того чтобы можно было отслеживать процесс переименования групп, предусмотрен вывод результатов в файл журнала, в котором фиксируется успешное завершение операций, а также операции, завершившиеся с ошибкой. С помощью утилиты Cusmgr можно выполнять и другие действия по модификации параметров групп, а также сбрасывать пароли.
Настало время проверки
Итак, у нас есть пять сценариев для тестирования. Я выполнял все проверки на машинах с операционной системой Windows XP Service Pack 2 (SP2). Прежде чем запускать сценарии в промышленную эксплуатацию, обязательно проверяйте их работу в какой-либо тестовой среде. Независимо от объема инфраструктуры компании, рассмотренные сценарии и утилиты для работы с локальными группами помогут сэкономить много времени при необходимости извлечения или изменения данных о тех или иных локальных группах либо пользователях.
Дик Льюис (dlewis@winnetmag.com) — cтарший системный инженер компании CKT Consulting в Калифорнии. Имеет сертификаты MCSE и MCT, специализируется на системах управления масштаба предприятия