2012-12-28 10 views
12

msdn के अनुसार:प्रक्रिया.स्टार्ट() asp.net के तहत?

ASP.NET वेब पेज और सर्वर नियंत्रण कोड वेब सर्वर पर ASP.NET वर्कर प्रक्रिया के संदर्भ में निष्पादित करता है। यदि आप ASP.NET वेब पेज या सर्वर नियंत्रण में प्रारंभ विधि का उपयोग करते हैं, तो नई प्रक्रिया प्रतिबंधित अनुमतियों के साथ वेब सर्वर पर निष्पादित करती है। प्रक्रिया क्लाइंट ब्राउज़र के समान संदर्भ में शुरू नहीं होती है, और उपयोगकर्ता डेस्कटॉप तक पहुंच नहीं है।

कौन साखाता ठीक "प्रतिबंधित अनुमतियाँ" है?

उदाहरण:

  • मैं के रूप में RoyiN
  • विंडोज़ प्रमाणीकरण सक्षम
  • प्रतिरूपण BobKके रूप में सक्षम web.config (सभी पर साइट खत्म हो गया है है Win7 के लिए लॉग इन कर रहा हूँ)
  • W3WP उपयोगकर्ता UserA है (नेटवर्क नहीं और न ही अनुप्रयोगपूल इडेंटिटी)।

सी # में मुझे क्या करना Process.start("....cmd.exe...") (रूपStartinfo पहचान के साथ: "Martin", "Password", "Domain")

  • कौन कुशल account जो अंत में cmd.exe चलाता है?

  • किसके लिए "प्रतिबंधित अनुमतियां" वास्तव में संबंधित हैं?

+0

आशा है कि चैट ने कुछ हद तक मदद की - आपके 2 प्रश्नों का उत्तर देने के लिए: "वह खाता कौन है जो वास्तव में cmd.exe चलाता है?" => उपयोगकर्ता ए। "किसके लिए" प्रतिबंधित अनुमतियाँ "वास्तव में संबंधित है?" => प्रतिबंधित अनुमतियां w3wp उपयोगकर्ता के ऐप पूल पहचान के (सामान्य) मामले को संदर्भित करती हैं, जिसने अधिकार कम कर दिए हैं। आपके मामले में, "उपयोगकर्ता ए" – JerKimball

+0

@ जेरकिमबॉल कृपया ध्यान दें कि Startinfo _does_ प्रमाण-पत्र प्रदान करता है। –

+0

ठीक है, उस स्थिति में, नई प्रक्रिया को उसी पहचान के तहत लॉन्च करना चाहिए क्योंकि प्रक्रिया में निर्दिष्ट उपयोगकर्ता/डोमेन जो भी आप प्रारंभ करते हैं। – JerKimball

उत्तर

5

प्रतिरूपण यहाँ खेलने में नहीं आएगा, क्योंकि हुड के नीचे, दो देशी Win32 में से एक पर कॉल Process.Start भरोसा है:

ProcessStartInfo.UserName प्रदान की जाती है:

CreateProcessWithLogonW(startInfo.UserName, startInfo.Domain, ...) 

CreateProcessWithLogonW

और नहीं तो:

CreateProcess(null, cmdLine, null, null, true, ...) 

CreateProcess

null एस CreateProcess में पारित हो गया है जो शायद आपको काट रहा है; एमएसडीएन से:

संरचना के lpSecurityDescriptor सदस्य मुख्य धागे के लिए सुरक्षा वर्णनकर्ता निर्दिष्ट करता है। यदि lpThreadAttributes NULL या lpSecurityDescriptor NULL है, तो थ्रेड को डिफ़ॉल्ट सुरक्षा डिस्क्रिप्टर मिलता है। थ्रेड के लिए डिफ़ॉल्ट सुरक्षा डिस्क्रिप्टर में ACL प्रक्रिया टोकन से आते हैं।

नोट यह प्रक्रिया टोकन से कहते हैं, धागा ना बुलाने - प्रतिरूपित पहचान के बाद से यह धागा करने के लिए बाध्य है पार्टी में शामिल होने का मौका नहीं मिलता है।

+0

मैं अपने कोड में प्रतिरूपण का उपयोग नहीं कर रहा हूं, यह web.cofig में लिखा गया है। तो पूरी साइट प्रतिरूपण के तहत है! –

+1

@ रॉयनामिर, यह वास्तव में कोई फर्क नहीं पड़ता कि प्रतिरूपण के लिए कोड किसने लिखा था - व्यवहार एक जैसा होगा जो पहले से ही एएसपी.Net या कुछ मैन्युअल का हिस्सा है क्योंकि आखिरकार यह उसी मूल कॉल पर आ जाएगा। Web.config खाता बदल नहीं सकता है, कार्यकर्ता प्रक्रिया के तहत चलती है - यह केवल अनुरोध चलाने वाले धागे पर प्रतिरूपण ट्रिगर करता है। –

+0

@AlexeiLevenkov तो w3wp उपयोगकर्ता अनुमतियों का कोई उपयोग नहीं होगा .... सही? कारण सभी धागे प्रतिरूपित उपयोगकर्ता द्वारा निष्पादित किया जाएगा। –

2

मेरा मानना ​​है कि MSDN प्रविष्टि तथ्य यह है कि भले ही प्रतिरूपण सक्षम है और आप एक विशिष्ट उपयोगकर्ता संदर्भ के तहत कर रहे हैं, नई प्रक्रिया प्रक्रिया के द्वारा पैदा की हो जाएगा को संदर्भित करता है - और प्रतिरूपण धागा स्तर पर होता है। उस ने कहा, मुझे विश्वास है कि यह 'उपयोगकर्ता' संदर्भ के तहत चलाएगा।

http://support.microsoft.com/kb/889251

सूचना एक ही प्रविष्टि में बताया गया है कि CreateProcessAsUser का उपयोग कैसे करें प्रतिरूपण के लिए अनुमति देने के लिए:

यहाँ उचित KB प्रविष्टि है।

+0

यह। डिफ़ॉल्ट रूप से, स्पॉन्डेड प्रक्रिया लॉन्च की जाएगी क्योंकि ऐप पूल जो भी चल रहा है। किसी अन्य उपयोगकर्ता संदर्भ के रूप में लॉन्च की गई प्रक्रिया को प्राप्त करने का एकमात्र तरीका यह होगा कि इसे पी/इनकार कर दिया जाए। – JerKimball

+0

@ जेरकिमबॉल लेकिन प्रतिरूपण w3wp उपयोगकर्ता ओवरराइड करता है ..... –

+0

लेकिन जैसा कि @ ओनोसेन्डाई ने कहा था, थ्रेड स्तर, प्रक्रिया पर प्रतिरूपण होता है। Win32 कॉल CreateProcessWithLogonW या CreateProcess (आंतरिक रूप से आपके पास निर्भर करता है) ProcessStartInfo में UserName सेट) ... वास्तव में, lemme इसे एक उत्तर में डाल दिया। – JerKimball

2

जैसा कि मैंने this problem को हल करने का प्रयास करते समय पाया, बहुत सी छोटी चीज़ें अलग-अलग हैं। यह रॉयआईएन के तहत चलाया जा सकता है, लेकिन आप पाएंगे कि USERPROFILE को C: \ Windows \ system32 \ config \ systemprofile पर सेट किया गया है, न कि आपके/उपयोगकर्ता/रॉयआईएन फ़ोल्डर।

आप जो करने की कोशिश कर रहे हैं उसके आधार पर, इससे कुछ समस्याएं पैदा हो सकती हैं। मेरे मामले में, एक गिट प्रक्रिया शुरू करना हमेशा के लिए लटका होगा।न केवल USERPROFILE और HOME गलत थे, मैंने यह भी पाया कि प्रतिरूपित उपयोगकर्ता मैप किए गए नेटवर्क ड्राइव के साथ अच्छी तरह से नहीं खेलते हैं।