비 관리 서비스 계정으로 powerhshell을 사용하여 서비스를 예약하여 다시 시작


11

다운되기 전에 작업을 예약하고, powershell을 사용하여 서비스를 다시 시작하거나, 관리자가 아닌 계정에 서비스를 다시 시작할 수있는 권한을 부여하는 방법을 알고 있습니다. 그것은 문제가 아닙니다. 그러나 문제는이 세 가지 작업이 모두 결합 된 것입니다.

네트워크 폴더에서 파일을 처리해야하는 Windows 서비스가 있습니다. 따라서 실제로는 일반 도메인 계정 인 "서비스 계정"으로 로그온합니다. 이 도메인 계정은 관리자는 아니지만 해당 폴더에 대한 액세스 권한이 있습니다. 서비스가 제대로 실행되고 작동합니다.

그러나 때로는 파일 중 하나에 다른 파일을 처리하지 못하게하는 오류가 있습니다. 일반적으로 누군가가 알아 차리는 데 시간이 걸리고 약간의 백 로그가 있습니다.

따라서 Powershell에서 이러한 잘못된 파일에 대한 네트워크 폴더를 폴링하는 모니터링 스크립트를 작성했습니다. 파일이 발견되면 검토를 위해 파일이 임시 폴더로 이동되고 서비스를 다시 시작해야합니다.

서비스를 시작하고 중지하기 위해 그룹 정책을 통해 서비스 계정 권한을 부여했습니다.

여기에 이미지 설명을 입력하십시오

서비스 계정으로 서버에 로그온하면 서비스 MMC를 사용하여 서비스를 수동으로 다시 시작할 수 있습니다. 또한 powershell 스크립트를 실행할 수 있으며 폴더를 폴링하고 파일을 이동하고 서비스를 다시 시작해야합니다. 큰!

다음 단계에서는 10 분마다 실행되는 예약 된 작업을 만들었습니다. 작업은 서비스와 동일한 서비스 계정을 사용하여 powershell 스크립트를 실행합니다. "가장 높은 권한으로 실행"상자가 선택되어 있습니다. 내가 말했듯이 powershell 스크립트는 네트워크 드라이브에 액세스해야하므로 로컬 서버 관리자로 실행할 수 없으며 이와 같은 멘탈 작업에 도메인 관리자 자격 증명을 사용하고 싶지 않습니다. (나는 가능한 한 최소한의 특권 원칙을 이행하려고 노력한다.)

로컬 보안 정책 MMC를 사용하여 로컬 서버에서 서비스 계정에 "일괄 작업으로 로그온"권한을 부여했습니다.

이제 이해할 수없는 부분 : 예약 된 시간에 예약 된 작업이 성공적으로 완료되고 powershell 스크립트가 실행되고 있습니다. 스크립트가 폴더를 폴링하고 오류 파일이 이동됩니다. 작동하지 않는 유일한 것은 서비스를 다시 시작하는 것입니다 ...?! 동일한 사용자로 스크립트를 수동으로 실행하면 완벽하게 작동합니다.

이벤트 뷰어에는별로 표시되지 않지만 스크립트에 로깅하면이 오류가 표시됩니다.

TerminatingError (Stop-Service) : "컴퓨터 '.'에서 Service Control Manager를 열 수 없습니다.이 작업에는 다른 권한이 필요할 수 있습니다."

서비스를 다시 시작하는 데 사용하는 명령은 다음과 같습니다.

Stop-Service -Verbose -DisplayName $($service[1])
...
Start-Service -Verbose -DisplayName $($service[1])

(2008 R2 도메인에서 Windows Server 2012 R2 및 Powershell 버전 4를 사용하고 있습니다.)

업데이트 : 나는 subinacl ( 여기에 설명 된 것처럼)을 사용하여 사용자에 대한 서비스 권한을 설정하고 SDDL 문자열을 수동으로 설정 ( 여기에 설명 된대로 )하려고 했으므로 제어 플래그는 다음과 같습니다 (A ;; CCLCSWRPWPDTLOCRRC ;;; S-1- X-XX-XXXXXXXXXX-XXXXXXXX-XXXXXXXXX-XXXX). 또한 GPO에서 서비스 권한을 모든 권한으로 설정하려고했습니다. 이들 중 어느 것도 문제를 해결하지 못했습니다. 서버의 로컬 관리자 인 도메인 계정으로 작업을 예약하면 제대로 작동하기 때문에 여전히 간과되는 어딘가에 권한 문제가 있어야합니다 .


이것은 도움이 될 수 있습니다 serverfault.com/questions/357424/… powershell은 권한에 대해 매우 까다 롭고 명백한 권한은 아닙니다.
Drifter104


@ Drifter104 : Event GPO를 사용하여 하위 권한이 아닌 서비스에 대한 권한을 설정했지만 STOE 매개 변수로 시도했지만 여전히 동일한 결과를 보았습니다. 내 GPO 설정을 다시 확인했으며 종속 서비스 열거 옵션도 활성화되어 있습니다.
VolrathTheFallen

@ MyronSemack-msemack 기사에 설명 된 것처럼 서비스에 대한 SDDL 문자열을 수동으로 설정하려고 시도했지만 여전히 GPO와 subinacl이 서로 겹치는 것처럼 보이지만 궁극적으로 GPO와 subinacl이 동일한 작업을 수행한다고 생각합니다.
VolrathTheFallen

1
CmdLet Set-Service $($service[1]) -status stopped -ComputerName . -Verbose ....대신 시도해 Stop-Service보는 것은 어떻습니까? 이 답변에 따라 Stop-Service 및 Start-Service를 원격으로 사용할 수 없습니다. 원격 컴퓨터에서 Get-Service –ComputerName을 사용할 수 없으며 오류 메시지가 "원격"localhost '에 연결하려고하는 것과 관련이있을 수 있습니다.' (<== 저것은 점입니다.)
John aka hot2use

답변:


3

다른 질문에 anwser가 아니라 내 문제를 해결.

내가 한 단계는 다음과 같습니다.

  1. enable-psremoting 서버에서 관리자 powershell 프롬프트로
  2. Set-PSSessionConfiguration -Name Microsoft.PowerShell -ShowSecurityDescriptorUI 서버에서 관리자 powershell 프롬프트로
  3. 모든 권한으로 서비스 계정 (또는 보안 그룹)을 추가했습니다.
  4. sc sdshow scmanager 서버의 관리자 명령 프롬프트
  5. SDDL 출력 복사
  6. (A;;KA;;;SID_OF_USER_OR_SECURITY_GROUP)S : 부분 전에 SDDL에 추가
  7. sc sdset scmanager THE_MODIFIED_SDDL 광산은 다음과 같이 보였다 : sc sdset scmanager D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;KA;;;S-1-X-XX-XXXXXXXXXX-XXXXXXXX-XXXXXXXXX-XXXX)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)
  8. Start-ServicePowershell 스크립트를 변경 하여 Set-Service(Set-Service가 작동하지 않음) 대신 CmdLet을 사용 하십시오.

단순한 것으로 드러난 것처럼 보였고, 이전보다 더 복잡한 방법이었습니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.