PHP-FPM का चेरोट और chdir डायरेक्टरी


10

मैं chrooting सक्षम के साथ php-fpm की स्थापना कर रहा हूं। अब मैं देखता हूं कि दो विकल्प हैं, और मैं जानना चाहता हूं कि सटीक अंतर क्या है।

सेटअप में है:

chroot = /var/www/domains/domain.tld/
; Chdir to this directory at the start. This value must be an absolute path.
; Default Value: current directory or / when chroot
chdir = /docroot/

यहां दो अलग-अलग स्थान क्यों हैं, और किस पथ को php तक पहुंचने की अनुमति है। क्या php वेबसाइट एक्सेस /var/www/domains/domain.tld/कर सकती है, या यह केवल docrootडायरेक्टरी के साथ फाइल एक्सेस कर सकती है ।

===

शायद मेरे लिए कुछ ठोस सलाह है। मैं इस तरह से एक सेटअप करना चाहता हूं:

वेबरॉट स्थान: /var/www/

domain.com/
 |---conf/
 |    |--nginx.conf
 |    |--php-fpm.conf
 |
 |---ssl/
 |---logs/
 |---session/
 |---domains/
       |---www/
       |---app/
       |---dev/

अब यहाँ php-fpm सेटिंग्स होगी:

chroot = /var/www/domain.com/
chdir  = /domains/www

अब यहाँ मुख्य प्रश्न यह है कि क्या wwwउपडोमेन में स्थित एप्लिकेशन में devया फाइल को एक्सेस करने में सक्षम होगा app। या यहां तक ​​कि सत्र में स्थित फाइलें, जो सत्र बचाओ पथ है, या अन्य फ़ोल्डर जैसे एसएसएल और लॉग।

जवाबों:


12
  • चेरोट 'रूट' डायरेक्टरी को सेट करता है - आप रूट डायरेक्टरी से ऊपर नहीं जा सकते।
  • Chdir बस प्रारंभिक निर्देशिका को बदलता है - यह अभी भी अन्य निर्देशिकाओं में नेविगेट करना संभव है (इस से ऊपर के लोगों सहित)।
    • यदि आप एक क्रोकेट पथ निर्दिष्ट नहीं करते हैं, तो 'वास्तविक' रूट लागू होता है - और आप एक पूर्ण chdir निर्दिष्ट करते हैं।
    • यदि आप एक क्रोट पथ निर्दिष्ट करते हैं, तो आप क्रोटॉट पथ के सापेक्ष एक पथ निर्दिष्ट करते हैं (जो रूट निर्देशिका को फिर से परिभाषित करता है)।

आपके द्वारा प्रस्तावित सेटिंग्स काफी ठीक लगती हैं।

  • प्रारंभिक मार्ग चिरोट पथ + चदिर पथ होगा
  • एप्लिकेशन को चिरोट पथ के तहत सभी फ़ाइलों तक पहुंचने में सक्षम होगा (जब तक कि अन्य प्रतिबंध न हों - जैसे php_openbasedir, अनुमतियां, आदि)।

एक साइड नोट के रूप में - आपके php-application के पास आपके nginx.conf और php-fpm.conf तक पहुंच होगी जो आपके द्वारा दिखाए गए दस्तावेज़ संरचना के आधार पर है - जो ऐसा लगता है जैसे आप बदलना चाहते हैं (कम से कम फ़ाइलों को पढ़ने के लिए- केवल उस उपयोगकर्ता के लिए)।


मैं यह सुनिश्चित करूंगा कि वे फाइलें सुरक्षित हैं। वैसे, क्रोटिंग की इस पद्धति और बस php_openbadeir को सेट करने के बीच कोई अंतर है?
सैफ बेचन

1
हाँ - चेरोट ऑपरेटिंग सिस्टम स्तर पर लागू होता है और बाईपास के लिए बहुत कठिन है। Open_basedir PHP के लिए विशिष्ट है, और इसे हर फ़ंक्शन में जांचने की आवश्यकता होती है, इसलिए कारनामे अधिक सामान्य होते हैं (उदाहरण के लिए shell_exec के साथ बाहरी स्क्रिप्ट चलाकर)। इस मामले पर PHP की साइट पर एक दिलचस्प सुरक्षा नोट है। यह कहना नहीं है कि अगर आप किसी भी परिस्थिति में अपनी स्क्रिप्ट के बाहर कुछ भी करते हैं, तो ओपन_बैडिर बेकार है - यह आपके क्रॉच पथ की तुलना में एक अलग ओपन_बेडिर को परिभाषित करने के लिए उपयोगी हो सकता है। चेरोट भी बेहतर प्रदर्शन की पेशकश कर सकते हैं।
साइबरएक्स86
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.