도메인 구성원이 아닌 서버의 임의 사용자 또는 그룹에 서비스 시작 / 중지 / 다시 시작 권한을 부여하려면 어떻게합니까?


61

우리는 서버에서 실행되는 Windows 서비스 제품군을 보유하고 있으며 다른 서비스를 돌보는 하나의 서비스를 제외하고 서로 독립적으로 여러 자동화 된 작업을 수행합니다.

서비스 중 하나가 응답하지 않거나 응답하지 않으면이 서비스는 서비스를 다시 시작하려고 시도하며, 시도 중에 예외가 발생하면 대신 지원 팀에 전자 메일을 보내서 서비스를 다시 시작할 수 있습니다.

약간의 연구를 수행 한 결과 KB907460 에 언급 된 대안 에서 서비스가 관리자 권한을 실행하는 계정을 제공하는 것에 이르기까지 몇 가지 '솔루션'을 발견 했습니다.

이 두 가지 방법 중 어느 것에도 익숙하지 않습니다. Microsoft 기술 자료 문서에 설명 된 첫 번째 방법의 결과를 이해하지 못하지만 서비스가 실행되는 계정에 관리자 액세스 권한을 부여하고 싶지는 않습니다. .

로컬 보안 정책과 계정이 서비스로 로그온 할 수 있는지 여부를 정의하는 정책 이외의 다른 사항을 간략히 살펴 보았습니다. 서비스와 관련이있는 것처럼 보이는 것은 볼 수 없습니다.

우리는 이것을 Server 2003과 Server 2008에서 실행하고 있으므로 어떤 아이디어 나 조언도 기꺼이받을 것입니다!


설명 : 특정 사용자 또는 그룹에게 모든 서비스를 시작 / 중지 / 다시 시작하는 기능을 부여하고 싶지 않습니다. 특정 서비스에서만 특정 사용자 또는 그룹에게만 권한을 부여하고 싶습니다 .


추가 설명 : 이 권한을 부여 해야하는 서버는 도메인에 속하지 않습니다.이 파일은 파일을 수신하고 처리하여 제 3 자에게 전송하는 두 대의 인터넷 서버이며 두 개의 웹 사이트를 제공합니다. Active Directory 그룹 정책이 불가능합니다. 내가 이것을 명확히하지 않아서 죄송합니다.


ms의이 기사를 살펴보면 GP 수정 사항을 확인할 수 있습니다. support.microsoft.com/kb/256345

3
보고 싶었어 미안해 바빠 당신은 이와 같은 것을 찾고있었습니다 : serverfault.com/questions/15147/…
Evan Anderson

나는 이것이 매우 오래된 질문이라는 것을 알고 있지만 Windows 서비스 관리자에서 '복구'옵션 사용을 고려 했습니까?
Tim Long

답변:


51

도메인에 가입하지 않은 경우 GUI를 기반으로하는 방법이없는 것 같습니다. 적어도 어디에서나 찾을 수있는 도메인은 아닙니다. 따라서 조금 더 파고 들었고 우리의 sitaution.

지식 기반 기사에서 문자열 표현의 의미를 이해하지 못했지만 약간의 파기를 수행하면 SDDL 구문이라는 것을 알게되었습니다. 더 자세히 파기면 서비스에 대한 보안 설명자를 얻는 방법과 각 비트의 의미를 설명하는 Alun Jones 의이 기사로 연결되었습니다 . MS KB914392 에 자세한 내용이 있습니다.

서비스의 기존 보안 설명자를 추가하려면을 사용 sc sdshow "Service Name"하여 기존 설명자를 가져옵니다. 이것이 우리의 경우와 마찬가지로 평범한 오래된 .NET Windows 서비스 인 경우 보안 설명자는 다음과 같습니다.

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)S:(AU;FA
;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

RP서비스를 시작하고, 서비스 WP를 중지하고, 서비스 DT를 일시 중지 / 계속하고, LO서비스의 현재 상태를 쿼리 할 수있는 권한을 부여해야했습니다 . 서비스 계정을 Power Users 그룹에 추가하면됩니다. 그러나 유지 관리 서비스가 실행되는 계정에 개별 액세스 권한 만 부여하고 싶습니다.

runas서비스 계정에서 명령 프롬프트를 여는 데 사용 하여 서비스 계정 whoami /all의 SID를 제공 한 다음 아래에 추가 SDDL을 구성했습니다.

(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)

그런 다음 위의 SDDL 문자열 의 D : 섹션에 추가됩니다 .

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;RPWP
DTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSWRPWPDTLOC
RSDRCWDWO;;;WD)

그런 다음 다음 sc sdset명령을 사용하여 서비스에 적용됩니다 .

sc sdset "Service Name" D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;
CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU
)(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSW
RPWPDTLOCRSDRCWDWO;;;WD)

모든 계획에 따라 진행되면 서비스를 시작, 중지, 일시 중지하고 위의 SID에서 정의한 사용자가 상태를 쿼리 할 수 ​​있습니다.


10
동일한 작업을보다 쉽게 ​​수행하려면 SetACL.exe 사용을 살펴 보십시오 . 다음은 서비스에 대한 사용 권한을 설정하는 데 사용하는 방법의 예입니다SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
메이슨 G. Zhwiti

2
GUI에 Process Hacker ( processhacker.sourceforge.net )를 사용하여 모든 서비스를 구성 할 수 있습니다. 숨겨진 서비스가 포함되어 있으며 이진 경로 및 권한과 같은 더 많은 서비스 설정을 구성 할 수 있습니다.
ygoe

1
CoreTech GUI가 나를 위해 일했습니다. GUI가 이미 Windows에 존재하지 않는다고 믿기 어렵습니다. 어떻게 대답을 읽는 것이 어려울 수 있습니까? Microsoft를 대신하여 큰 실패.
MikeKulls

내가 추가 할 CCLCSW(RPWPDTLO에 추가)를 SDDL 권한에 내가 가져 오기 서비스 (먼저 scmanager 서비스 제어 관리자 서비스에 대한 SDDL을 수정 필요에 액세스 서비스를 나열 할 수 있도록) 실행하면 또한 서비스가 등록되어있는 것을 확인하실 수 있습니다 . 또한 SW특정 서비스를 다시 시작할 수 있어야했습니다.
Baodad

34

방금 같은 문제가있었습니다. 리소스 키트에서 SubInACL.exe
사용할 수 있습니다 . 여기에서 독립형 유틸리티를 다운로드하십시오. http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23510

msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTo.msi를 설치하지 않으려는 경우 파일을 추출하는 데 사용

  1. 관리자 권한으로 명령 프롬프트를 엽니 다
  2. .exe를 배치 한 디렉토리로 이동하십시오.
  3. 운영 subinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=TOP

T = 서비스 시작
O = 서비스 중지
P = 서비스 일시 중지 / 계속

전체 참조 : Windows 2000
또는 유형 에서 서비스를 관리 할 수있는 권한을 사용자에게 부여하는 방법subinacl /help

참고 :subinacl /service SERVICE_NAME /perm 문제가 생길 수 있으므로 시도하지 마십시오 (학습자 : P). 이름은 모든 사용자 (관리자조차 포함)에 대한 모든 권한을 삭제하므로 오해의 소지가 있습니다 (perm! = permission).


SO 및 SF 계정을 병합 할 수 없습니다. 죄송합니다. Pat.
Chopper3

@ Chopper3 답변 해 주셔서 감사합니다. 실제로 2 개의 SO 계정이 있습니다. 하나는이 SF 계정에 등록되고 연결되어 있습니다. 다른 하나는 등록 하기 전에 보유한 미등록 SO 계정입니다 ( 동일한 이메일 주소 사용). 두 사람이 합쳐져서 내가 한 게시물을 추적 할 수 있기를 바랐습니다. 여기에서 언급했듯이 게시물을 신고하려고했지만 SO (1 평판)에서 게시 할 수 없었습니다. 이것이 내가이 게시물을 신고 한 이유입니다. 또한 2 주 전에 team@stackoverflow.com으로 이메일을 보내려고했지만 아무런 응답도 얻지 못했습니다. 올바른 장소 / 사람으로 안내해 주시겠습니까?
patrx

1
MSDN에서이 절차에 대한 자세한 내용을 확인하십시오. support.microsoft.com/?kbid=288129
Marc Climent

4

컴퓨터 구성-정책-Windows 설정-보안 설정-시스템 서비스를 찾고 있습니다

여기에서 서비스 시작 유형을 정의 할 수있을뿐만 아니라 각 서비스에 대한 보안 ACL도 구성 할 수 있습니다. 기본적으로 인터페이스에는 GP 편집기를 실행중인 컴퓨터에 설치된 서비스 만 나열됩니다.

다른 컴퓨터에만 존재하는 서비스를 추가하려면

  • 다른 컴퓨터에서 서비스의 reg 키를 내 보냅니다.
  • gpedit 머신에서 가져 오기
  • 정책을 적용
  • 가져온 키를 삭제

gpedit.msc"서버 관리"창에 정책 노드가 표시되지 않기 때문에을 통해이 작업을 수행해야 합니다. 그렇다면 Server 2008 또는 Server 2003에서 위에서 제안한대로 "시스템 서비스"를 참조하는 보안 설정 노드 아래 항목을 볼 수 없습니다.
abitgone

아. 넵. 그룹 정책을 통해 이러한 변경을 계획하고 있다고 가정했습니다.
Ryan Bolger

1
실제로 이들은 구성원 서버가 아닙니다. 로컬 정책이나 다른 방법을 사용하여이를 타겟팅하는 방법이 있습니까?
abitgone

2

나는 patrx가 제안한 SubinAcl을 사용하여 MySQL을 일반 도메인 사용자 (관리자가 아닌)로 시작할 수 있었고 완벽하게 작동합니다! (그러나 명령은 -local 적어도-Admin으로 실행해야합니다)

명령은 다음과 같습니다.

[PATH_TO_SUBACL]\subinacl.exe /service MySQL /grant=[Domain User - Without domain]=TOP

도메인을 접두사로 사용하지 않고 사용자를 입력했습니다 ... 그렇지 않으면 구문 분석 명령에서 명령이 실패합니다!

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