इस काफी hackey वैकल्पिक हल मैं का उपयोग कर समाप्त हो गया है। चूंकि मैं एक CruiseControl.NET सेवा चला रहा हूं, इसलिए मैं अपने उपयोगकर्ता 'सीसीनेट' को कॉल करूंगा। उसके पास प्रशासन अधिकार नहीं हैं।
2) एक नया स्थानीय उपयोगकर्ता खाते, और प्रशासक समूह (मैं उसे इस उदाहरण के लिए 'iis_helper') फोन करता हूँ करने के लिए आवंटित। उसे कुछ पासवर्ड दें, और इसे समाप्त होने के लिए सेट करें।
3) iis_helper के बदले पहुँच अनुमतियाँ नहीं स्थानीय लॉगिन या दूरस्थ डेस्कटॉप लॉगिन, और कुछ और आप इस खाते को लॉक करने के लिए क्या करना चाहते हो सकता है की अनुमति के लिए।
4) इस उदाहरण में अपने गैर-व्यवस्थापक उपयोगकर्ता, 'सीसीनेट' के रूप में लॉग इन करें (या तो स्थानीय रूप से या दूरस्थ डेस्कटॉप के माध्यम से)।
5) एक कमांड टर्मिनल खोलें, और निष्पादित करने के लिए जो कुछ भी यह परिवर्धित चलाया जा करने की जरूरत है 'runas' आदेश का उपयोग करें।/Savecred विकल्प का प्रयोग करें। अपना नया प्रशासनिक उपयोगकर्ता निर्दिष्ट करें।
runas /savecred /user:MYMACHINE\iis_helper "C:\Windows\System32\inetsrv\appcmd.exe"
पहली बार यह आपको 'iis_helper के पासवर्ड के लिए संकेत देगा। उसके बाद, इसे/savecred विकल्प के लिए धन्यवाद संग्रहीत किया जाएगा (यही कारण है कि हम इसे एक बार वास्तविक कमांड प्रॉम्प्ट से चला रहे हैं, इसलिए हम एक बार पासवर्ड दर्ज कर सकते हैं)।
6) मान लीजिए कि आदेश ठीक से निष्पादित है, अब आप लॉग आउट कर सकते हैं। फिर मैंने स्थानीय व्यवस्थापक के रूप में वापस लॉग इन किया और स्थानीय इंटरैक्टिव लॉगिन, और दूरस्थ डेस्कटॉप के लिए 'सीसीनेट' उपयोगकर्ता बंद कर दिया। खाता केवल एक सेवा चलाने के लिए प्रयोग किया जाता है, लेकिन कोई वास्तविक लॉगिन नहीं होता है। यह एक अनिवार्य कदम नहीं है।
7) अपने उपयोगकर्ता खाते ('सीसीनेट') के रूप में चलाने के लिए अपनी सेवा सेट करें।
8) कॉन्फ़िगर करें कि कौन सी सेवा चल रही है (क्रूज़ कंट्रोल।
की जगह: मेरे मामले में नेट) पहले की तरह ही बजाय 'appcmd.exe' सीधे 'runas' कमांड निष्पादित करने के लिए,
साथ
"C:\Windows\System32\inetsrv\appcmd.exe" start site "My Super Site"
:
runas /savecred /user:MYMACHINE\iis_helper "\"C:\Windows\System32\inetsrv\appcmd.exe\" start site \"My Super Site\""
बात ध्यान दें कि यह आदेश उद्धरण के एक सेट में होना चाहिए, जिसमें सभी आंतरिक उद्धरण बच गए हैं (स्लैश-कोट)।
9) टेस्ट, इसे एक दिन कॉल करें, स्थानीय पब पर क्लिक करें।
संपादित: मैं जाहिरा तौर पर गलत क्रम में # 9 किया था और कुछ भी कई परीक्षण से पहले ...
इस विधि भी पूरी तरह से काम नहीं करता था। यह प्रशासनिक खाता के रूप में चलाने का प्रयास करता है, हालांकि यह अभी भी प्रशासनिक उपयोगकर्ता के तहत एक गैर-बढ़ी हुई प्रक्रिया के रूप में चलता है, फिर भी कोई व्यवस्थापक अनुमति नहीं है। मैंने शुरुआत में विफलता को पकड़ नहीं लिया क्योंकि 'रनस' कमांड एक अलग सेमीडी विंडो बनाता है, फिर तुरंत बंद हो जाता है, इसलिए मुझे विफलता आउटपुट नहीं दिखाई दे रहा था।
यह एकमात्र वास्तविक संभावना की तरह लग रहा है जो एक विंडोज सेवा लिख रहा है जो व्यवस्थापक के रूप में चलाएगा, और इसका एकमात्र उद्देश्य appcmd.exe को चलाने के लिए है, फिर किसी भी तरह से आईआईएस को शुरू/बंद करने के लिए उस सेवा को कॉल करें।
क्या यह अच्छा नहीं है कि यूएसी चीजों को सुरक्षित करने के लिए कैसे है, लेकिन वास्तविकता में बस अधिक सर्वरों को असुरक्षित करता है, क्योंकि जो भी आप करना चाहते हैं, आपको व्यवस्थापक के रूप में करना होगा, इसलिए हमेशा सब कुछ हमेशा व्यवस्थापक के रूप में चलाने के लिए आसान है और भूलना आसान है यह?
मैं CruiseControl.NET के साथ एक ही मुद्दा है। मेरे पास एक प्रोजेक्ट है जिसे मुझे आईआईएस को रोकना/शुरू करना होगा, लेकिन पूरे क्रूज़ कंट्रोल सेवा को एक ऊंचे खाते के रूप में नहीं चलाएं। – CodingWithSpike