Смена пароля локального администратора.
-
3 июня 2007 г. 15:26
Доброго всем!
Описание: Требуется периодически менять пароль локального администратора на рабочих станциях 1го леса с 1 корневым и кучей дочерних доменов не затронув серверный парк. Соответственно разделение парка возможно только по OU. В домене присутствуют станции Windows 2000/XP/2003/Vista(оч мало).
Что уже нашел: Нашел 2 скрипта по смене пароля, один основывается на подсетях (ручками вписываешь диапазон IP), второй основан на имене рабочей станции. Могу привести ссылки на их местоположение. Неприменимость данных скриптов заключается в том, что в сети полностью "Броуновское движение", т.е. наличие ноутов и подстольных серверов и присутствие юзеров
на раб месте оставляет желать лучшего.
Может у кого есть опыт по решению данной проблемы стандартными средствами или нестандартными? Оговорюсь сразу - программер я никакой :-( .
Ответы
-
21 апреля 2009 г. 6:00
Может такой вариант. Пока тестировал на XP и 2k3
Компьютер при старте обращается к страничке, страничка - скрипт .ASP выполняется от имени компьютера. Пароль хранится на сервере.
Это страничка default.asp:<% strIPComputer = Request.ServerVariables("REMOTE_HOST") Call chPsw(strIPComputer) Response.Write strIPComputer SUB chPsw(strComputer) Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem") For Each objComputer in colComputers strComputer = objComputer.Name Next strComputerDN = getComputerDN(strComputer) If Instr(strComputerDN,"OU=WORKSTATIONS") > 0 Then Call chPsw1(strComputer,"Rtukq0987") ElseIf Instr(strComputerDN,"OU=NOTEBOOKS") > 0 Then Call chPsw2(strComputer,"Rtukq0987") End If End Sub Sub chPsw1(strComputer,strPass) Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colAccounts = objWMIService.ExecQuery ("Select * From Win32_Group Where LocalAccount = TRUE And SID = 'S-1-5-32-544'") For Each objAccount in colAccounts strGroup = objAccount.Name Next Set objGroup = GetObject("WinNT://" & strComputer & "/" & strGroup) For Each objUser in objGroup.Members strUserPath = objUser.aDSPath If Instr(strUserPath,"/" & strComputer & "/") > 0 Then set usr = GetObject(strUserPath & ",user") usr.SetPassword strPass usr.SetInfo End If Next End Sub Sub chPsw2(strComputer,strPass) Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colSystemUsers = objWMIService.ExecQuery ("Select * from Win32_UserAccount") For Each objSystemUser in colSystemUsers if Right(objSystemUser.SID,3)="500" Then strUserPath = objUser.aDSPath set usr = GetObject(strUserPath & ",user") usr.SetPassword strPass usr.SetInfo End If Next End Sub Function getComputerDN(byval strComputer) Const ADS_NAME_INITTYPE_GC = 3 Const ADS_NAME_TYPE_NT4 = 3 Const ADS_NAME_TYPE_1779 = 1 Set objSystemInfo = CreateObject("ADSystemInfo") strDomain = objSystemInfo.DomainShortName Set objTrans = CreateObject("NameTranslate") objTrans.Init ADS_NAME_INITTYPE_GC, "" objTrans.Set ADS_NAME_TYPE_NT4, strDomain & "\" & strComputer & "$" getComputerDN = objTrans.Get(ADS_NAME_TYPE_1779) End Function %>
chPsw1 и chPsw2 - разные стратегии смены пароля - только для локального администратора или для всех локальных администраторов. Проверка контейнера - защита.
А это startup скрипт .vbs:
Set XmlHttp = CreateObject("MSXML2.XMLHTTP") XmlHttp.open "GET","http://dc/pasword/",False XmlHttp.SendНемножко вырезал "лишнего", могут быть очепятки.- Предложено в качестве ответа Vasily GusevModerator 26 апреля 2009 г. 5:41
- Помечено в качестве ответа Vasily GusevModerator 8 марта 2010 г. 9:58
-
21 апреля 2009 г. 11:43
wewerty , красивое решение!
Василий , startup-скрипт инициирует запуск скрипта на веб-сервере, а не на клиенте.
> проблема не в этом, а в том что пароль пойдет в открытом виде по сети.
С этим полностью согласен. Как раз веб-сервер эту проблему решает.
Вот мой исправленный вариант:
http://dumpz.org/7708/
Основные изменения:
1)
objWMIService.ExecQuery("Select * from Win32_UserAccount")
изменено на
objWMIService.ExecQuery("Select * from Win32_UserAccount where Domain=""" & WshNetwork.ComputerName & """")
теперь происходит вывод действительно только ЛОКАЛЬНЫХ учеток => быстрее и корректнее работает скрипт.
wewerty , рекомендую вам тоже изменить соответствующую строчку у себя
2) До этого у меня менялись пассы всем локальным юзерам. Теперь системные не трогаются.
if objSystemUser.Name<>"HelpAssistant" and objSystemUser.Name<>"SUPPORT_388945a0" and objSystemUser.Name<>"krbtgt" and objSystemUser.Name<>"ASPNET" then
.....- Предложено в качестве ответа Vasily GusevModerator 26 апреля 2009 г. 5:41
- Помечено в качестве ответа Vasily GusevModerator 8 марта 2010 г. 9:58
Все ответы
-
3 июня 2007 г. 16:48Модератор
http://www.microsoft.com/technet/scriptcenter/resources/qanda/oct04/hey1015.mspx
Последний пример скрипта в статье решает вашу проблему, правда, там нет интерфейса и прочих украшений. Также учитывайте, что, если компьютер выключен, то пароль на нем изменен не будет.
-
3 июня 2007 г. 18:31Модератор
А если совсем не хотите заниматься программированием, то, возможно, вас устроит вот этот визуальный инструмент по смене паролей локальных администраторов:
XS BAP , ссылка на загрузку - в статье.
-
5 июня 2007 г. 4:04Я решил проблемы с броуновским движением просто парой скриптов:
- первый запускается групповыми политиками при старте системы и записывает на сервер в определенную папку файл с именем загружаемого компьютера
- второй с определенной периодичностью сканирует эту папку, при нахождении какого-либо файла меняет пароль на загруженной системе -
5 июня 2007 г. 18:59Тема пока не закрыта, я принял советы - идут испытания и отладка. Итог обязательно напишу. :-) Все не так уж и плохо, как я думал. ;-)
-
26 июня 2007 г. 5:31Скрипт по смене пароля ставишь в стартап скрипт, в самом скрипте проверяешь сервер это или нетДля примера скрипт, который меняет пароль админа на всех компьютерах кроме 2003 серверовCode SnippetDim Container
Dim ContainerName
Dim User, UsrSID, b
Dim WshNetworkSet WshNetwork = WScript.CreateObject("WScript.Network")ComputerName=WshNetwork.ComputerNameSet objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & ComputerName & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)For Each objItem in colItemsostype=objItem.OSType
osver=objItem.Version
oslang=objItem.OSLanguage
spver=objItem.ServicePackMajorVersion
NextstrOSVer = Left(osVer, 3)
If strosver<>"5.2" thenstrSelect="Select * from Win32_UserAccount"Set colSystemUsers = objWMIService.ExecQuery (strSelect)For Each objSystemUser in colSystemUsers
if Right(objSystemUser.SID,3)="500" Then
Set objUser = GetObject("WinNT://" & ComputerName & "/" & objSystemUser.Name & ",user")
NewPassword="supper"
Call objUser.SetPassword(NewPassword)
Exit For
End If
NextEnd if -
26 июня 2007 г. 10:27МодераторПароль в скприпте открытым текстом! Ужас!
Лучше так не надо. -
2 июля 2007 г. 8:47
sie написано: Пароль в скприпте открытым текстом! Ужас!
Лучше так не надо.А какие варианты кроме шифрования майкрософтовской приблудой?
-
2 июля 2007 г. 12:03МодераторНа днях, если успею протестировать, приведу пример.
-
7 апреля 2008 г. 9:17
sie
стесняюсь спросить, а тестирование прошло успешно, и можно пример в студию.Пасибо
-
8 апреля 2008 г. 3:12Модератор
Нет, пока было не актуально.
Могу изложить идею - может кто реализует и опубликует тут.
Идея в том, чтобы отслеживать регистрацию клиентской машины при ее загрузке на контроллере домена (варианты WMI, EventLog, может еще что?) и по этому событию инициировать смену пароля из под учетки доменного администратора или иной учетки, имеющей права на смену пароля на клиентской машине.
Главное не перенапрячь DC, т.к. число регистраций на нем может быть большое. Выход: делать систему асинхронной,т.е. ловить события регистрации и асинхронно передавать в другое приложение, которое реализует логику смены пароля.
Логика смены пароля необходима, т.к. например, нет смысла менять пароль при каждой загрузке клиентского компьютера, нужно ставить фильтры (на одни компьютеры ставим один пароль на другие другой), нужно иметь лог (отчет) - где реально пароль поменяли, а где еще нет.
Вот такие мысли. Все просто, но требует тщательного тестирования и аккуратной реализации.
-
14 апреля 2008 г. 21:08Вот интересный пример который я использую в своей компании для смены пароля локального админа ..
'Created Yuriy shkvarenko (gen)
On Error Resume Next
Const ADS_SCOPE_SUBTREE = 2
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = _
"Select Name From 'LDAP://DC=DOMAIN,DC=com,DC=ua' Where objectClass='computer'" 'измините тут ваши данные
objCommand.Properties("Page Size") = 10000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
strComputer = objRecordSet.Fields("Name").Value
Set objUser = GetObject("WinNT://" & strComputer & "/Administrator")
Set objUser = GetObject("WinNT://" & strComputer & "/Администратор")
Set objUser = GetObject("WinNT://" & strComputer & "/admin")
objUser.SetPassword generatePassword(passLen)
objRecordSet.MoveNext
' WScript.Echo objUser
Loop
' WScript.Echo "good complite"
passLen = 14
Function generatePassword(PASSWORD_LENGTH)
Dim NUMLOWER, NUMUPPER, LOWERBOUND, UPPERBOUND, LOWERBOUND1, UPPERBOUND1, SYMLOWER, SYMUPPER
Dim newPassword, count, pwd
Dim pCheckComplex, pCheckComplexUp, pCheckComplexLow, pCheckComplexNum, pCheckComplexSym, pCheckAnswer
NUMLOWER = 48 ' 48 = 0
NUMUPPER = 57 ' 57 = 9
LOWERBOUND = 65 ' 65 = A
UPPERBOUND = 90 ' 90 = Z
LOWERBOUND1 = 97 ' 97 = a
UPPERBOUND1 = 122 ' 122 = z
SYMLOWER = 33 ' 33 = !
SYMUPPER = 46 ' 46 = .
pCheckComplexUp = 0 ' used later to check number of character types in password
pCheckComplexLow = 0 ' used later to check number of character types in password
pCheckComplexNum = 0 ' used later to check number of character types in password
pCheckComplexSym = 0 ' used later to check number of character types in password
' initialize the random number generator
Randomize()
newPassword = ""
count = 0
DO UNTIL count = PASSWORD_LENGTH
' generate a num between 2 and 10
' if num < 5 create an uppercase
If Int( ( 10 - 2 + 1 ) * Rnd + 2 ) < 5 Then
pwd = Int( ( UPPERBOUND - LOWERBOUND + 1 ) * Rnd + LOWERBOUND )
' if num is between 4 and 7 create a lowecase
Elseif Int( ( 10 - 2 + 1 ) * Rnd + 2 ) > 3 And Int( ( 10 - 2 + 1 ) * Rnd + 2 ) < 8 Then
pwd = Int( ( UPPERBOUND1 - LOWERBOUND1 + 1 ) * Rnd + LOWERBOUND1 )
' if num is between 8 and 10 generate a symbol
Else
pwd = Int( ( SYMUPPER - SYMLOWER + 1 ) * Rnd + SYMLOWER )
End If
newPassword = newPassword + Chr( pwd )
count = count + 1
'Check to make sure that a proper mix of characters has been created. If not discard the password.
If count = (PASSWORD_LENGTH) Then
For pCheckComplex = 1 To PASSWORD_LENGTH
'Check for uppercase
If Asc(Mid(newPassword,pCheckComplex,1)) >64 And Asc(Mid(newPassword,pCheckComplex,1))< 90 Then
pCheckComplexUp = 1
'Check for lowercase
ElseIf Asc(Mid(newPassword,pCheckComplex,1)) >96 And Asc(Mid(newPassword,pCheckComplex,1))< 123 Then
pCheckComplexLow = 1
'Check for numbers
ElseIf Asc(Mid(newPassword,pCheckComplex,1)) >47 And Asc(Mid(newPassword,pCheckComplex,1))< 58 Then
pCheckComplexNum = 1
'Check for symbols
ElseIf Asc(Mid(newPassword,pCheckComplex,1)) >32 And Asc(Mid(newPassword,pCheckComplex,1))< 47 Then
pCheckComplexSym = 1
End If
Next
'Add up the number of character sets. We require 3 or 4 for a complex password.
pCheckAnswer = pCheckComplexUp+pCheckComplexLow+pCheckComplexNum+pCheckComplexSym
If pCheckAnswer < 3 Then
newPassword = ""
count = 0
End If
End If
Loop
'The password is good so return it
generatePassword = newPassword
End Function -
6 апреля 2009 г. 1:49The_Dmitry




5 июня 2007 г. 11:04:40
Голосов: 0Проголосовать за полезное сообщениеЯ решил проблемы с броуновским движением просто парой скриптов:
- первый запускается групповыми политиками при старте системы и записывает на сервер в определенную папку файл с именем загружаемого компьютера
- второй с определенной периодичностью сканирует эту папку, при нахождении какого-либо файла меняет пароль на загруженной системе
Приветствую, а можно эти пару скриптов увидеть? -
19 апреля 2009 г. 18:06Мой вариант, созданный на основе ранее предложенного.
Меняются пассы для всех локальных юзеров. Защита пасса (который открытым текстом) осуществляется за счет грамотно сконфигурированного ACL для самого скрипта.
С помощью GPO кидать на исполнение при загрузке компа.
http://dumpz.org/7656/ -
20 апреля 2009 г. 4:11Модератор
Vlad K, если сценарий выполняется на системе, значит его код (и пароль) доступен системе, а следовательно и локальному пользователю имеющему физический доступ к системе. Если это не пугает - то лучше воспользоваться GP Preferences, там реализация удобна, не требуются сценарии, и пароль хотя бы шифруется :)
- первый запускается групповыми политиками при старте системы и записывает на сервер в определенную папку файл с именем загружаемого компьютера - второй с определенной периодичностью сканирует эту папку, при нахождении какого-либо файла меняет пароль на загруженной системе
Постараюсь сегодня набросать если не забуду.
AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com -
20 апреля 2009 г. 8:03МодераторВася! Ты неправ! :-)) В GPP пароли условно защищены Пароли в Group Policy Preference
Сазонов Илья http://www.itcommunity.ru/blogs/sie/ -
20 апреля 2009 г. 8:11МодераторИлья, в том то и дело, что условно :) Шифроваться то они шифруются, но что толку если они всё равно расшифровываются на клиентской стороне? ;)
AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com -
20 апреля 2009 г. 9:24Модератор
Вот чего набросал на скорую руку:
SubscribeMe.cmd (засовываем в сценарий загрузки (startup script)):\\Server\PassChange - шара, доступ на запись в которую имеют только компьютеры домена.echo %computername% >> \\Server\PassChange\list.txt
CheckAndChange.cmd (скрипт запускаемый на сервере из шедулера, из места к которому имеют доступ только администраторы, под учеткой с достаточными правами)
Для каждой строчки из файла, используя WS-Management выполняет команду на удалённом компьютере, и затем удаляет файл list.txt. Я просто сдублировал строчки с разными именами администраторов, вычислять по сиду из cmd - слишком трудоёмко :) В конце команд можно приписать >>logfile.txtfor /f %%I in (c:\PassChange\list.txt) do winrs -r:%%I net user Ђ¤¬ЁЁбва в®а P@ssw0rd for /f %%I in (c:\PassChange\list.txt) do winrs -r:%%I net user Administrator P@ssw0rd del /q c:\PassChange\list.txt
Не рекомендую заменять winrs например на psexec, потому как тот передаёт команды в открытом виде. WS-Management же по ssl, да и вообще очень безопасный.
Может быть, как нибудь, потом, попробую переписать на PowerShell, с определением имени по SID, проверкой сроков (чтоб не менять пароль каждый день), и красивым логгингом, например в журнал событий :) Если конечно кому то будет нужно еще :)
AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com- Предложено в качестве ответа Vasily GusevModerator 20 апреля 2009 г. 9:29
- Отменено предложение в качестве ответа ILYA [ sie ] SazonovMVP, Moderator 22 апреля 2009 г. 9:26
- Предложено в качестве ответа Vasily GusevModerator 26 апреля 2009 г. 5:42
-
20 апреля 2009 г. 16:29Василий, на скрипт changepass.vbs даются только права read&execute для domain computers. Таким образом, чтобы прочесть его содержимое и узнать пароль, юному хакеру потребуется запустить что-нибудь типа
notepad \\path\to\share\changepass.vbs
от имени пользователя SYSTEM.
Как же он это сделает, если имеет по условию задачи права ограниченной учетной записи в системе (а если он админ, то нафига это ему нужно:) )?
ЗЫ: я нашел пару косяков в предыдущем варианте своего скрипта, завтра постараюсь выложить пофиксенный. -
20 апреля 2009 г. 16:35Модератор
Vlad K, да, действительно, я прогнал, проблема не в этом, а в том что пароль пойдет в открытом виде по сети.
Тогда моё решение с батниками и GP Preferences получаются вобщем эквивалентными в плане безопасности, но второе проще внедрять :)
AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com -
21 апреля 2009 г. 6:00
Может такой вариант. Пока тестировал на XP и 2k3
Компьютер при старте обращается к страничке, страничка - скрипт .ASP выполняется от имени компьютера. Пароль хранится на сервере.
Это страничка default.asp:<% strIPComputer = Request.ServerVariables("REMOTE_HOST") Call chPsw(strIPComputer) Response.Write strIPComputer SUB chPsw(strComputer) Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem") For Each objComputer in colComputers strComputer = objComputer.Name Next strComputerDN = getComputerDN(strComputer) If Instr(strComputerDN,"OU=WORKSTATIONS") > 0 Then Call chPsw1(strComputer,"Rtukq0987") ElseIf Instr(strComputerDN,"OU=NOTEBOOKS") > 0 Then Call chPsw2(strComputer,"Rtukq0987") End If End Sub Sub chPsw1(strComputer,strPass) Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colAccounts = objWMIService.ExecQuery ("Select * From Win32_Group Where LocalAccount = TRUE And SID = 'S-1-5-32-544'") For Each objAccount in colAccounts strGroup = objAccount.Name Next Set objGroup = GetObject("WinNT://" & strComputer & "/" & strGroup) For Each objUser in objGroup.Members strUserPath = objUser.aDSPath If Instr(strUserPath,"/" & strComputer & "/") > 0 Then set usr = GetObject(strUserPath & ",user") usr.SetPassword strPass usr.SetInfo End If Next End Sub Sub chPsw2(strComputer,strPass) Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colSystemUsers = objWMIService.ExecQuery ("Select * from Win32_UserAccount") For Each objSystemUser in colSystemUsers if Right(objSystemUser.SID,3)="500" Then strUserPath = objUser.aDSPath set usr = GetObject(strUserPath & ",user") usr.SetPassword strPass usr.SetInfo End If Next End Sub Function getComputerDN(byval strComputer) Const ADS_NAME_INITTYPE_GC = 3 Const ADS_NAME_TYPE_NT4 = 3 Const ADS_NAME_TYPE_1779 = 1 Set objSystemInfo = CreateObject("ADSystemInfo") strDomain = objSystemInfo.DomainShortName Set objTrans = CreateObject("NameTranslate") objTrans.Init ADS_NAME_INITTYPE_GC, "" objTrans.Set ADS_NAME_TYPE_NT4, strDomain & "\" & strComputer & "$" getComputerDN = objTrans.Get(ADS_NAME_TYPE_1779) End Function %>
chPsw1 и chPsw2 - разные стратегии смены пароля - только для локального администратора или для всех локальных администраторов. Проверка контейнера - защита.
А это startup скрипт .vbs:
Set XmlHttp = CreateObject("MSXML2.XMLHTTP") XmlHttp.open "GET","http://dc/pasword/",False XmlHttp.SendНемножко вырезал "лишнего", могут быть очепятки.- Предложено в качестве ответа Vasily GusevModerator 26 апреля 2009 г. 5:41
- Помечено в качестве ответа Vasily GusevModerator 8 марта 2010 г. 9:58
-
21 апреля 2009 г. 7:27Модератор
wewery, пароль хранится в текстовом файле страницы, в открытом виде. Страница как я понимаю при запросе передается через сеть в открытом виде.
Кроме того, что мешает юзеру просто скачать эту страницу и посмотреть на пароли?
Или я чего то не понимаю?
AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com -
21 апреля 2009 г. 8:03Пароль хранится в скрипте asp в папке "c:\inetpub\wwwroot\" на сервере. Удачи пользователю, он увидит только имя своего компьютера "Response.Write strIPComputer". Скрипт выполняется на стороне сервера, пользователь увидит только результат работы скрипта. ЗЫ: Как пример - пользователь не имеет доступа к коду server-side .PHP, .CGI, .ASP страниц на сайтах, а только к тексту сгенерированных ими страниц и client-side jscript и vbscript скриптов.
-
21 апреля 2009 г. 11:41Модератор
Ага, теперь кажется понял. На IIS надо разрешить execute и запретить read из вебпапки? Может еще что то?
AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com -
21 апреля 2009 г. 11:43
wewerty , красивое решение!
Василий , startup-скрипт инициирует запуск скрипта на веб-сервере, а не на клиенте.
> проблема не в этом, а в том что пароль пойдет в открытом виде по сети.
С этим полностью согласен. Как раз веб-сервер эту проблему решает.
Вот мой исправленный вариант:
http://dumpz.org/7708/
Основные изменения:
1)
objWMIService.ExecQuery("Select * from Win32_UserAccount")
изменено на
objWMIService.ExecQuery("Select * from Win32_UserAccount where Domain=""" & WshNetwork.ComputerName & """")
теперь происходит вывод действительно только ЛОКАЛЬНЫХ учеток => быстрее и корректнее работает скрипт.
wewerty , рекомендую вам тоже изменить соответствующую строчку у себя
2) До этого у меня менялись пассы всем локальным юзерам. Теперь системные не трогаются.
if objSystemUser.Name<>"HelpAssistant" and objSystemUser.Name<>"SUPPORT_388945a0" and objSystemUser.Name<>"krbtgt" and objSystemUser.Name<>"ASPNET" then
.....- Предложено в качестве ответа Vasily GusevModerator 26 апреля 2009 г. 5:41
- Помечено в качестве ответа Vasily GusevModerator 8 марта 2010 г. 9:58
-
22 апреля 2009 г. 9:59МодераторВместо objWMIService.ExecQuery("Select * from Win32_UserAccount") надо писать objWMIService.ExecQuery("Select * from Win32_UserAccount where LocalAccount = True")
Сазонов Илья http://www.itcommunity.ru/blogs/sie/ -
1 мая 2009 г. 4:34Тоже долго думал как передать системе пароль, так чтобы пользователь не смог его подсмотреть. В результате получился целый комплекс мер по обеспечению физической и сетевой безопасности компьютеров. Внедрено ещё не полностью, но оттестировано полностью. Итак - мои 5 копеек:
1) Пароль задаётся стартап-скриптом (на VBS + "шифрован" утилитой screnc). Пароль формируется по определённому алгоритму (вариация на тему XOR) из двух строк. Одна строка содержится в теле скрипта, а другая передаётся скрипту в качестве параметра командной строки.
2) Чтобы юзер не смог узнать этот параметр - генерация результирующей политики запрещена. Это правда не распространяется на пользователей имеющих локальные админские права, но у нас большинство работают с правами рядовых...
3) Чтобы юзер не смог скопировать файл скрипта - чтение политики разрешено только компьютерам, но не пользователям домена. Конечно, пользователь имеющий админские права может прикинуться системой и скопировать файл...
4) Чтобы рядовой юзер не мог сбросить админский пароль - в CMOS загрузка только с HDD-0, пароль на CMOS и пломба на корпус.
5) И наконец - доступ к компьютерам по сети разрешён только доменным учётным записям (админы, юзеры и КД). Даже если кто-то узнает пароль локального админа, воспользоваться им он сможет только с консоли. Прямой угрозы для других компов в сети он не представляет. Поэтому пароль один на всех компах и менять пока не собираемся.
Пользователи имеющие локальные админские права могут обойти пункты 2 и 3. Но с большой вероятностью делать этого не будут т.к. у них и так всё есть. -
27 февраля 2010 г. 13:00Есть варианты решения проблемы четвертого пункта (пользователь срывает пломбу, обнуляет bios, делает плохие дела получает Админа, делает всё как было):1. Запретить локальный вход совсем (даже в безопасном режиме)2. Не пускать в домен с правами отличными на локальной машине от пользователя?
-
28 февраля 2010 г. 7:13Модератор0. Использовать терминальный клиент.
AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com -
17 мая 2011 г. 11:55
wewerty, не поясните пару моментов?
Как правильно раздать права?Суть проблемы: всё работает лишь в случае, когда в IIS->Directory Security включен анонимный доступ (с уч. записью доменного админа).
В случае включения опции Integrated Win Authentication:
под XP при выполнении логонскрипта выдаёт ошибку: "Отказано в доступе" 80070005
под Win7 авторизируется на IIS как Domain\Comp$, но пароли локальных админов не меняются.
Спасибо.

