developer tip

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

copycodes 2020. 10. 19. 08:13
반응형

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


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

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

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

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


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

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

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

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

psexec -i -s cmd.exe 

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

또한보십시오:


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

schtasks / run / TN "작업 이름"

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


이 게시물에서 언급 한 것처럼 일반적으로 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

자신의 사용자 컨텍스트에서 그렇게하려고하면 이러한 시도는 실패합니다.


나는 테스트했다

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의 경우 일반 콘솔을 사용하지 못했습니다. 승격 된 콘솔을 사용하면 정상적으로 작동합니다.


이것이 오래된 스레드라는 것을 알고 있지만이 문제의 가장 큰 결과이며 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"

참고 URL : https://stackoverflow.com/questions/6911310/how-do-i-run-as-network-service

반응형