Страница 1 из 1

Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 04.04.2013 (Чт) 20:28
Vova_2581
Имеется WMI код...
Код: Выделить всё
Private Sub cmd_Restart_Click()
Dim strComputer As String
'strComputer = "."
strComputer = "192.168.6.1"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate," _
& "(Shutdown)}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery( _
  "Select * from Win32_OperatingSystem")
For Each ObjOperatingSystem In colOperatingSystems
    ObjOperatingSystem.Reboot ' Для перезагрузки
Next
End Sub

Когда strComputer = "." все работает прекрасно, но когда указываешь соседний комп по IP="192.168.6.1" связанный с ним по сети одной рабочей группой, то компилятор выдает ошибку доступа, пишет: “Нет разрешения”.
Вопрос в том, какое я должен включить разрешение соседнего компа, чтобы его перезагрузить по сети? Причем доступ по нулевой сессии разрешен на обоих компах.

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 04.04.2013 (Чт) 22:16
Хакер
А что, нужно обязательно через WMI? Почему не устраивает перезагрузка через RPC (команда shutdown)?

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 05.04.2013 (Пт) 15:16
Vova_2581
Ввожу...
shutdown -r -m \\192.168.6.1
Получаю ответ: "Сетевой путь не найден". А машина в сети есть. Доступ по сети на нее тоже есть. На других компах тоже самое. В чем прикол?

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 05.04.2013 (Пт) 15:20
Хакер
Vova_2581 писал(а):Доступ по сети на нее тоже есть.

Что значит «доступ по сети»?

Да и как я мог проглядеть это:
Vova_2581 писал(а):о компилятор выдает ошибку доступа, пишет: “Нет разрешения”.

Компилятор выдаёт ошибку доступа... мама дорогая...

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 05.04.2013 (Пт) 16:05
Vova_2581
А при чем тут твоя мама? :shock:
Доступ по сети значит, что при обзоре в сетевом окружении машина видна и доступ на нее имеется. Что еще нужно?

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 05.04.2013 (Пт) 16:17
Хакер
Vova_2581 писал(а):А при чем тут твоя мама? :shock:

А почему моя? Она тут тем же боком, что и компилятор.

Vova_2581 писал(а):Доступ по сети значит, что при обзоре в сетевом окружении машина видна и доступ на нее имеется. Что еще нужно?

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

Вполне возможно, что SMB-протоколу на целевой машине доступ открыт, а протоколу DCERPC доступ закрыт.

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 05.04.2013 (Пт) 16:45
Vova_2581
Хакер писал(а):...тем же боком, что и компилятор

Ладно... написал неправильно, проехали...
Хакер писал(а):Вполне возможно, что SMB-протоколу на целевой машине доступ открыт, а протоколу DCERPC доступ закрыт.

И что же в таком случаи делать? Как DCERPC открыть доступ?

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 05.04.2013 (Пт) 16:53
Vova_2581
Может быть попробовать использовать объект SWbemLocator из WMI? Но тогда нужно явно указывать логины и пароли. Что же мне их создавать на каждую машину? У меня на работе их 28!

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 06.04.2013 (Сб) 12:12
ger_kar
У тебя какая модель доступа стоит? Гостевая или обычная? Если гостевая то прав, для того чтобы выключать компьютер по сети у тебя нет по определению. Гость и есть гость. При этом совершенно неважно что ты будешь использовать моникер или SWbemLocator. И явное указание пользователей с паролями ничего не даст. И вообще, даже если модель доступа обычная, чтобы выключать компьютер по сети удаленно, должно выполняться множество условий. А для того, что-бы использовать именно моникер, нужно еще чтобы на каждом из компьютеров, которые будут выключаться была учетная запись с идентичными параметрами учетной записи, от имени которой происходит запуск. Т.е. должны совпадать имя учетной записи и пароль и привилегии.

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 06.04.2013 (Сб) 15:25
Vova_2581
ger_kar писал(а):У тебя какая модель доступа стоит? Гостевая или обычная?

Мне не совсем понятно выражение «модель», если правильно понимаю Вашу логику, то походу обычная... Никаких паролей при входе, профиль администратора.
ger_kar писал(а):При этом совершенно неважно что ты будешь использовать моникер или SWbemLocator. И явное указание пользователей с паролями ничего не даст.

Даже если указать логин и пароль администратора?
ger_kar писал(а):...должно выполняться множество условий...

Блин... неужели все так сложно?
ger_kar писал(а):...для того, что-бы использовать именно моникер, нужно еще чтобы на каждом из компьютеров, которые будут выключаться была учетная запись с идентичными параметрами учетной записи, от имени которой происходит запуск.

Я Вас понял. Понимаете... все машины, которые мы получили, имеют одинаковое железо, и потому система сначала была установлена на одну, а потом через Image-образ Acronis’a скопирована на все остальные. Поэтому настройки везде одинаковые.

P.S. Попробую явно указать логин и пароль одинаковый для двух машин и запуск по-умолчанию (без ввода паролей), а потом еще раз Reboot по моникеру WMI. Если не получиться, то уже склоняюсь к тому, чтобы писать клиент-серверное приложение...

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 06.04.2013 (Сб) 16:07
ger_kar
Vova_2581 писал(а):Мне не совсем понятно выражение «модель», если правильно понимаю Вашу логику, то походу обычная
Причем здесь логика? Есть конкретная политика, которая обычно стоит на гостевой модели доступа (На Win XP по крайней мере так, на других не знаю).
Model.png
Model.png (13.82 Кб) Просмотров: 12878

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 06.04.2013 (Сб) 16:24
ger_kar
Vova_2581 писал(а):Даже если указать логин и пароль администратора?
Если модель гостевая, то по барабану что ты укажешь, потому как все пользователи, пытающиеся получить доступ, будут в любом случае идентифицированы как гости.
Vova_2581 писал(а): ger_kar писал(а):...должно выполняться множество условий...
Блин... неужели все так сложно?
Абсолютно ничего сложного нет, нужно просто настроить правильно политики безопасности и все. Судя по ответам, ты понятия об этом не имеешь. Поэтому запусти secpol.msc и внимательно изучи две вкладки 'Назначение прав пользователя' и 'Параметры безопасности'
Policy.png
Policy.png (4.89 Кб) Просмотров: 12878

С таким же успехом к этим вкладкам можно добраться запустив gpedit.msc
Policy2.png
Policy2.png (7.06 Кб) Просмотров: 12878

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 06.04.2013 (Сб) 16:50
ger_kar
Под изучением понимается, не просто взглянул, посмотрел и закрыл, а примерно такой процесс - открыл свойства каждого параметра, прочитал, осмыслил, если понял - переход с следующей политике, а иначе погуглить указав конкретную политику, и при неудаче задав вопрос на форуме. Таким образом потраченное время на изучение с лихвой окупиться в будущем. Также необходимо обязательно учесть, что некоторые политики перекрывают другие. Таким образом изменение всего одной политики может повлечь такие вещи, как полное отсутствие доступа к рабочей станции по сети.
Можно попробовать не меняя модель сетевого доступа, например дать гостю право на выключение компьютера, экспериментируя с этой политикой
Принудительное удаленное завершение работы

Этот параметр безопасности определяет, каким пользователям разрешено завершать работу компьютера с удаленного узла сети. Неправильное использование этого права может привести к атаке на службу.

Данное право пользователя назначается в объекте групповой политики стандартного контроллера домена, а также в локальной политике безопасности рабочих станций и серверов.

По умолчанию:
На рабочих станциях и серверах:
"Администраторы".

На контроллерах домена:
"Администраторы",
"Операторы сервера".

Мне эксперименты ставить не на чем, да и времени на это нет. А ты можешь попробовать и написать полученный результат. При этом проверять лучше сразу оба метода - утилитой shutdown, и через WMI. Для экспериментов (и не только) удобно использовать shutdown -i. Не знаю как WMI, а через shutdown вполне может прокатить. Но это только предположение. А изменение модели доступа - это проверенный и надежный метод.

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 06.04.2013 (Сб) 20:58
Vova_2581
ger_kar
Спасибо за разъяснения. Информации много, буду переваривать и пробовать.

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 06.04.2013 (Сб) 21:12
ger_kar
Да и еще немаловажный фактор могут оказать заблокированные файрволом порты.
Хакер писал(а):На сетевом окружении свет клином не сошёлся: это всего лишь один из тысяч протоколов, работающих по сети. Вполне возможно, что SMB-протоколу на целевой машине доступ открыт, а протоколу DCERPC доступ закрыт.
Про это тоже не нужно забывать.

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 07.04.2013 (Вс) 17:20
Vova_2581
ger_kar писал(а):...заблокированные файрволом порты

На этих компах встроенный файрвол отключен других нет и никакого антивирусника тоже нет. Он там просто не нужен.
С недели попробую пробить разные варианты, потом отпишусь.

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 08.04.2013 (Пн) 22:40
Vova_2581
Уважаемый ger_kar, Вашими молитвами - все получилось! :)

Алгоритм моих действий был таким...
Вариант 1
Сначала я нашел модель доступа запустив secpol.msc – «Сетевой доступ: модель совместного доступа и безопасности для локальных учетных записей» и он действительно был установлен, как гостевой. Переключил на «Обычный»...
Изображение
Попробовал перезагрузить удаленно – к сожалению, не получилось ("Сетевой путь не найден").
Пробовал менять другие настройки политики, но все без толку. Да и в основном везде фигурировал профиль администратора по умолчанию.

Вариант 2
Не меняя того, что уже сделал в варианте 1, проверил, что обе тестовые машины загружаются под одинаковым профилем и этот профиль именно администратора, пароль пустой.
Попробовал перезагрузить удаленно – не получилось ("Сетевой путь не найден").

Вариант 3
Установил пароль администратора, повторил все тоже самое на второй машине. Перезагрузил их обе и вошел в систему под профилем администратора с установленным паролем. Выполнил shutdown -r -m \\192.168.6.1

О, Всевышний Господь! Ты услышал наши мольбы! Аллилуйя!

Получилось! :)
Соседняя машина перезагрузилась удаленно.
Самое интересное, что если пароль администратора пустой, то перезагрузки не происходит, а происходит: "Сетевой путь не найден"! Ну, наверное, это правильно, чтобы всякие хакеры не зная «броду» не могли таким образом баловаться и шутить над друзьями и подругами для прикола.
Только, когда пароль указывается явно, и он одинаков для обеих машин, то все получается.

Далее осталось дело за малым...
Выполнил команду control userpasswords2 в окне «Выполнить», и отменил требование в обязательном порядке вводить пароль при входе в систему (выделил нужного пользователя (а это администратор) и снял «птичку»...).

Вот, собственно говоря, и все!
СПАСИБО, ger_kar! :)

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 08.04.2013 (Пн) 22:44
Vova_2581
P.S. Да!! WMI тоже срабатывает! :)

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 08.04.2013 (Пн) 22:59
ger_kar
Vova_2581 писал(а):Самое интересное, что если пароль администратора пустой, то перезагрузки не происходит, а происходит: "Сетевой путь не найден"! Ну, наверное, это правильно, чтобы всякие хакеры не зная «броду» не могли таким образом баловаться и шутить над друзьями и подругами для прикола.
Ну вообще то на мой взгляд это глюк, так как отсутствие доступа не должно интерпретироваться как неправильный путь. Судя по скрину у тебя Windows XP, а судя по глюку SP3. Вообще Windows SP2 и SP3 сильно отличаются поведением при сетевом доступе. На SP2 пароль запрашивался при доступе на сетевую шару. Т.е. можно было посмотреть список доступных ресурсов имея права гостя. И только при доступе на конкретный ресурс запрашивался пароль. В SP3 пароль просит сразу, при попытке доступа на удаленный хост. Видимо из-за этого и имеем "Сетевой путь не найден", хотя по идее должна бы быть "Нет прав" или что-то в этом духе.

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 09.04.2013 (Вт) 20:03
Vova_2581
Да, видимо, действительно глюк... Я так задолбал компьютеры своими экспериментами, что они от меня уже устали. :)
Еще раз – спасибо за помощь!

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 10.04.2013 (Ср) 21:04
Dmitriy2003
Vova_2581 писал(а):...Что же мне их создавать на каждую машину? У меня на работе их 28!

Vova_2581 писал(а):Далее осталось дело за малым...
Выполнил команду control userpasswords2 в окне «Выполнить», и отменил требование в обязательном порядке вводить пароль при входе в систему (выделил нужного пользователя (а это администратор) и снял «птичку»...).

Печалька

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 10.04.2013 (Ср) 21:58
ger_kar
А что тут печального?

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 10.04.2013 (Ср) 22:46
Dmitriy2003
ger_kar писал(а):А что тут печального?

Vova_2581 писал(а):Только, когда пароль указывается явно, и он одинаков для обеих машин, то все получается.

Vova_2581 писал(а):Далее осталось дело за малым...
Выполнил команду control userpasswords2 в окне «Выполнить», и отменил требование в обязательном порядке вводить пароль при входе в систему (выделил нужного пользователя (а это администратор) и снял «птичку»...).

Большая печалька

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 11.04.2013 (Чт) 6:13
ger_kar
Dmitriy2003 писал(а):Большая печалька
Ну очень информативное сообщение ...

Re: Как корректно выполнить Reboot по WMI сетевого компа

СообщениеДобавлено: 12.04.2013 (Пт) 18:17
Dmitriy2003
ger_kar писал(а):Ну очень информативное сообщение ...

On computer XPClient1:
Run command -> netsh firewall set service RemoteAdmin enable
Run command -> netsh firewall add portopening protocol= tcp port= 135 name= DCOM_TCP135
Run command -> netsh firewall add allowedprogram program= %windir%\system32\wbem\unsecapp.exe name= UNSECAPP

Create Script wmitest.vbs ->
Код: Выделить всё
Const SW_NORMAL = 1

strComputer = "XPClient2"
strDomain = strComputer
strUser = "WMI_RM_Access"
strPassword = "Pa$$w0rd"

Wscript.Echo "Connecting to " & strComputer & "..."
Wscript.Echo

Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")

Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
    "root\CIMV2", strUser, strPassword, "MS_409", "ntlmdomain:" + strDomain)

Set colSwbemObjectSet = objSWbemServices.ExecQuery("Select * From Win32_Process")

For Each objProcess in colSWbemObjectSet
    Wscript.Echo "Process Name: " & objProcess.Name
Next

Wscript.Echo

Set objOSSet = objSWbemServices.InstancesOf("Win32_OperatingSystem")

For Each objOS in objOSSet
    WScript.Echo objOS.CSName & vbNewLine & objOS.Caption & _
   vbNewLine & objOS.Version & vbNewLine & objOS.Manufacturer
    'WScript.Echo "Call 'Shutdown'... "
    'WScript.Echo objOS.Shutdown()
Next

Set objStartup = objSWbemServices.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = SW_NORMAL

strCommand = "shutdown.exe -s -t 30 -c WMI_RM_Access_Control_Shutdown"
Set objProcess = objSWbemServices.Get("Win32_Process")

intReturn = objProcess.Create(strCommand, null, objConfig, intProcessID)

If intReturn <> 0 Then
    Wscript.Echo "Process could not be created." & _      
        vbNewLine & "Command line: " & strCommand & _
        vbNewLine & "Return value: " & intReturn
Else
    Wscript.Echo "Process created." & _
        vbNewLine & "Command line: " & strCommand & _
        vbNewLine & "Process ID: " & intProcessID
End If

On computer XPClient2:
Make User Account -> Name: 'WMI_RM_Access'; Pass: 'Pa$$w0rd'; Member Of: 'Users'
Set Local Policy -> User Rights -> Deny Logon Localy for 'WMI_RM_Access' to TRUE
Set Local Policy -> User Rights -> Force shutdown from a remote system for 'WMI_RM_Access' to TRUE
Run command -> netsh firewall set service RemoteAdmin enable
Run DCOMCNFG -> Component Service -> Computer -> Properties -> COM Security -> Launch and Activation Permissions -> Edit Limits ->
Add 'WMI_RM_Access' User -> Set for 'WMI_RM_Access' User 'Remote Launch: True'; 'Remote Activation: True'
Run Administrative Tools -> Computer Management -> Services and Applications -> WMI Control -> Properties -> Security -> Root\CIMV2 ->
Security -> Add 'WMI_RM_Access' User -> Set for 'WMI_RM_Access' User 'Remote Activation: True' -> Root\CIMV2\ms_409 ->
Security -> Add 'WMI_RM_Access' User -> Set for 'WMI_RM_Access' User 'Remote Activation: True'