डिफ़ॉल्ट रूप से, सामान्य (गैर-एडमिन) यूज़र्स Windows सेवाओं को प्रबंधित नहीं कर सकते। इसका मतलब है कि यूज़र्स Windows सेवाओं को रोक, शुरू, पुनरारंभ नहीं कर सकते, या उनकी सेटिंग्स/अनुमतियां नहीं बदल सकते। कुछ मामलों में, किसी यूज़र के लिए कुछ सेवाओं को पुनरारंभ या प्रबंधित करने की अनुमति होना आवश्यक है। इस लेख में हम Windows सेवाओं के लिए अनुमतियों को प्रबंधित करने के कई तरीकों को देखेंगे। विशेष रूप से, हम आपको दिखाएंगे कि उचित अनुमतियां देकर किसी गैर-एडमिन यूज़र को किसी विशिष्ट Windows सेवा को शुरू, रोक और पुनरारंभ करने की अनुमति कैसे दें।
मान लीजिए, आपको डोमेन अकाउंट contoso\tuser को Print Spooler सेवा (सेवा नाम – spooler) को पुनरारंभ करने की अनुमति देनी होगी। जब गैर-एडमिन सेवा को पुनरारंभ करने का प्रयास करता है, तो एक एरर दिखाई देती है:
System error 5 has occurred. Access is denied.

Windows में सेवाओं की अनुमतियों को प्रबंधित करने के लिए कोई सरल और सुविधाजनक अंतर्निहित टूल नहीं है। हम किसी यूज़र को सेवा प्रबंधित करने की अनुमति देने के कुछ तरीकों पर विचार करेंगे:
SC.exe (Service Controller) टूल का उपयोग करके Windows सेवा अनुमतियां सेट करना
सिस्टम सेवा अनुमतियों को प्रबंधित करने की एक मानक अंतर्निहित 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)
इन सभी प्रतीकों का क्या अर्थ है?
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
अंतिम 2 वर्ण वे ऑब्जेक्ट्स (यूज़र, ग्रुप या SID) हैं जिन्हें अनुमतियां दी गई हैं। पूर्वनिर्धारित ग्रुप्स की एक सूची है।
AU Authenticated Users AO Account operators RU Alias to allow previous Windows 2000 AN Anonymous logon AU Authenticated users 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
आप Get-ADGroup cmdlet का उपयोग करके AD सुरक्षा ग्रुप का SID प्राप्त कर सकते हैं:
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)"
SubInACL का उपयोग करके किसी यूज़र को सेवा शुरू/बंद/पुनरारंभ करने की अनुमति देना
Sysinternals (मार्क रसिनोविच द्वारा) से कमांड लाइन टूल SubInACL का उपयोग करके सेवा अनुमतियों को प्रबंधित करना आसान है। इस टूल का सिंटैक्स बहुत आसान और सुविधाजनक है। यहां बताया गया है कि आप SubInACL का उपयोग करके किसी सेवा के लिए पुनरारंभ अनुमतियां कैसे दे सकते हैं:
- इस वेबपेज (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 spooler
net start spooler
या
sc stop spooler && sc start spooler

यदि आपने सब कुछ सही किया, तो सेवा पुनरारंभ होनी चाहिए।
आवंटित सेवा अनुमतियों को रद्द करने के लिए, subinacl.exe टूल के /revoke विकल्प का उपयोग करें। उदाहरण के लिए:
subinacl.exe /service Spooler /revoke=contoso\tuser
Process Explorer का उपयोग करके Windows सेवा अनुमति कैसे बदलें?
आप एक और Sysinternals उपयोगिता – Process Explorer का उपयोग करके Windows सेवा अनुमतियों को बदल सकते हैं। Process Explorer को एडमिनिस्ट्रेटर के रूप में चलाएं और जिस सेवा की आवश्यकता है उसकी प्रक्रिया ढूंढें। हमारे उदाहरण में, यह spoolsv.exe है (स्पूलर एक्जीक्यूटेबल – C:\Windows\System32\spoolsv.exe)। प्रक्रिया गुण खोलें और Services टैब पर क्लिक करें।

Permissions बटन पर क्लिक करें और खुलने वाली विंडो में यूज़र या ग्रुप जोड़ें। उसके बाद उन अनुमतियों का चयन करें जिन्हें आप असाइन करना चाहते हैं (Full Control/Write/Read)।

PowerShell का उपयोग करके Windows सेवा अनुमतियां सेट करना
TechNet गैलरी में विभिन्न Windows ऑब्जेक्ट्स के लिए अनुमतियों को प्रबंधित करने के लिए एक अलग अनौपचारिक PowerShell मॉड्यूल है – PowerShellAccessControl Module (आप इसे यहां डाउनलोड कर सकते हैं)। यह मॉड्यूल आपको सेवा अनुमतियों को प्रबंधित करने की भी अनुमति देता है। इस मॉड्यूल को इंस्टॉल करें और इसे अपने PS सत्र में इम्पोर्ट करें:
Import-Module PowerShellAccessControl
आप PowerShell से किसी विशिष्ट Windows सेवा के लिए प्रभावी अनुमतियों को इस तरह प्राप्त कर सकते हैं:
Get-Service spooler | Get-EffectiveAccess -Principal corp\tuser
गैर-एडमिन यूज़र को स्पूलर सेवा शुरू और बंद करने की अनुमति देने के लिए, कमांड चलाएं:
Get-Service spooler | Add-AccessControlEntry -ServiceAccessRights Start,Stop -Principal corp\tuser
सेवा अनुमतियों को प्रबंधित करने के लिए Security Templates का उपयोग करना
सेवा अनुमतियों को प्रबंधित करने का एक विजुअल (लेकिन अधिक क्रियाओं की आवश्यकता वाला) ग्राफिकल तरीका Security Templates का उपयोग करना है। mmc.exe कंसोल खोलें और Security Templates स्नैप-इन जोड़ें।

एक नया सिक्योरिटी टेम्पलेट बनाएं (New Template)।

नए टेम्पलेट के लिए नाम निर्दिष्ट करें और System Services अनुभाग पर जाएं। सेवाओं की सूची में Print Spooler सेवा चुनें और उसके गुण खोलें।
स्टार्टअप मोड चुनें (Automatic) और Edit Security पर क्लिक करें।

Add बटन का उपयोग करके, अनुमति देने के लिए यूज़र अकाउंट या ग्रुप जोड़ें। हमारे मामले में, Start, stop and pause अनुमति पर्याप्त है।

इस टेम्पलेट को सेव करें।
नोट. Security Template की सामग्री 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) बनाना है और अपनी Security Template को फ़ाइल Spooler User Rights.inf से इम्पोर्ट करना है।

Configure Computer Now विकल्प को संदर्भ मेनू से चुनकर इस टेम्पलेट को लागू करें।

अब जांचें कि यूज़र गैर-एडमिन अकाउंट के तहत Print Spooler सेवा को प्रबंधित कर सकता है।
GPO का उपयोग करके यूज़र्स को सेवा प्रबंधित करने के अधिकार कैसे दें?
यदि आपको एकाधिक सर्वर या डोमेन कंप्यूटर पर यूज़र्स को सेवा शुरू/बंद करने की अनुमति देनी है, तो Group Policy (GPO) सुविधाओं का उपयोग करना आसान है:
- एक नया GPO बनाएं या मौजूदा को संपादित करें, इसे कंप्यूटर ऑब्जेक्ट वाले आवश्यक Active Directory कंटेनर (OU) से लिंक करें। पॉलिसी अनुभाग Computer configuration -> Windows Settings -> Security Settings -> System Services पर जाएं;

- Spooler सेवा ढूंढें और ऊपर वर्णित विधि की तरह यूज़र्स को अनुमति दें। परिवर्तन सहेजें;नोट. पहले हमने दिखाया था कि उसी GPO का उपयोग करके आप किसी भी Windows सेवा को सभी यूज़र्स से छिपा सकते हैं।
- क्लाइंट कंप्यूटर पर GPO लागू होने तक प्रतीक्षा करें और सुनिश्चित करें कि नई सेवा अनुमतियां असाइन की गई हैं।
Windows सेवा सुरक्षा अनुमतियां कहां संग्रहीत होती हैं?
उन सभी सेवाओं के लिए सुरक्षा सेटिंग्स जिनके लिए आपने डिफ़ॉल्ट अनुमतियों को बदला है, उनके अपने रजिस्ट्री कुंजी HKLM\System\CurrentControlSet\Services\<servicename>\Security में Security पैरामीटर में REG_BINARY प्रकार के रूप में संग्रहीत होती हैं।
इसका मतलब है कि अन्य कंप्यूटर्स पर सेवा अनुमतियों को सेट करने का एक तरीका इस रजिस्ट्री पैरामीटर को निर्यात/आयात करना है (GPO के माध्यम से भी)।
तो, हमने Windows सेवा अनुमतियों को प्रबंधित करने के कई तरीकों को देखा, जो आपको सिस्टम सेवाओं के लिए गैर-एडमिन यूज़र को कोई भी अनुमति देने की अनुमति देते हैं। यदि यूज़र को स्थानीय लॉगऑन या RDP एक्सेस अनुमतियां दिए बिना सेवा तक रिमोट एक्सेस की आवश्यकता है, तो आपको यूज़र को Service Control Manager के माध्यम से दूरस्थ रूप से कनेक्ट करने और सेवाओं को गिनने की अनुमति देनी होगी।