Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Anton04

Ветеран


Сообщения: 2154
Благодарности: 404

Профиль | Отправить PM | Цитировать


super_bitard,

Централизованное управление паролями локальных администраторов
читать дальше »


Давненько я не писал ничего специально для системных администраторов, все больше разглагольствовал на бизнес-тематику. Сегодня хочу исправить эту ошибку и предложить вашему вниманию простое средство для управления паролями локального администратора на компьютерах, входящих в домен.

Когда в сети 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 принадлежит компьютер.

-------
Слабый всю жизнь идёт лёгкой дорогой, черта сильного выбрать трудный путь.
Будь осторожен в своих желаниях, ибо они иногда сбываются.


Отправлено: 10:51, 13-04-2011 | #6