Массовое создание учетных записей ПК в Active Directory ( Windows Server 2003/2008/2012 )
- Font size: Larger Smaller
- Hits: 6180
- 0 Comments
- Bookmark
Решил поделиться одной своей наработкой, думаю что она окажется полезной многим админам Windows сетей.
Представим ситуацию, вам требуется создать большое количество учетных записей для рабочих станций в домене Windows 30, 50 или 100 машин, создавать руками это долго и муторно, ну а если еще и правила безопасности в вашей сети настолько драконовские, что используется предварительное создание учетных записей ПК в домене, а вводить в домен, разрешено только администраторам домена, каждый раз гонять админа, вводить тачку в домен глупо, но у нас есть группа, которая занимается поддержкой пользователей назовем ее, например, Support, давать этой группе админские права- хреновая идея, т.к. в администраторы домена попадают, обычно, только доверенные сотрудники, да и техподдержке такие права для работы не требуются, а сотрудникам должны быть положены только те права, которые необходимы для выполнения их служебных обязанностей и не более того, о чем, недвусмысленно, напоминает Microsoft, в своей документации.
Сначала, я опишу как это делается руками, чтобы было понимание откуда растут ноги, и в конце, для самых внимательных и терпеливых, выложу скрипт.
В общем данный гайд, должен расставить все точки да «Ё» потому что когда я с этим всем разбирался, я много раз произносил слово начинающееся с этой буквы, думаю что данная статья поможет сэкономить много сил и времени.
В принципе создать кучу учетных записей для ПК, не представляет никакой сложности, сложность наступает на моменте предоставления прав доступа на ввод в домен т.к. не понятно какие права должны приехать на «свежесозданную» учетку.
Например создание учетной записи ПК в домене Widows, из командной строки, выполняется через djoin
Представим ситуацию что в домене contoso.local в подразделенииworkstations, на которое накатываются нужные групповые политики, вам требуется создать учетную запись ПК, из командной строки, с именем: contoso-wks01
Тогда команда будет иметь вид:
djoin /provision /domain contoso.local /machine contoso-wks01 /savefile C:\log.txt /machineou OU=workstations,DC=contoso,DC=local
Где:
djoin — утилита по автономному созданию (присоединению) учетной записи ПК в домене
/provision — параметр запуска, на создание записи в домене
/domain contoso.local -имя домена
/machine contoso-wks01 имя машины которое вводится в домен
/savefile C:\log.txt — сохранение информации для ввода в домен
/machineou OU=workstations,DC=contoso,DC=local -путь в LDAP, где будет создана учетная запись ПК
В принципе, команда проста и разжевана в технет до полного и легкого усвоения, после ее использования можно смело залезать в OUшку: workstations и обнаружить там учетную запись ПК с именем: contoso-wks01
Теперь, для тестирования, нам нужно создать группу безопасности Support (если у вас ее не существует) и использовать стандартную оснастку: Active Directory Users and Computers, создать учетную запись ПК с именем: contoso-wks02, и предоставив права на ввод в домен, группе Support, чтобы выглядело, как на скриншоте ниже
Если просмотреть вкладку Security, то в списке найдя группу Support, мы обнаружим что права на ввод в домен определяет целая куча параметров безопасности, а если посмотреть через расширенные параметры, то там вообще «чёрт ногу сломит»… Вот эти права доступа нам и нужно передать к учетной записи ПК чтобы нужная нам группа получила права ввод в домен ПК с таким именем.
Выполним туже задачу но из командной строки, чтобы оценить, масштабы «бедствия».
Для работы с правами доступа в домене существует утилита dsacls она по умолчанию установлена на контроллерах домена и в системе где установленRemote Server Administration Tools
Нам нужно посмотреть какие права предоставлены со стороны системы:
dsacls CN=contoso-wks02,OU=workstations,DC=contoso,DC=local
нам вывалит огромный листинг с правами доступа для различных учетных записей, но нас интересует, в данной ситуации, только группа Support, чтобы не ломать глаза просматривая всю эту «портянку» воспользуемся утилитой командной строки find, это такая легкая подделка под grep в linux, тогда запрос принимает вид:
dsacls CN=contoso-wks02,OU=workstations,DC=contoso,DC=local | find "Support"
и получаем запись вида:
Allow CONTOSO\Support SPECIAL ACCESS
Allow CONTOSO\Support SPECIAL ACCESS for Logon Information
Allow CONTOSO\Support SPECIAL ACCESS for description
Allow CONTOSO\Support SPECIAL ACCESS for displayName
Allow CONTOSO\Support SPECIAL ACCESS for sAMAccountName
Allow CONTOSO\Support SPECIAL ACCESS for Account Restrictions
Allow CONTOSO\Support SPECIAL ACCESS for Validated write to DNS host name
Allow CONTOSO\Support SPECIAL ACCESS for Validated write to service principal name
«Портянка» принимает простой и, вполне, читаемый вид. Собственно вот такие права на учетную ПК нам и нужно предоставить группе Support, которая и будет загонять ПК в домен. Дело за малым, предоставить эти права… Как это сделать?Тут все не очень явно, но разобраться можно.
Лирическое отступление.
Когда я разбирался со всей этой «фигней» у меня создалось впечатление что разработкой разных системам в домене занимались разные люди, котрые между собой не контактировали и синтаксис команд напоминает письмо из Простоквашено -Ваш сын Дядя Шарик, т.е. я так и не смог понять какой логикой руководствовались люди разрабатывая это!!!
Вернемся к нашим учетным записям ПК. В самом начале мы с вами создали учетную запись ПК с именем contoso-wks01, в данным момент, группа Supportне имеет прав на ввод в домен ПК с таким именем, вы можете в этом убедиться, если зайдете во вкладку безопасность, учетной записи ПК с именем contoso-wks01
В общем дадим права, тут все «просто»:
dsacls "CN=contoso-wks01,OU=workstations,DC=contoso,DC=local" /G "Support":CALCGRSDDTRC;
Где:
dsacls -утилита работающая со списками контроля доступа
«CN=contoso-wks01,OU=workstations,DC=contoso,DC=local» -путь к объекту в каталоге LDAP к которому необходимо настроить права доступа
/G «Support» — дать права доступа группе Support
:CALCGRSDDTRC; — какие права доступа предоставить указанной группе ( что сие означает остается вам в качестве домашнего задания :) )
Выполняем указанные команды, одну за другой, значение этих команд думаю что понятны, кому не понятно, то вперед на технет, читать документацию, там все есть, и вам откроется истина, но только после прохождения квеста…
dsacls "CN=contoso-wks01,OU=workstations,DC=contoso,DC=local" /G "Support":CALCGRSDDTRC; dsacls "CN=contoso-wks01,OU=workstations,DC=contoso,DC=local" /G "Support":WP;description; dsacls "CN=contoso-wks01,OU=workstations,DC=contoso,DC=local" /G "Support":WP;sAMAccountName; dsacls "CN=contoso-wks01,OU=workstations,DC=contoso,DC=local" /G "Support":WP;displayName; dsacls "CN=contoso-wks01,OU=workstations,DC=contoso,DC=local" /G "Support":WP;userAccountControl; dsacls "CN=contoso-wks01,OU=workstations,DC=contoso,DC=local" /G "Support":"WS;Validated write to service principal name"; dsacls "CN=contoso-wks01,OU=workstations,DC=contoso,DC=local" /G "Support":"WS;Validated write to DNS host name";
Теперь идем в свойства учетной записи contoso-wks01 и видим что там появилась группа Support с необходимыми правами.
Вот теперь вы поняли что значит рулить параметрами доступа из командной строки, а теперь представьте что вам сказали создать 100 учетных записей ПК, кликать мышкой, слишком монотонно, лопатить из командной строки, есть очень большой шанс напортачить в синтаксисе и потратить еще больше времени отлавливая ошибки, остается этот процесс автоматизировать…
От вас требуется создать файл со списком имен ПК котрые необходимо ввести в домен и указать группу которой необходимо дать права на ввод, список ПК делается в Excel за минуту, а дальше в дело вступает наш скрипт, я специально не делал его на PowerShell, чтобы он был совместим и с Windows 2003 и работал без каких-либо плясок с бубном.
@echo off FOR /f %%i in (C:\join\pc.txt) DO ( djoin /provision /domain contoso.local /machine %%i /savefile C:\join\log.txt /machineou OU=workstations,DC=contoso,DC=local dsacls "CN=%%i,OU=workstations,DC=contoso,DC=local" /G "Support":CALCGRSDDTRC; dsacls "CN=%%i,OU=workstations,DC=contoso,DC=local" /G "Support":WP;description; dsacls "CN=%%i,OU=workstations,DC=contoso,DC=local" /G "Support":WP;sAMAccountName; dsacls "CN=%%i,OU=workstations,DC=contoso,DC=local" /G "Support":WP;displayName; dsacls "CN=%%i,OU=workstations,DC=contoso,DC=local" /G "Support":WP;userAccountControl; dsacls "CN=%%i,OU=workstations,DC=contoso,DC=local" /G "Support":"WS;Validated write to service principal name"; dsacls "CN=%%i,OU=workstations,DC=contoso,DC=local" /G "Support":"WS;Validated write to DNS host name"; ) pause
В общем вам требуется создать папку, для примера, я назвал её join и в нее поместить 2 файла, собственно наш bat имя которому придумайте сами и текстовый файл с именем pc.txt -в котором указываются имена ПК для ввода.
Все работает очень просто, а как- понятно тем, кто прочитал статью с начала.После выполнения ждет нажатия любой клавиши.
Важное дополнение!
Возможные проблемы в работе-если имя группы безопасности содержит пробелы, то права доступа не доезжают. Так что тут вспомниается бородатый анекдот с просторов:
Вопрос: Люди-что-делать-у-меня-не-работает-проблел?
Отвает: Некоторые_люди_не_пользуются_пробелом… :)
В общем не используйте в имени группы, которой предоставляется право на ввод в домен, пробелов, а так полная свобода.
На этом все, надеюсь наработка кому-то окажется полезной и сэкономит много часов времени, а чем в это время можно заняться решать вам, например можно «постить котиков»…