क्या मुझे FastCGI के माध्यम से PHP को लागू करना चाहिए?


16

मैं FastCGI के माध्यम से IIS 7.5 पर PHP के नवीनतम संस्करण को स्थापित कर रहा हूं, और सभी निर्देश कहते हैं कि FastCGI को कॉलिंग क्लाइंट को सेटिंग द्वारा प्रतिरूपण करना चाहिए

 fastcgi.impersonate = 1

अगर मेरी वेबसाइट में यह कॉन्फ़िगरेशन होगा

  • समर्पित अनुप्रयोग पूल
  • ApplicationPoolIdentity के अनुप्रयोग पूल पहचान
  • अनाम प्रमाणीकरण केवल (IUSR के रूप में)

मुझे प्रतिरूपण क्यों करना है?

मैं एक ASP.NET बैकग्राउंड से आता हूँ, जहाँ IUSR को केवल-पढ़ने की अनुमति मिलती है और एप्लिकेशन पूल की पहचान को कोई लिखने की अनुमति मिलती है। IUSR के लिए लेखन पहुंच देना आमतौर पर WebDAV कमजोरियों के लिए द्वार खोलता है। इसलिए मैं PHP को IUSR के रूप में चलाने में संकोच करता हूं।

मैं कई लोगों से यह सवाल नहीं पूछ सकता ( 1 | 2 ) इसलिए मुझे लगता है कि मुझे कुछ याद आ रहा है। क्या कोई मेरे लिए इसे स्पष्ट कर सकता है?

जवाबों:


17

13 महीने बाद, मैं अपने सवाल पर फिर से विचार करना चाहता था। उस समय में मैंने आईआईएस 6 से आईआईएस 7.5 तक आधा दर्जन वेबसाइटें स्थानांतरित की हैं और उन्हें अपनी पसंदीदा विधि से कॉन्फ़िगर किया है। मैं केवल इतना कह सकता हूं कि वेबसाइटें काम करती हैं, उनके पास कोई सुरक्षा समस्या नहीं थी (यह नहीं कि ये लोकप्रिय साइटें हैं), और मेरी राय में सेटअप क्या सीखता है की तुलना में अधिक सुरक्षित है।

पोस्टीरिटी के लिए, यहां प्रासंगिक सेटिंग्स हैं। PHP INI में:

cgi.force_redirect = 0
cgi.fix_pathinfo=1
fastcgi.impersonate = 0

IIS में:

  • अनुप्रयोग पूल> पहचान> ApplicationPoolIdentity
  • वेबसाइट> प्रमाणीकरण> अनाम प्रमाणीकरण> विशिष्ट उपयोगकर्ता: IUSR

NTFS अनुमतियाँ और उन्हें कहाँ लागू करना है:

  • IUSR - अनुदान पढ़ें, इनकार लिखें
    • IIS वेबसाइट की रूट डायरेक्टरी। उदाहरण के लिए, Zend फ्रेमवर्क परियोजना में यह / सार्वजनिक निर्देशिका होगी।
    • यदि आपका आवेदन फाइलों को अपलोड करता है और उन्हें एक सार्वजनिक निर्देशिका में सहेजता है, तो आपको इस अनुमति को अस्थायी अपलोड निर्देशिका में लागू करना होगा। ऐसा इसलिए है क्योंकि move_uploaded_fileअपलोड निर्देशिका की अनुमतियों को संरक्षित करेगा। यह इस अनुमति सेटअप का सबसे बड़ा दोष है जो मुझे मिला है।
  • ApplicationPoolIdentity ( IIS AppPool\<<YourApplicationPoolName>>) - अनुदान पढ़ें और सूची
    • अपने PHP आवेदन की जड़। उदाहरण के लिए, Zend फ्रेमवर्क परियोजना में यह पूरी परियोजना होगी।
    • आपके एप्लिकेशन द्वारा शामिल कोई भी बाहरी लाइब्रेरी (Zend, Doctrine, आदि) जो एप्लिकेशन फ़ोल्डर में नहीं हैं।
  • ApplicationPoolIdentity - अनुदान संशोधित करें
    • किसी भी स्थान जहां आपके आवेदन जैसे लिखेंगे upload_tmp_dir, session.save_pathऔर error_log
    • कभी-कभी मुझे अपने विकास के वातावरण में PHP एप्लिकेशन की जड़ में इस अनुमति को जोड़ने की आवश्यकता है ताकि डॉक्ट्रिन की ऑटो-जनरेशन की भविष्यवाणियों जैसी चीजों का समर्थन किया जा सके ।
  • ApplicationPoolIdentity - अनुदान सूची
    • यदि आपका आवेदन एक आभासी निर्देशिका में है, तो आपको इस अनुमति को वेबसाइट की जड़ में जोड़ना होगा। यह आपके एप्लिकेशन को इसके मूल web.config को पढ़ने की अनुमति देता है। उदाहरण के लिए, यदि आपकी एप्लिकेशन रूट http://example.com/MyPHPApp है , तो इस अनुमति को example.com वेब निर्देशिका पर सेट करें। विशेष रूप से आपको केवल "यह फ़ोल्डर और फ़ाइलें", "केवल इस कंटेनर के भीतर" को लागू करने की आवश्यकता है।

मुझे उम्मीद है कि यह किसी और की मदद करता है जो यह तय करता है कि learn.iis.net निर्देश आदर्श नहीं हैं।


इसके लिए बहुत - बहुत धन्यवाद! स्वचालित करने के लिए एक बैच स्क्रिप्ट जोड़ा गया। मेरी स्थापना के लिए ठीक काम करता है।
सर

आपको प्रतिरूपण को सक्षम करना चाहिए और प्रमाणीकरण> अनाम एक्सेस> एडिट टू एप्लीकेशन पूल आइडेंटिटी सेट करना चाहिए। तब केवल IIS APPPOOL \ <अनुप्रयोग पूल नाम> का उपयोग करके फ़ाइल सिस्टम अनुमतियाँ सेट करें।
12

@ कुरियन हां, यह दृष्टिकोण सरल है और सीख के अनुसार है ।iis.net निर्देश। क्या यह कोई अन्य लाभ प्रदान करता है? मैंने ऊपर उल्लिखित सिस्टम को चुना क्योंकि यह वेब उपयोगकर्ता की अनुमतियों से एप्लिकेशन की अनुमतियों को अलग करता है।
विम्पीप्रोग्राममर

यह कई एप्लिकेशन को एक-दूसरे के डेटा तक पहुंचने से रोकता है। ApplicationPoolIdentity के बिना यदि किसी एप्लिकेशन को हैक किया जाता है, तो इसका उपयोग उस सर्वर पर अन्य एप्लिकेशन को हैक करने के लिए किया जा सकता है। दूसरी बात यह है कि आप FastCGI के साथ ही ASP.NET का इलाज कर सकते हैं जहाँ तक अनुमतियाँ संबंधित हैं।
मंशीपुर

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

1

देखें: http://www.php.net/manual/en/install.windows.iis6.php

प्रतिरूपण और फ़ाइल सिस्टम पहुंच

IIS का उपयोग करते समय PHP में FastCGI प्रतिरूपण को सक्षम करने की अनुशंसा की जाती है। इसे php.ini फ़ाइल में fastcgi.impersonate निर्देश द्वारा नियंत्रित किया जाता है। जब प्रतिरूपण सक्षम किया जाता है, तो PHP उस उपयोगकर्ता खाते की ओर से सभी फ़ाइल सिस्टम संचालन करेगा जो IIS प्रमाणीकरण निर्धारित किया गया है।

प्रलेखन के अनुसार, यह फास्टैगि को ग्राहक की ओर से सभी समान अनुमतियों का उपयोग करने के लिए अनुमति देता है (आपके मामले में IUSR खाते की तरह दिखता है)। दूसरे शब्दों में, ग्राहक की (या एनॉन की) स्वयं की साख के लिए सामान्य रूप से अनुमत सभी क्रियाओं को करने के लिए। न आधिक न कम। इस सेट के बिना, मुझे लगता है कि खराब फास्टैगी को अपंग छोड़ दिया जाएगा।


यही कारण है कि उसकी स्थिति में यह अतिथि खाते या कुछ और के आधार पर पहुंच होगी।
मैट

आपके उत्तर के लिए धन्यवाद मैट और बॉब! मुझे लगने लगा था कि कोई छुरा नहीं लेगा।
विम्पीप्रोग्राममर

2
जब PHP को प्रतिरूपण के बिना चलाया जाता है, तो यह अनुप्रयोग पूल पहचान के रूप में चलता है। यह मुझे एनॉन उपयोगकर्ता को केवल-पढ़ने का अधिकार देता है और ऐप की पहचान के लिए लिखने का अधिकार देता है। तो PHP प्रतिरूपण के बिना असहाय नहीं है। मैंने एक परीक्षण बनाया जो स्पष्ट हो सकता है। IUSR (anon): दी गई रीड, इनकार लिखी गई। एप्लिकेशन पहचान: पढ़ने / लिखने के लिए दी गई। प्रतिरूपण बंद करने के बाद, मैं अभी भी कोड के माध्यम से फ़ाइलें लिख सकता हूं। प्रतिरूपण के साथ, मैं नहीं कर सकता। लेकिन मैं नहीं चाहता कि आईयूएसआर में लेखन की सुविधा हो। मुझे लगता है कि मैं अन्य मंचों में कुछ सवाल पूछूंगा और अधिक जानकारी होने पर यहां लौटूंगा।
विम्पीप्रोग्राममर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.