Иван Коробко
Централизованно меняем пароли локального системного администратора
Регулярная смена паролей локальных системных администраторов – необходимое мероприятие, обеспечивающие безопасность хранения данных в сети. Автоматизировав этот процесс, вы значительно снизит затраты на администрирование.
Специалисты системной поддержки, как правило, не обладают правами системного администратора. Для установки программного обеспечения они используют пароль локального системного администратора. Рекомендуется максимально ограничить права пользователям, поскольку установка программного обеспечения, подключение новых физических устройств, например Flash Card, несет в себе потенциальную опасность: может произойти утечка важной информации, что не допустимо. Таким образом, регулярная смена пароля очень важна. Поскольку в сети есть русско- и англоязычные версии операционных систем, то стандартные учетные записи и группы администраторов могут записываться по-разному, согласитесь, это очень неудобно. Достичь универсальности имени локальной учетной записи администратора и его пароля можно с помощью скрипта. Для его создания используем VBScript.
Режимы работы сценария
Создаваемый сценарий будет обладать следующими возможностями:
- Поддерживать работу в нескольких режимах: для конкретной машины, для членов группы в AD или для всех рабочих станций в сети.
- Унифицировать имя системного администратора, переименовывая учетную запись, например, из «Администратор» в «Administrator».
- По окончанию работы сценария формировать файл отчета.
Мультирежимность скрипта
Поддержка нескольких режимов работы реализована с помощью параметров запуска командной строки. Договоримся, что запуск сценария, изменяющего имя администратора на указанном компьютере, осуществляется с помощью параметра «pc», для компьютеров, перечисленных в группе, хранящейся в AD, – «group», а для всех компьютеров в домене – «-domain». При запуске скрипта во всех остальных случаях будет выводиться справка.
Таблица 1. Режимы работы сценария
Аргумент
|
Значение переменной MODE
|
Описание режима
|
–
|
Mode=0
|
Вывод справки
|
-рс
|
Mode=3
|
Изменение на локальном компьютере
|
-group
|
Mode=2
|
Изменение у группы компьютеров
|
-domain
|
Mode=1
|
Изменение на всех компьютерах домена
|
Чтение аргументов осуществляется с помощью объекта Wscript.Arguments, их количество определяется с помощью команды Wscript.Arguments.Count. В зависимости от полученного аргумента запускается тот или иной режим работы сценария (см. таблицу 1):
Set objArgs=Wscript.Arguments
If Wscript.Arguments.Count=1 Then
If strcomp(ucase(objArgs(0)),UCase("-Domain"))=0 Then
mode=1
End If
If strcomp(ucase(objArgs(0)),UCase("-Group"))=0 Then
mode=2
End If
If strcomp(ucase(objArgs(0)),UCase("-PC"))=0 Then
mode=3
End If
Else
mode=0
End If
Вывод справки
Этот режим, как и все остальные, реализован с помощью инструкции Select… Case и представляет собой вывод текстового сообщения на экран:
Select Case mode
Case 0
txt="ТЕКСТ СПРАВКИ"
WScript.Echo txt
Case 1
…
End Select
Переименование учетных записей
Поскольку речь идет о локальных учетных записях пользователя и группы, то использовать для этих целей протокол LDAP нельзя. Необходимо применять хорошо известный еще со времен Windows NT 4 протокол WinNT. Все три оставшихся режима выполняют одну и ту же операцию: проверяют на правильность имя группы и пользователя, в случае ошибки переименовывают в правильное и задают новый пароль. Как видно – это общий фрагмент, который рекомендуется внести в функцию, её входным параметром будет имя локального компьютера. Функция состоит из 3 частей:
- верификация и в случае необходимости изменение имени пользователя;
- верификация и в случае необходимости изменение имени группы;
- присвоение учетной записи «administrator» нового пароля.
Верификация и изменение имени пользователя
Зная имя компьютера, к сети необходимо подключиться и получить список локальных пользователей на рабочей станции, и проверить существование оговоренных учетных записей. В случае несоответствии имен – переименовать группу.
' Определение списка локальных пользователей
' на компьютере
Set obj_user= getobject("WinNT://" & pcname)
obj_user.filter = Array("user")
For Each user in obj_user
user_name= user_name +cstr(user.Name)
Next
' Переименование русского (*)Администратор(*) в латинское
If StrComp (UCase(user_name), UCase("Администратор"))=0 Then
Set obj_user2= getobject("WinNT://" & pcname&"/Администратор,User")
Set obj_user3= getobject("WinNT://" & pcname)
Set q=obj_user3.movehere(obj_user2.adspath,"Administrator")
Set obj_user2 = Nothing
Set obj_user3 = Nothing
End If
Переименование группы осуществляется аналогичным способом. Полный текст сценария смотрите на сайте журнала www.samag.ru, в разделе «Исходный код». Замечание: для успешной работы скрипт должен быть запущен от имени администратора сети. Задание нового пароля локального пользователя реализовано с помощью функции setpassword(), параметром которой является новый пароль:
Set obj_user4= getobject("WinNT://" & pcname&"/Administrator,User")
Call obj_user4.setpassword(PWD)
Set obj_user4 = Nothing
Изменяем пароль на локальном компьютере
Ранее говорилось, что смена пароля локального системного администратора выполняется при запуске скрипта с аргументом «-pc». При этом значение переменной mode – 3. При запуске в этом режиме необходимо задать два параметра: имя рабочей станции и новый пароль. Лучше всего это сделать с помощью диалогового окна, вызываемого с помощью InputBox().
После того как исходные параметры заданы, необходимо выполнить обращение к функции, которая изменит пароль, передавать ей в качестве параметра имя компьютера. Значение переменной, в которой содержится новый пароль, не имеет смысла передавать как параметр функции. Рекомендуется объявить эту переменную как глобальную:
Dim PWD
PWD = "987654321"
Select Case mode
…
Case 3
PWD=CStr(inputbox("Введите новый пароль локального администратора",,PWD))
PCNAME = "1230PC"
PCNAME=CStr(inputbox("Введите имя рабочей станции",,PCNAME))
' вызов функции изменения имен и назначения нового пароля
make pcname
End Select
Изменяем пароль на группе компьютеров
Для смены пароля на компьютерах, входящих в группу безопасности, требуется создать группу в Active Directory и включить в нее учетные записи компьютеров, на которых необходимо сменить локальный пароль (см. рис. 1). Доступ к AD в данной ситуации можно осуществлять с помощью провайдеров LDAP и WINNT. Для простоты воспользуемся последним из них.
Запрашиваемые параметры скрипта в данном режиме – имя группы и новый пароль.
Рисунок 1. Члены группы безопасности, обрабатываемые скриптом
Чтобы получить доступ к AD, необходимо знать имя домена. Для протокола WINNT имя домена должно быть представлено в сокращенном варианте, например SPD. Получить имя домена в сокращенном виде можно несколькими способами. Один из них – использование стандартной библиотеки ADSystemInfo:
Dim PWD
PWD = "987654321"
Select Case mode
…
Case 2
pwd=CStr(inputbox("Введите новый пароль локального администратора",,PWD))
GROUPNAME = "PC$_group"
GROUPNAME=CStr(inputbox("Введите имя группы, включая префикс",,GROUPNAME))
Set objSysInfo = CreateObject("ADSystemInfo")
domain=cstr(objSysInfo.DomainShortName)
Set obj_group= getobject("WinNT://" & domain &"/"&GROUPNAME)
For Each pc in obj_group.members
p=cstr(pc.name)
pcname=Left(p,Len(p)-1)
make pcname
Next
Set obj_group= Nothing
…
End Select
Изменяем пароль на всех компьютерах в домене
Для изменения пароля локального администратора на всех компьютерах домена необходимо определить его короткое имя:
Set objSysInfo = CreateObject("ADSystemInfo")
domain=cstr(objSysInfo.DomainShortName)
Затем получить поочередно доступ ко всем компьютерам домена и последовательно вызывать функцию make с изменяющимся значением параметра:
Case 1
…
Set obj_comp = getobject("WinNT://" & domain)
obj_comp.filter = Array("Computer")
For Each Computer in obj_comp
pcname=cstr(Computer.Name)
make pcname
Next
Set obj_comp= Nothing
…
Формируем отчет
Отчет может представлять собой какой-либо текстовый файл, содержащий информацию о выполненных скриптом действиях. Рекомендуется сделать файл отчета в формате HTML и отображать его после завершения работы программы.
Во время работы скрипта следует накапливать информацию в переменной, затем обрабатывать ее с помощью функции, которая выводила бы членов группы «Administrators». Если такой группы нет, то делается соответствующая пометка в файле. Отсутствие группы говорит о том, что компьютер недоступен (см. рис. 2): он выключен или на нем настроен firewall.
Рисунок 2. Пример файла отчета
Запись данных файл осуществляется с помощью объекта FSO:
Set FSO=CreateObject("Scripting.FileSystemObject")
Set MyFile1 = fso.CreateTextFile("c:\"+report+".htm", True, TRUE)
MyFile1.WriteLine(data)
MyFile1.Close
Когда сценарий завершит работу, отобразите с помощью созданной функции на экране созданный HTML-файл. Управление веб-страницами осуществляется с помощью объекта InternetExplorer.Application. Доступ к объекту из VBScript также осуществляется с помощью функции CreateObject().
Path=c:\report.htm
set oIE=Wscript.CreateObject("InternetExplorer.Application")
With oIE
.Left=100
.Top=100
.Height=400
.Width=400
.MenuBar=0
.Toolbar=0
.Statusbar=0
.Resizable=1
End With
oIE.Navigate Path
oIE.Visible=1
Созданный сценарий может быть запущен с любой машины с привилегиями администратора.
Надеюсь, что этот простой, но мощный скрипт поможет в вашей работе.