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


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.