किसी गैर-व्यवस्थापक उपयोगकर्ता खाते से Windows सेवा प्रारंभ / बंद करें


121

मेरे पास एक WindowsService नाम है, कहते हैं, BST। और मुझे एक गैर-प्रशासक उपयोगकर्ता, उपयोगकर्ता, यह विशेष सेवा शुरू / बंद करने की अनुमति देने की आवश्यकता है। मेरी सेवा विंडोज ओएस 2003 से विंडोज 7 से शुरू होकर, विंडोज ओएस की एक किस्म पर चलती है।

मैं यह कैसे कर सकता हूँ?

मैंने Googled और कमांड [sc sdset] का उपयोग करके अनुमति देने के बारे में कुछ सामान पाया, लेकिन मैं मापदंडों के बारे में बिल्कुल निश्चित नहीं हूं। मैं एक समूह के लिए अनुमतियाँ सेट नहीं करना चाहता, लेकिन केवल एक विशेष उपयोगकर्ता के लिए, इस मामले में उपयोगकर्ता।

जवाबों:


141

नीचे मैंने एक गैर-व्यवस्थापक उपयोगकर्ता खाते से विंडोज सेवा शुरू करने / बंद करने के बारे में सीखी गई सभी चीजों को एक साथ रखा है, अगर किसी को पता होना चाहिए।

मुख्य रूप से, विंडोज सर्विस शुरू करने / रोकने के दो तरीके हैं। 1. लॉगऑन विंडोज उपयोगकर्ता खाते के माध्यम से सीधे सेवा तक पहुंच। 2. नेटवर्क सेवा खाते का उपयोग करके IIS के माध्यम से सेवा तक पहुँचना।

सेवाओं को शुरू / बंद करने के लिए कमांड लाइन कमांड:

C:/> net start <SERVICE_NAME>
C:/> net stop <SERVICE_NAME>

सेवाओं को शुरू / बंद करने के लिए C # कोड:

ServiceController service = new ServiceController(SERVICE_NAME);

//Start the service
if (service.Status == ServiceControllerStatus.Stopped)
{
      service.Start();
      service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(10.0));
}

//Stop the service
if (service.Status == ServiceControllerStatus.Running)
{
      service.Stop();
      service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(10.0));
}

नोट 1: IIS के माध्यम से सेवा का उपयोग करते समय, एक विजुअल स्टूडियो C # ASP.NET वेब एप्लिकेशन बनाएं और कोड को वहां डालें। WebService को IIS रूट फ़ोल्डर (C: \ inetpub \ wwwroot \) पर नियत करें और आप जाने के लिए अच्छे हैं। इसे url http: /// से एक्सेस करें।

1. प्रत्यक्ष अभिगम विधि

यदि विंडोज उपयोगकर्ता खाता जिसमें से आप या तो कमांड देते हैं या कोड चलाते हैं एक गैर-व्यवस्थापक खाता है, तो आपको उस विशेष उपयोगकर्ता खाते में विशेषाधिकार सेट करने की आवश्यकता है ताकि उसमें विंडोज सेवाओं को शुरू करने और बंद करने की क्षमता हो। इसे आपको इसी तरह करना होगा। उस कंप्यूटर पर एक व्यवस्थापक खाते में लॉगिन करें जिसके पास गैर-व्यवस्थापक खाता है जिसमें से आप सेवा शुरू / बंद करना चाहते हैं। कमांड प्रॉम्प्ट खोलें और निम्न कमांड दें:

C:/>sc sdshow <SERVICE_NAME>

इसका आउटपुट कुछ इस तरह होगा:

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

यह उन सभी अनुमतियों को सूचीबद्ध करता है जिनके संबंध में प्रत्येक उपयोगकर्ता / समूह के पास इस कंप्यूटर है।

A description of one part of above command is as follows:

    D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)

It has the default owner, default group, and it has the Security descriptor control flags (A;;CCLCSWRPWPDTLOCRRC;;;SY):

ace_type - "A": ACCESS_ALLOWED_ACE_TYPE,
ace_flags - n/a,
rights - CCLCSWRPWPDTLOCRRC,  please refer to the Access Rights and Access Masks and Directory Services Access Rights
CC: ADS_RIGHT_DS_CREATE_CHILD - Create a child DS object.
LC: ADS_RIGHT_ACTRL_DS_LIST - Enumerate a DS object.
SW: ADS_RIGHT_DS_SELF - Access allowed only after validated rights checks supported by the object are performed. This flag can be used alone to perform all validated rights checks of the object or it can be combined with an identifier of a specific validated right to perform only that check.
RP: ADS_RIGHT_DS_READ_PROP - Read the properties of a DS object.
WP: ADS_RIGHT_DS_WRITE_PROP - Write properties for a DS object.
DT: ADS_RIGHT_DS_DELETE_TREE - Delete a tree of DS objects.
LO: ADS_RIGHT_DS_LIST_OBJECT - List a tree of DS objects.
CR: ADS_RIGHT_DS_CONTROL_ACCESS - Access allowed only after extended rights checks supported by the object are performed. This flag can be used alone to perform all extended rights checks on the object or it can be combined with an identifier of a specific extended right to perform only that check.
RC: READ_CONTROL - The right to read the information in the object's security descriptor, not including the information in the system access control list (SACL). (This is a Standard Access Right, please read more http://msdn.microsoft.com/en-us/library/aa379607(VS.85).aspx)
object_guid - n/a,
inherit_object_guid - n/a,
account_sid - "SY": Local system. The corresponding RID is SECURITY_LOCAL_SYSTEM_RID.

अब हमें जो कुछ भी करने की आवश्यकता है उसे उन समूहों या उपयोगकर्ताओं के लिए Windows सेवाएँ प्रारंभ / बंद करने के लिए उपयुक्त अनुमतियाँ सेट करने की आवश्यकता है। इस स्थिति में हमें वर्तमान गैर-व्यवस्थापक उपयोगकर्ता की सेवा शुरू करने / रोकने में सक्षम होना चाहिए ताकि हम उस उपयोगकर्ता के लिए अनुमतियाँ सेट करने जा रहे हैं। ऐसा करने के लिए, हमें उस विशेष Windows उपयोगकर्ता खाते की SID की आवश्यकता है। इसे प्राप्त करने के लिए, रजिस्ट्री खोलें (प्रारंभ> regedit) और निम्न रजिस्ट्री कुंजी का पता लगाएं।

LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

इसके तहत इस कंप्यूटर में प्रत्येक उपयोगकर्ता खाते के लिए एक अलग कुंजी है, और कुंजी नाम प्रत्येक खाते का SID है। SID आमतौर पर S-1-5-21-2103278432-2794320136-1883075150-1000 प्रारूप के होते हैं। प्रत्येक कुंजी पर क्लिक करें, और आप फलक पर दाईं ओर प्रत्येक कुंजी के लिए मूल्यों की एक सूची देखेंगे। "ProfileImagePath" का पता लगाएँ, और इसके मूल्य से आप उस उपयोगकर्ता नाम को पा सकते हैं जो SID से संबंधित है। उदाहरण के लिए, यदि खाते का उपयोगकर्ता नाम SACH है, तो "ProfileImagePath" का मान "C: \ Users \ Sach" जैसा होगा। तो उस उपयोगकर्ता खाते के SID पर ध्यान दें जिसे आप अनुमतियाँ सेट करना चाहते हैं।

नोट 2: यहां एक सरल सी # कोड नमूना है, जिसका उपयोग उक्त कुंजी की सूची प्राप्त करने के लिए किया जा सकता है और यह मान है।

//LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList RegistryKey
RegistryKey profileList = Registry.LocalMachine.OpenSubKey(keyName);

//Get a list of SID corresponding to each account on the computer
string[] sidList = profileList.GetSubKeyNames();

foreach (string sid in sidList)
{
    //Based on above names, get 'Registry Keys' corresponding to each SID
    RegistryKey profile = Registry.LocalMachine.OpenSubKey(Path.Combine(keyName, sid));

    //SID
    string strSID = sid;
    //UserName which is represented by above SID    
    string strUserName = (string)profile.GetValue("ProfileImagePath");
}

अब हमारे पास उस उपयोगकर्ता खाते का SID है जिसे हम अनुमतियों को सेट करना चाहते हैं, तो इसके लिए नीचे आते हैं। मान लें कि उपयोगकर्ता खाते का SID S-1-5-21-2103278432-2794320136-1883075150-1000 है । एक टेक्स्ट एडिटर को [sc sdshow] कमांड के आउटपुट को कॉपी करें। यह इस तरह दिखेगा:

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

अब, कॉपी (ए ;; CCLCSWRPWPDTLOCRRC ;;; एसवाई) ऊपर पाठ का हिस्सा है, और यह पेस्ट बस से पहले एस: (एयू ... पाठ का हिस्सा तो फिर इस तरह देखने के लिए उस भाग को बदलें:। (ए ;; RPWPCR ;;; एस 1-5-21-2103278432-2794320136-1883075150-1000)

फिर सामने sdset जोड़ें , और उद्धरण के साथ उपरोक्त भाग संलग्न करें। आपकी अंतिम कमांड को कुछ इस तरह दिखना चाहिए:

sc sdset <SERVICE_NAME> "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;S-1-5-21-2103278432-2794320136-1883075150-1000)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"

अब इसे अपने कमांड प्रॉम्प्ट में निष्पादित करें, और इसे आउटपुट को निम्नानुसार देना चाहिए यदि सफल हो:

[SC] SetServiceObjectSecurity SUCCESS

अब हम जाने के लिए अच्छा कर रहे हैं! आपके गैर-व्यवस्थापक उपयोगकर्ता खाते को अपनी सेवा शुरू / बंद करने की अनुमति दी गई है! उपयोगकर्ता खाते में लॉगिन करें और सेवा शुरू / बंद करें और यह आपको ऐसा करने देना चाहिए।

2. IIS विधि के माध्यम से प्रवेश

इस मामले में, हमें लॉगऑन विंडोज उपयोगकर्ता खाते के बजाय IIS उपयोगकर्ता "नेटवर्क सेवा" को अनुमति देने की आवश्यकता है। प्रक्रिया समान है, केवल कमांड के मापदंडों को बदल दिया जाएगा। चूंकि हमने "नेटवर्क सेवाओं" की अनुमति निर्धारित की है, इसलिए SID को स्ट्रिंग "NS" के साथ अंतिम sdset कमांड में बदलें जो हमने पहले इस्तेमाल किया था। अंतिम आदेश कुछ इस तरह दिखना चाहिए:

sc sdset <SERVICE_NAME> "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;NS)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"

एक व्यवस्थापक उपयोगकर्ता खाते, और वॉइला से कमांड प्रॉम्प्ट में इसे निष्पादित करें! आपके पास किसी भी उपयोगकर्ता खाते से सेवा शुरू / बंद करने की अनुमति है (इसके बावजूद कि वह WebMethod का उपयोग करके व्यवस्थापक खाता है या नहीं)। ऐसा करने का तरीका जानने के लिए नोट 1 का संदर्भ लें।


11
नोट: ** आप अपने स्वयं के मशीन में निष्पादित shshow कमांड के परिणामों की प्रतिलिपि बनाएँ और फिर मेरे द्वारा बताए अनुसार संपादित करें। ** न केवल यहां से कोड कॉपी करें और अपने कंप्यूटर पर निष्पादित करें।
सच्च डेस

5
मैंने इस मैनुअल दृष्टिकोण की कोशिश की और इसने शानदार काम किया। लेकिन, यदि आप मेरे जैसे हैं, और आपको 20+ कंप्यूटर पर ऐसा करने की आवश्यकता है, तो आप ऐसा करने के लिए एक प्रोग्राम या स्क्रिप्ट चाहते हैं। आप Windows API कॉल QueryServiceObjectSecurity और SetServiceObjectSecurity का उपयोग कर सकते हैं । MSDN के पास "अतिथि" खाते में इसे लागू करने के लिए
आकर्षित Chapin

1
बड़ा कुदोस! एक जादू की तरह काम किया।
होर्स्ट गुटमैन

2
इस उत्तर में गए प्रयास और देखभाल से दूर नहीं होने के लिए, मुझे लगता है कि कुछ अन्य उत्तर सरल और अधिक प्रत्यक्ष समाधान प्रदान करते हैं। जब तक मुझे इसका कुछ फायदा न हो जाए?
स्पाइकएक्सएक्सएफ

1
यदि आप यह प्रोग्राम कर रहे हैं और sc sdshowआप आउटपुट को विभाजित करना चाहते हैं तो इस रेगेक्स का उपयोग घटकों को विभाजित करने के लिए कर सकते हैं: (?:\D:)?\(.+?\)और फिर नए भाग को SID के साथ दूसरे-से-अंतिम के रूप में सम्मिलित करें।
फोनुका

115

मैं इसके लिए SubInACL उपयोगिता का उपयोग करता हूं । उदाहरण के लिए, यदि मुझे प्रयोक्ता देना चाहता था काम कंप्यूटर पर VMX001 शुरू करने के लिए और वर्ल्ड वाइड वेब प्रकाशन सेवा रोक (भी W3SVC रूप में जानते हैं), मैं एक प्रशासक के रूप में निम्न आदेश जारी करेगी क्षमता:

subinacl.exe /service w3svc /grant=VMX001\job=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

इसलिए, पीटीओ को निर्दिष्ट करके, मैं नौकरी उपयोगकर्ता को पॉज़ / जारी, प्रारंभ और w3svc सेवा को रोकने का हकदार हूं ।


18
यह सबसे अच्छा जवाब है। यह रजिस्ट्री में चारों ओर हैक किए बिना, SID का अनुवाद, या अस्पष्ट ACL प्रारूपण के आधार पर नौकरी के लिए सही उपकरण का उपयोग करता है। काम को जल्दी और आसानी से करने के लिए पर्याप्त विस्तार के साथ इसे किसी भी उचित परिदृश्य में लाने के लिए आवश्यक सभी प्रदान करता है।
पियर्स.जॉसन

2
क्या मुझे इसका उपयोग करने पर पुनः आरंभ करने या लॉगआउट / लॉगिन करने की आवश्यकता है?
डेविड कहते हैं मोनिका

2
@DavidGrinberg मुझे कभी भी याद नहीं है कि प्रभावित खाते को लॉग ऑफ करने की आवश्यकता है और फिर यहाँ वर्णित के रूप में केवल सबइंक्ल का उपयोग करते समय पुनः आरंभ करने की आवश्यकता है।
तीरंदाजी

1
पुष्टि कर सकते हैं कि यह sc \\server start|stop|query servicenameरिमोट सर्वर से 2012 सर्वर पर काम करता है। कोई रीस्टार्ट \ logoff की जरूरत नहीं है
Stig Eide

इसने स्थानीय स्तर पर एक सेवा शुरू करने का काम किया। हालांकि इसके साथ दुर्घटनाग्रस्त हो गया CouldNotAccessDependentServicesदूरस्थ powershell का उपयोग कर: Cannot access dependent services of '...'E : Enumerate Dependent Servicesएसीएल के अधिकारों को जोड़कर तय किया।
विलेम

42
  1. एक व्यवस्थापक के रूप में लॉगिन करें।
  2. subinacl.exeMicrosoft से डाउनलोड करें :
    http://www.microsoft.com/en-us/download/details.aspx?id=23510
  3. BST सेवाओं का प्रबंधन करने के लिए नियमित उपयोगकर्ता खाते को अनुमति प्रदान करता है।
    ( subinacl.exeमें है C:\Program Files (x86)\Windows Resource Kits\Tools\)
  4. cd C:\Program Files (x86)\Windows Resource Kits\Tools\
    subinacl /SERVICE \\MachineName\bst /GRANT=domainname.com\username=F या
    subinacl /SERVICE \\MachineName\bst /GRANT=username=F
  5. लॉगआउट करें और उपयोगकर्ता के रूप में वापस लॉग इन करें। उन्हें अब BST सेवा लॉन्च करने में सक्षम होना चाहिए।

1
मैन्युअल रूप से कॉन्फ़िगरेशन में हेरफेर करने की तुलना में बहुत आसान और बेहतर लगता है।
gsk

1
क्या लॉगआउट की आवश्यकता है?
डेविड कहते हैं मोनिका

ओह! विफल ... मुझे "त्रुटि OpenSCManager मिला: RPC सर्वर अनुपलब्ध है। चेतावनी: / अनुदान = माइक = f: कोई पिछली वस्तु नहीं खुली"। मैंने जिस सेवा की कोशिश की वह MySQL थी। रिबूट: पहुंच से इनकार किया जाता है, हमेशा की तरह।
माइक कृंतक

15

एक मुफ्त जीयूआई उपकरण सेवासुरक्षा प्रबंधक है

जो आपको विंडोज सर्विस परमिशन को एडिट करने की सुविधा देता है। मैंने एक गैर-प्रशासक उपयोगकर्ता को सेवा शुरू करने और रोकने के अधिकार देने के लिए इसका सफलतापूर्वक उपयोग किया है।

मैंने इस टूल के बारे में जानने से पहले "sc sdset" का उपयोग किया था।

ServiceSecurityEditor को लगता है धोखा, यह आसान है :)


1
मैंने इस सिफारिश के आधार पर ServiceSecurityEditor की कोशिश की और यह उत्कृष्ट है।
गुरु जोश

11

इन उपकरणों में से किसी एक का उपयोग करके सेवा को प्रबंधन की अनुमति देना काफी आसान है:

  • संगठन नीति
  • सुरक्षा खाका
  • subinacl.exe कमांड-लाइन टूल।

यहां विंडोज सर्वर 2008 / विंडोज 7 के निर्देशों के साथ एमएसकेबी लेख है , लेकिन निर्देश 2000 और 2003 के लिए समान हैं।


1

subinacl.exe कमांड-लाइन टूल संभवतः इस पोस्ट में कुछ भी उपयोग करने के लिए एकमात्र व्यवहार्य और बहुत आसान है। आप गैर-प्रणाली सेवाओं के साथ एक GPO का उपयोग नहीं कर सकते हैं और दूसरा विकल्प रास्ता रास्ता भी जटिल है।


-2

Windows सेवा स्थानीय सिस्टम खाते का उपयोग करके चलती है। यह स्वचालित रूप से उपयोगकर्ता के सिस्टम में लॉग होने के रूप में शुरू हो सकता है या इसे मैन्युअल रूप से शुरू किया जा सकता है। हालांकि, एक विंडोज़ सेवा का कहना है कि BST को मशीन पर किसी विशेष उपयोगकर्ता खाते का उपयोग करके चलाया जा सकता है। यह किया जा सकता है। निम्नानुसार: services.msc शुरू करें और अपनी विंडोज़ सेवा के गुणों पर जाएं, BST। वहां से आप आवश्यक उपयोगकर्ता के लॉगिन पैरामीटर दे सकते हैं। फिर उस उपयोगकर्ता खाते से चलता है और कोई अन्य उपयोगकर्ता उस सेवा को नहीं चला सकता है।


1
प्रतिक्रिया के लिए धन्यवाद जैक। हालांकि यह वह नहीं है जो मैं करना चाहता हूं। मुझे अपनी सेवा BST चलाने की आवश्यकता है जैसा कि वह अब करता है। मुझे केवल किसी भी उपयोगकर्ता की आवश्यकता है जो इसे रोकने / शुरू करने में सक्षम होने के लिए व्यवस्थापक नहीं है।
सच डेस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.