Как я могу работать как «Сетевая служба»?


83

Я пытаюсь запустить процесс под другой учетной записью. У меня есть команда:

runas "/user:WIN-CLR8YU96CL5\network service" "abwsx1.exe"

но затем запрашивается пароль. Однако для сетевой службы пароль не установлен.

Возможно ли то, что я пытаюсь сделать?

Ответы:


126

Используйте PsExec.exe из SysInternals, запустив его из командной строки с повышенными привилегиями.

например, это откроет новую командную строку, работающую как СЕТЕВАЯ СЛУЖБА:

psexec -i -u "nt authority\network service" cmd.exe 

это запустит его как ЛОКАЛЬНУЮ СИСТЕМУ:

psexec -i -s cmd.exe 

Вы можете проверить это, запустив whoamiкомандную строку.

Смотрите также:


@stej - Не для меня. Попробуйте запустить его из командной строки с повышенными привилегиями, т.е. запустите командную строку от имени администратора.
Рори

Понятия не имею, версия psexec - 2.11. Я также пробовал его на winserver 2012, работающем как облачная служба Azure с консоли с повышенными привилегиями, но он все еще запрашивает пароль.
stej

У меня тоже просит пароль.
Андерсон Форталеза,

1
Похоже, это не работает на 64-битных машинах. Обходной путь - использовать вместо этого devxexec , который действительно работает.
mellamokb

3
@ Рори: Думаю, я понял это. Для сетевой службы (по крайней мере, в роли Azure), похоже, вам необходимо указать полный точный путь к cmd.exe. По какой-то причине у него нет переменной PATH по умолчанию или чего-то в этом роде ...
mellamokb

16

В планировщике задач создайте задачу для запуска приложения от имени пользователя NETWORK SERVICE. Затем вы можете запустить задачу из командной строки, используя

schtasks / run / TN "имя задачи"

Где TaskName это имя вашей задачи.


как создать эту задачу с помощью NT Authority \ localservice?
Cobaia 03

Можно ли запустить mmc.exe как локальную службу?
Cobaia 03 окт.13,

6

Обычно вы можете выдавать себя за учетную запись службы из службы Windows, как упоминается в этом сообщении :

Хитрость заключается в том, чтобы запустить ваш код как локальную систему, и оттуда вы можете выдавать себя за учетные записи служб, используя соответствующее имя пользователя без пароля. Один из способов запустить ваш код от имени учетной записи Local System - создать оболочку командной строки, используя метод, показанный ниже (взятый из этого исходного сообщения ), и выполнить сборку оттуда. Вызов System.Diagnostics.Debugger.Break()вашего кода позволяет вам отлаживать.

Чтобы создать оболочку командной строки, работающую под локальной системной учетной записью, откройте новое окно командной строки и введите:

c:\sc create testsvc binpath= "cmd /K start" type= own type= interact

с последующим:

c:\sc start testsvc

Должно открыться новое командное окно. В этом окне запустите свой application.exe - вы увидите, что теперь вы работаете как встроенная системная учетная запись пользователя. После завершения тестирования вы можете удалить созданный вами тестовый сервис, введя:

c:\sc delete testsvc

Если вы попытаетесь сделать это в своем собственном пользовательском контексте, такие попытки потерпят неудачу.


4

Я тестировал

PsExec -i -s cmd.exe

и

PsExec -i -u "nt authority\network service" cmd.exe

на PsExec64-v2.2, для win10-home-x64-10.0.14393 и win10-pro-x64-10.0.15063 использовать обычную консоль не удалось, используйте консоль с повышенными правами, она отлично работает


Этот подход можно подтвердить с помощью команды whoami, которая работает как в cmd.exe, так и в Powershell.exe.
Тор Аурстад

1

Я знаю, что это старый поток, но это лучший результат для этой проблемы, и я хотел иметь возможность запускать команду с помощью PowerShell без необходимости устанавливать какие-либо дополнительные инструменты на нашем Windows Server. Я придумал следующий сценарий PowerShell, который создает запланированную задачу, запускает ее, а затем удаляет. Он также написан, чтобы позволить вам запускать команду под разными учетными записями пользователей.

function InstallDotNetCoreGlobalTool($PackageId, $Action = "install", $User = "NT AUTHORITY\NETWORK SERVICE", $Password = "")
{
    $TaskName = "AzureDotNetCoreGlobalToolConfiguration"
    $Command = "dotnet.exe"
    $Arguments = "tool $Action -g " + $PackageId
    $TaskAction = New-ScheduledTaskAction -Execute $Command -Argument $Arguments

    Write-Host "Setting up scheduled task to run" $Command $Arguments

    Register-ScheduledTask -TaskName $TaskName -User $User -Action $TaskAction
    Start-ScheduledTask -TaskName $TaskName

    Write-Host ""
    Write-Host "Waiting on scheduled task to complete."

    while ((Get-ScheduledTask -TaskName $TaskName).State  -ne 'Ready') 
    {
      # keep waiting
    }

    Write-Host ""

    If((Get-ScheduledTask $TaskName | Get-ScheduledTaskInfo).LastTaskResult -eq 0)
    {
        Write-Host $PackageId $Action "completed successfully"
    }
    else
    {
        If ($Action -eq "install")
        {
            Write-Host $PackageId "failed to $Action. Ensure the proper dependencies have been installed or that it isn't already installed."
        }
        Else {
            Write-Host $PackageId "failed to $Action. It may not currently be installed."
        }        
    }

    Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false
}

InstallDotNetCoreGlobalTool "Amazon.Lambda.Tools" "uninstall"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.