читать дальше »
Давненько я не писал ничего специально для системных администраторов, все больше разглагольствовал на бизнес-тематику. Сегодня хочу исправить эту ошибку и предложить вашему вниманию простое средство для управления паролями локального администратора на компьютерах, входящих в домен.
Когда в сети 5-10 машин, тут захочешь забыть администраторский пароль - и то не получится. Однако если машин хотя бы 50, то рано или поздно может случиться ситуация, когда выяснится, что вы забыли пароль локального администратора от какой-то машины или, что еще хуже, какой-то злодей сменил этот пароль. Вот тут-то и придет на помощь предлагаемое мной средство.
Так же материалы этой статьи могут оказаться полезными, тем, кто приходит работать в компанию, где было не принято вести документацию по сети (по моему скромному мнению, это 99,9% фирм), а потому локальные пароли скорее всего будут неизвестны. Кроме того, предложенное средство удобно для оперативной замены локальных паролей на компьютерах без прямого доступа к консоли (иными словами, поменять пароль на машину в Москве, не отрывая зад со стула, например, в Новосибирске).
Нашим волшебный свойством будет vbs-скрипт set_admin_passwd.vbs
-=-=-=-=-
Option Explicit
Dim objComputer ‘ Экземпляр объекта Computer
Dim objUser ‘ Экземпляр объекта User
Dim strComputer ‘ Имя компьютера
Dim strUser ‘ Имя создаваемого пользователя
Dim strpass ‘ пароль пользователя
Dim objSysInfo ‘массив для хранения свойств компьютера, считанных из AD
Dim arrFULLNAME ‘служебный массив
Dim arrCN ‘служебный массив
Set objSysInfo = CreateObject(”ADSystemInfo”)
strComputer = objSysInfo.ComputerName
arrFULLNAME = Split(strComputer, “,”)
arrCN = Split(arrFULLNAME(0), “=”)
strComputer=arrCN(1)
strUser = “admin”
strpass = “654321″
Set objUser = GetObject(”WinNT://” & strComputer & “/” & strUser)
objUser.Description = “Пароль изменен при помощи скрипта”
objUser.SetPassword strpass
objUser.SetInfo
-=-=-=-=-=-
Поясню в двух словах, что он делает. Скрипт предназначен для запуска на локальной машине при помощи GPO. Вы создаете объект групповой политики и в разделе “Конфигурация компьютера” (важно!), в его секции, отвечающей за startup-сценарии, прописываете данный скрипт. Само собой, GPO должна применяться к OU, в который так или иначе входят наши компьютеры. Скрипт будет выполняться при запуске компьютера до момента выдачи приглашения на ввод пароля (т.е. до появления картинки “Нажмите Crtl+Alt+Del…”). Можно также также запускать этот скрипт и при завершении сеанса пользователя (раздел сценариев в секции “Конфигурация пользователя”), чтобы лишить потенциального злодея, каким-то образом изменившего пароль, возможности перелогиниться.
Скрипт выполняется на каждом компьютере, входящем в OU, к которому применяется политика, и вносит изменения в свойства локального пользователя. Итак, собственно комментарии к скрипту:
Set objSysInfo = CreateObject(”ADSystemInfo”)
strComputer = objSysInfo.ComputerName
Эти строчки получают из AD полное имя компьютера, на котором запущен скрипт. Переменная strComputer содержит полное имя компьютера, взятое из AD в виде ldap://cn=computer,ou=department,dc=domain, dc=tld Далее нам предстоит разбить эту строку на составляющие, чтобы выудить из них имя компьютера:
arrFULLNAME = Split(strComputer, “,”)
arrCN = Split(arrFULLNAME(0), “=”)
strComputer=arrCN(1)
Этот кусок кода позволяет выудить из переменной strComputer собственно имя компьютера (strComputer), на котором запущен скрипт. Теперь собственно укажем пользователя, чей пароль будем менять:
strUser = “admin”
strpass = “654321″
Заметьте, в качестве имени пользователя я указал admin. Обычно для соблюдения единообразия и быстроты набора, я рекомендую переименовывать локального администратора в admin при помощи соответствующей опции в GPO. На самом деле, локального администратора можно переименовать в кого угодно - вот это имя и используйте в качестве значения переменной strUser. Лишь бы на всех машинах это имя было одним и тем же. Ну а переменной strpass присвоим значение пароля, который хотим задать нашему локальному администратору.
Завершим наше темное дело:
Set objUser = GetObject(”WinNT://” & strComputer & “/” & strUser)
objUser.Description = “Пароль изменен при помощи скрипта”
objUser.SetPassword strpass
objUser.SetInfo
Первой строчкой обратимся к свойству пользователя на нашем компьютере. Запишем комментарий в описание пользователя. Установим пользователю новый пароль и последней строчкой сохраним изменение.
Вуаля - все готово!
Немного модифицировав данный скрипт вы можете создать инструмент для изменения пароля указываемого вручную локального пользователя на указываемой вручную машине.
Теперь вы можете быть уверенными, что все машины, входящие в домен, имеют одинаковый пароль локального администратора, причем вы можете по своему желанию одномоментно поменять его. Ничто не мешает вам задавать разные пароли для компьютеров, входящих в разные OU - для этого GPO для каждого OU должна вызывать соответствующий скрипт. Впрочем, скрипт может быть единым, но тогда нужно будет скорректировать блок присвоения переменной strpass значения в зависимости от того, к какому OU принадлежит компьютер.