기본적으로 일반(비관리자) 사용자는 Windows 서비스를 관리할 수 없습니다. 즉, 사용자는 Windows 서비스를 중지, 시작, 재시작하거나 설정 및 권한을 변경할 수 없습니다. 하지만 경우에 따라 특정 사용자에게 서비스를 재시작하거나 관리할 수 있는 권한이 필요할 수 있습니다. 이 글에서는 Windows 서비스 권한을 관리하는 여러 가지 방법을 살펴보고, 특히 비관리자 사용자가 특정 Windows 서비스를 시작·중지·재시작할 수 있도록 적절한 권한을 부여하는 방법을 소개합니다.
시나리오 예시
예를 들어 도메인 계정 contoso\tuser에게 Print Spooler 서비스(서비스 이름: spooler)를 재시작할 수 있는 권한을 부여해야 한다고 가정해 보겠습니다. 관리자 권한이 없는 사용자가 이 서비스를 재시작하려고 하면 다음과 같은 오류가 발생합니다.
System error 5 has occurred. Access is denied.
Windows에는 서비스 권한을 관리하기 위한 간편한 내장 도구가 따로 제공되지 않습니다. 따라서 사용자에게 서비스 관리 권한을 부여하는 몇 가지 방법을 알아보겠습니다.
1. SC.exe(Service Controller) 도구로 서비스 권한 설정하기
Windows에서 시스템 서비스 권한을 관리하는 표준적인 내장 방법은 sc.exe(Service Controller) 도구를 사용하는 것입니다. 다만 이 유틸리티의 가장 큰 문제점은 서비스 권한 형식의 복잡한 구문입니다. 바로 SDDL(Security Description Definition Language) 형식입니다.
다음 명령으로 Windows 서비스의 현재 권한을 SDDL 문자열 형태로 확인할 수 있습니다.
sc.exe sdshow Spooler
D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)
(A;;CCLCSWRPWPDTLOCRRC;;;SY)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
SDDL 문자열 해석하기
S: — System Access Control List (SACL)
D: — Discretionary ACL (DACL)
괄호 바로 뒤 첫 글자는 허용(A) 또는 거부(D)를 의미합니다.
그다음 문자 집합은 할당 가능한 권한을 나타냅니다.
CC — SERVICE_QUERY_CONFIG (서비스 설정 조회)
LC — SERVICE_QUERY_STATUS (서비스 상태 폴링)
SW — SERVICE_ENUMERATE_DEPENDENTS
LO — SERVICE_INTERROGATE
CR — SERVICE_USER_DEFINED_CONTROL
RC — READ_CONTROL
RP — SERVICE_START
WP — SERVICE_STOP
DT — SERVICE_PAUSE_CONTINUE
마지막 두 문자는 권한이 부여되는 대상(사용자, 그룹 또는 SID)입니다. 미리 정의된 그룹 목록은 다음과 같습니다.
AU Authenticated Users (인증된 사용자)
AO Account operators
RU Alias to allow previous Windows 2000
AN Anonymous logon
BA Built-in administrators (기본 관리자)
BG Built-in guests
BO Backup operators
BU Built-in users
CA Certificate server administrators
CG Creator group
CO Creator owner
DA Domain administrators (도메인 관리자)
DC Domain computers
DD Domain controllers
DG Domain guests
DU Domain users
EA Enterprise administrators
ED Enterprise domain controllers
WD Everyone
PA Group Policy administrators
IU Interactively logged-on user
LA Local administrator
LG Local guest
LS Local service account
SY Local system
NU Network logon user
NO Network configuration operators
NS Network service account
PO Printer operators
PS Personal self
PU Power users
RS RAS servers group
RD Terminal server users
RE Replicator
RC Restricted code
SA Schema administrators
SO Server operators
SU Service logon user
미리 정의된 그룹 대신 SID를 통해 특정 사용자나 그룹을 직접 지정할 수도 있습니다. 현재 사용자의 SID를 확인하려면 다음 명령을 사용하세요.
whoami /user
또는 Get-ADUser cmdlet으로 도메인 사용자의 SID를 찾을 수 있습니다.
Get-ADUser -Identity 'sadams' | select SID
AD 보안 그룹의 SID는 Get-ADGroup cmdlet으로 확인할 수 있습니다.
Get-ADGroup -Filter {Name -eq "ny-ithelpdesk"} | Select SID
특정 서비스에 SDDL 권한 문자열을 할당하려면 sc sdset 명령을 사용합니다. 예를 들어 다음과 같이 사용자에게 권한을 부여할 수 있습니다.
sc sdset Spooler "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;S-1-5-21-2133228432-2794320136-1823075350-1000)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
2. SubInACL로 사용자에게 서비스 시작/중지/재시작 권한 부여하기
Mark Russinovich가 만든 Sysinternals의 명령줄 도구인 SubInACL을 사용하면 서비스 권한을 훨씬 더 쉽게 관리할 수 있습니다. 이 도구의 구문은 훨씬 간단하고 편리합니다. SubInACL로 서비스 재시작 권한을 부여하는 방법은 다음과 같습니다.
- Microsoft 공식 페이지(https://www.microsoft.com/en-us/download/details.aspx?id=23510)에서 subinacl.msi를 다운로드하여 대상 시스템에 설치합니다.

- 관리자 권한 명령 프롬프트에서 도구가 있는 디렉터리로 이동합니다:
cd "C:\Program Files (x86)\Windows Resource Kits\Tools\" - 다음 명령을 실행합니다:
subinacl.exe /service Spooler /grant=contoso\tuser=PTO
참고. 이 경우 사용자에게 서비스 일시중지(계속), 시작 및 중지(재시작) 권한을 부여했습니다. 사용 가능한 전체 서비스 권한 목록은 다음과 같습니다.
F : Full Control (모든 권한)
R : Generic Read (읽기)
W : Generic Write (쓰기)
X : Generic eXecute (실행)
L : Read controL (제어 읽기)
Q : Query Service Configuration (서비스 구성 조회)
S : Query Service Status (서비스 상태 조회)
E : Enumerate Dependent Services (종속 서비스 열거)
C : Service Change Configuration (서비스 구성 변경)
T : Start Service (서비스 시작)
O : Stop Service (서비스 중지)
P : Pause/Continue Service (서비스 일시중지/계속)
I : Interrogate Service (서비스 상태 질의)
U : Service User-Defined Control Commands (사용자 정의 컨트롤 명령)
원격 컴퓨터에서 실행 중인 서비스에 권한을 부여하려면 다음 subinacl 명령 구문을 사용하세요.subinacl /SERVICE \\lon-prnt1\spooler /grant=contoso\tuser=F
- 이제 해당 사용자 계정으로 컴퓨터에 로그온한 후 다음 명령으로 서비스를 재시작해 보세요.
net stop spoolernet start spooler
또는sc stop spooler && sc start spooler
모든 과정을 올바르게 수행했다면 서비스가 정상적으로 재시작됩니다.
부여된 서비스 권한을 회수하려면 subinacl.exe의 /revoke 옵션을 사용합니다. 예:
subinacl.exe /service Spooler /revoke=contoso\tuser
3. Process Explorer로 Windows 서비스 권한 변경하기
Sysinternals의 또 다른 유틸리티인 Process Explorer를 사용해서도 Windows 서비스 권한을 변경할 수 있습니다. Process Explorer를 관리자 권한으로 실행하고 대상 서비스의 프로세스를 찾습니다. 이 예에서는 spoolsv.exe(spooler 실행 파일 – C:\Windows\System32\spoolsv.exe)입니다. 프로세스 속성을 연 후 Services 탭을 클릭합니다.

Permissions 버튼을 클릭하고 열리는 창에서 사용자 또는 그룹을 추가합니다. 그런 다음 부여하려는 권한(모든 권한/쓰기/읽기)을 선택합니다.

4. PowerShell로 Windows 서비스 권한 설정하기
TechNet 갤러리에는 다양한 Windows 개체의 권한을 관리하기 위한 별도의 비공식 PowerShell 모듈인 PowerShellAccessControl Module이 있습니다. 이 모듈을 사용하면 서비스 권한도 관리할 수 있습니다. 모듈을 설치하고 PS 세션으로 가져옵니다.
Import-Module PowerShellAccessControl
PowerShell에서 특정 Windows 서비스의 유효 권한은 다음과 같이 확인할 수 있습니다.
Get-Service spooler | Get-EffectiveAccess -Principal corp\tuser
비관리자 사용자가 spooler 서비스를 시작하고 중지할 수 있도록 허용하려면 다음 명령을 실행합니다.
Get-Service spooler | Add-AccessControlEntry -ServiceAccessRights Start,Stop -Principal corp\tuser
5. 보안 템플릿(Security Templates)으로 서비스 권한 관리하기
그래픽 방식(하지만 더 많은 단계가 필요함)으로 서비스 권한을 관리하려면 보안 템플릿을 사용할 수 있습니다. mmc.exe 콘솔을 열고 보안 템플릿(Security Templates) 스냅인을 추가합니다.

새 보안 템플릿을 생성합니다(New Template).

새 템플릿의 이름을 지정하고 System Services 섹션으로 이동합니다. 서비스 목록에서 Print Spooler를 선택하고 속성을 엽니다.
시작 모드(Automatic)를 선택하고 Edit Security를 클릭합니다.

Add 버튼을 사용하여 권한을 부여할 사용자 계정 또는 그룹을 추가합니다. 이 경우 시작, 중지 및 일시중지 권한이면 충분합니다.

템플릿을 저장합니다.
참고. 보안 템플릿의 내용은 C:\Users\%username%\Documents\Security\Templates 폴더에 INF 파일로 저장됩니다.
이 파일을 열어보면 앞서 언급한 SDDL 형식으로 권한 정보가 저장되어 있는 것을 확인할 수 있습니다. 이렇게 얻은 문자열은 sc.exe 명령의 인수로 사용할 수 있습니다.
[Unicode]
Unicode=yes
[Version]
signature="$CHICAGO$"
Revision=1
[Service General Setting]
"Spooler",2,"D:AR(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;RPWPDTRC;;;S-1-5-21-3243688314-1354026805-3292651841-1127)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"

이제 Security Configuration and Analysis 스냅인을 사용해 새 데이터베이스를 만들고(Open Database), 파일 Spooler User Rights.inf에서 보안 템플릿을 가져옵니다.

컨텍스트 메뉴에서 Configure Computer Now 옵션을 선택하여 템플릿을 적용합니다.

이후 비관리자 계정으로 Print Spooler 서비스를 관리할 수 있는지 확인하면 됩니다.
6. GPO를 사용해 여러 컴퓨터에 서비스 관리 권한 부여하기
여러 서버나 도메인 컴퓨터에서 서비스 시작/중지 권한을 사용자에게 부여해야 한다면 그룹 정책(GPO) 기능을 활용하는 것이 더 효율적입니다.
- 새 GPO를 만들거나 기존 GPO를 편집하여 컴퓨터 개체가 있는 Active Directory 컨테이너(OU)에 연결합니다. 정책 섹션 컴퓨터 구성 -> Windows 설정 -> 보안 설정 -> System Services로 이동합니다.

- Spooler 서비스를 찾아 앞서 설명한 방법처럼 사용자에게 권한을 부여합니다. 변경 사항을 저장합니다.참고. 동일한 GPO를 사용하여 모든 사용자로부터 Windows 서비스를 숨길 수도 있다는 점을 앞서 소개한 바 있습니다.
- GPO가 클라이언트 컴퓨터에 적용될 때까지 기다린 후 새로운 서비스 권한이 할당되었는지 확인합니다.
Windows 서비스 보안 권한은 어디에 저장되나?
기본 권한을 변경한 모든 서비스의 보안 설정은 각 서비스의 레지스트리 키 HKLM\System\CurrentControlSet\Services\<servicename>\Security에 REG_BINARY 유형의 Security 매개변수로 저장됩니다.
즉, 다른 컴퓨터에 서비스 권한을 설정하는 방법 중 하나는 이 레지스트리 매개변수를 내보내기/가져오기(GPO 포함)하는 것입니다.
지금까지 비관리자 사용자에게 시스템 서비스에 대한 다양한 권한을 부여할 수 있는 여러 가지 방법을 살펴보았습니다. 만약 사용자에게 로컬 로그온이나 RDP 액세스 권한을 부여하지 않은 상태에서 원격으로 서비스에 접근하게 하려면, Service Control Manager를 통해 원격으로 연결하고 서비스를 열거할 수 있도록 허용해야 합니다.