windows services - गैर-प्रशासक उपयोगकर्ता खाते से Windows सेवा प्रारंभ/रोकें




windows-services user-accounts (5)

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

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

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


  1. व्यवस्थापक के रूप में लॉगिन करें।
  2. माइक्रोसॉफ्ट से subinacl.exe डाउनलोड करें:
    SubInACL
  3. बीएसटी सेवाओं का प्रबंधन करने के लिए नियमित उपयोगकर्ता खाते में अनुदान अनुमतियां।
    ( 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. लॉगआउट करें और उपयोगकर्ता के रूप में वापस लॉग इन करें। अब उन्हें बीएसटी सेवा लॉन्च करने में सक्षम होना चाहिए।

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


एक मुफ्त जीयूआई उपकरण ServiceSecurityEditor

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

इससे पहले कि मैं इस उपकरण के बारे में जानता था, मैंने "एससी एसडीसेट" का इस्तेमाल किया था।

ServiceSecurityEditor धोखाधड़ी की तरह लगता है, यह इतना आसान है :)


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

subinacl.exe /service w3svc /grant=VMX001\job=PTO

आपके द्वारा प्रदान की जाने वाली अनुमतियों को निम्नानुसार परिभाषित किया गया है ( here से ली गई सूची):

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 सेवा को रोकने के लिए पात्र हूं।


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

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

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

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

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

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: आईआईएस के माध्यम से सेवा तक पहुंचने पर, विजुअल स्टूडियो सी # एएसपी.नेट वेब एप्लिकेशन बनाएं और कोड को वहां रखें। आईआईएस रूट फ़ोल्डर (सी: \ inetpub \ wwwroot \) में वेब सेवा को तैनात करें और आप जाने के लिए अच्छे हैं। यूआरएल http: /// द्वारा इसे एक्सेस करें।

1. प्रत्यक्ष पहुंच विधि

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

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.

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

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

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

नोट 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");
}

अब जब हमारे पास उपयोगकर्ता खाते का एसआईडी है, तो हम अनुमतियां सेट करना चाहते हैं, चलिए इसे नीचे ले जाएं। आइए मान लें कि उपयोगकर्ता खाते का एसआईडी एस -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)

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

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

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. आईआईएस विधि के माध्यम से प्रवेश करें

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

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)"

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