'네트워크 서비스'로 '실행'하려면 어떻게해야합니까?


83

다른 계정으로 프로세스를 실행하려고합니다. 나는 명령이있다 :

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

그러나 이것은 암호를 요구합니다. 그러나 네트워크 서비스에 대해 설정된 암호가 없습니다.

내가하려는 것이 가능합니까?

답변:


124

관리자 권한 명령 프롬프트에서 실행되는 SysInternals의 PsExec.exe 를 사용 합니다.

예를 들어 NETWORK SERVICE로 실행되는 새 명령 프롬프트가 열립니다.

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

이것은 로컬 시스템으로 실행됩니다.

psexec -i -s cmd.exe 

whoamicmd 프롬프트에서 실행 하여이를 확인할 수 있습니다 .

또한보십시오:


@stej-나를위한 것이 아닙니다. 상승 된 명령 프롬프트에서 실행 해보십시오. 즉, 관리자 권한으로 명령 프롬프트를 실행하십시오.
Rory

몰라요, psexec 버전은 2.11입니다. 또한 관리자 권한 콘솔에서 Azure 클라우드 서비스로 실행되는 winserver 2012에서 시도했지만 여전히 암호를 요청합니다.
stej

나도 암호를 묻습니다.
Anderson Fortaleza

1
64 비트 컴퓨터에서는 작동하지 않는 것 같습니다. 해결 방법은 대신 devxexec 를 사용 하는 것입니다.
mellamokb

3
@Rory : 내가 알아 낸 것 같아요. 네트워크 서비스 (최소한 Azure 역할)의 경우 cmd.exe에 대한 정확한 전체 경로를 지정해야합니다. 몇 가지 이유 때문에 기본 PATH 변수 또는 뭔가 ... 없습니다
mellamokb

15

작업 스케줄러에서 NETWORK SERVICE 사용자로 응용 프로그램을 실행하는 작업을 만듭니다. 그런 다음 명령 줄에서 다음을 사용하여 작업을 실행할 수 있습니다.

schtasks / run / TN "작업 이름"

여기서 taskname 은 작업의 이름입니다.


NT Authority \ localservice를 사용하여이 작업을 만드는 방법은 무엇입니까?
Cobaia

mmc.exe를 로컬 서비스로 실행할 수 있습니까?
Cobaia

6

이 게시물에서 언급 한 것처럼 일반적으로 Windows 서비스에서 서비스 계정으로 만 가장 할 수 있습니다 .

트릭은 코드를 로컬 시스템으로 실행하는 것이며 여기에서 암호없이 적절한 사용자 이름을 사용하여 서비스 계정을 가장 할 수 있습니다. 로컬 시스템 계정으로 코드를 실행하는 한 가지 방법은 아래 표시된 기술 (이 원래 게시물 에서 가져옴 ) 을 사용하여 명령 줄 셸을 만들고 거기에서 어셈블리를 실행하는 것입니다. 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의 경우 일반 콘솔을 사용하지 못했습니다. 승격 된 콘솔을 사용하면 정상적으로 작동합니다.


이 방법은 cmd.exe와 Powershell.exe에서 모두 작동하는 "whoami"명령을 사용하여 확인할 수 있습니다.
Tore Aurstad

1

이것이 오래된 스레드라는 것을 알고 있지만이 문제의 가장 큰 결과이며 Windows Server에 추가 도구를 설치하지 않고도 PowerShell을 사용하여 명령을 실행할 수 있기를 원했습니다. 예약 된 작업을 생성하고 실행 한 다음 삭제하는 다음 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"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.