खुले_बेडिर प्रभाव में प्रतिबंध। फ़ाइल (/) अनुमत पथ के भीतर नहीं है:


87

मुझे यह त्रुटि मेरी साइट पर एक अवतार अपलोड पर मिल रही है। मैंने इसे पहले कभी प्राप्त नहीं किया है और हाल ही में मेरे लिए यह त्रुटि शुरू करने के लिए कुछ भी नहीं बदला गया था ...

Warning: is_writable() [function.is-writable]: 
open_basedir restriction in effect. 
File(/) is not within the allowed path(s):

18
आपने एक गैर-कार्यशील उत्तर स्वीकार कर लिया।
साज

जवाबों:


-22

अपने PHP कॉन्फ़िगरेशन में open_basedirसेटिंग्स को संशोधित करें ( रनटाइम कॉन्फ़िगरेशन देखें )।

open_basedirसेटिंग मुख्य रूप से अन्य उपयोगकर्ता के खाते में फ़ाइलों तक पहुँचने से एक विशेष उपयोगकर्ता के लिए PHP स्क्रिप्ट को रोकने के लिए प्रयोग किया जाता है। इसलिए आमतौर पर, आपके स्वयं के खाते में कोई भी फाइल आपकी अपनी स्क्रिप्ट द्वारा पठनीय होनी चाहिए।

उदाहरण सेटिंग्स के माध्यम से .htaccessअगर PHP लिनक्स सिस्टम पर अपाचे मॉड्यूल के रूप में चलता है:

<DirectoryMatch "/home/sites/site81/">
    php_admin_value open_basedir "/home/sites/site81/:/tmp/:/"
</DirectoryMatch>

2
@Nikesh मेरे द्वारा अपने .htaccces में ड्रॉप करने और पाथ को बदलने के बाद इसने मुझे 500 त्रुटि दीं /my/cutsom/dir/:। सोचा क्यों नहीं।

79
एक गलत उत्तर के लिए कूल, 12 अपवोट्स। आप फ़ाइलों php_admin_valueमें उपयोग नहीं कर सकते.htaccessआप .htaccess फ़ाइलों में DirectoryMatch का उपयोग नहीं कर सकते । ( open_basedirयदि इसे सिर्फ अक्षम किया जा सकता है तो सुरक्षा का क्या उपाय होगा ?)
अलवरो गोंजालेज

1
@eoinoc - नीचे स्क्रॉल करें और देखें जैसे आंद्रेई का जवाब। या वैश्विक php.ini फ़ाइल को संपादित करें।
अल्वारो गोंजालेज

19
आप अपनी सफलता में नहीं डालेंगे! लेकिन आप अपने APACHE CONFIG फ़ाइल पर ध्यान दें।
20

8
Open_badeir में रूट डायरेक्टरी को शामिल करने से open_basedir का उद्देश्य पूरी तरह से पराजित हो जाता है। यह समाधान केवल "काम करता है" इस अर्थ में कि यह अनिवार्य रूप से प्रतिबंध को निष्क्रिय करता है।
मार्टिन

113

अपने होस्टिंग खाते में open_basedir सेटिंग्स को संशोधित करें और उन्हें कोई भी सेट न करें। अपने Plesk / cPanel के 'PHP Settings' क्षेत्र के तहत दी गई open_badeir सेटिंग का पता लगाएं। इसे वहां दिए गए ड्रॉपडाउन से 'कोई नहीं' पर सेट करें। मैंने उन्हें प्लेस्क पैनल की तस्वीर में दिखाया है।

यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें


1
@ योगीहोस्टिंग करने के बाद मुझे यह त्रुटि मिली - आपके द्वारा निर्दिष्ट मॉडल का पता लगाने में असमर्थ: होम_मॉडल
हेमांशु भल्ला

1
यह करने के लिए देर हो चुकी है, लेकिन वहाँ सभी plesk साइटों के लिए ऐसा करने का एक तरीका है? मैंने इसे वैश्विक php.ini में सेट करने के लिए किसी को भी सेट नहीं किया है जो साइट उपयोग कर रहे हैं: gyazo.com/dfffbe7f9b3a20ede97da72f1ddfc777 लेकिन फिर भी उन्हें त्रुटि मिलती है।
मैट काउली

@MattCowley आपको प्रत्येक और हर साइट के लिए ऐसा करना होगा जो कि plesk पैनल में हो।
योगीहोस्टिंग 19

1
बहुत ही उपयोगी उत्तर, मेरे मुद्दे ने अंगूठे को हल कर दिया :)
मोहम्मदनिश

1
इस समाधान के लिए धन्यवाद! यह मेरे लिए परफेक्ट होस्टिंग पर काम कर रहा है!
स्माइलफाउंडर

38

इस त्रुटि को हल करने के लिए, आपको httpd.conf फ़ाइल को संपादित करना होगा। इससे पहले कि यह apache2handler अनुभाग निर्देशक सर्वर रूट में phpinfo में देखा जा सकता है। उदाहरण के लिए, मेरे मामले में इस तरह - / etc / httpd / httpd.conf। Httpd.conf फ़ाइल खोलें, पैरामीटर का उल्लेख खोलें_बेडिर। और इसे किसी को भी सेट न करें। ( php_admin_value open_badeir none )


मेरे लिए 'कोई नहीं' पर काम करना - एक Plesk इंटरफ़ेस का उपयोग करना।
डिगर्सवर्ल्ड

8
मुझे open_basedirअपने में कॉन्फ़िगरेशन मिला php.ini। (आर्क लिनक्स 5
रास्प के

2
यह भी मेरे php.ini (भी आर्क) में पाया। इस उत्तर के समान प्रभाव को प्राप्त करने के लिए लाइन पर टिप्पणी करें।
बेन एल्गर

@BenElgar ने केवल यह टिप्पणी करते हुए कि रेखा ने कामों का उल्लेख किया है, मैं बस पूछ रहा हूँ कि वहाँ जोखिम है
mwangaben

6

यदि आप इसके साथ भाग रहे हैं php file.php। आपको php.ini इस फ़ाइल को संपादित करने की आवश्यकता है :

: locate php.ini
/etc/php/php.ini

और open_basedirसंपत्ति के लिए फ़ाइल का पथ संलग्न करें :

open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/:/run/media/andrew/ext4/protected


यह एकमात्र समाधान है जो सुरक्षा को पूरी तरह से रोकने के बजाय कई विशिष्ट रास्तों की ओर इशारा करता है।
mvreijn

5

मेरे लिए समस्या पूरी बात चलाने वाले Plesk सर्वर के लिए खराब / गायब कॉन्फ़िगरेशन मान थी। मैंने यहां केवल निर्देशों का पालन किया है: http://davidseah.com/blog/2007/04/separate-php-error-logs-for-multiple-domains-with-plesk/

आप प्रत्येक VirtualHost परिभाषा के लिए एक अलग त्रुटि लॉग फ़ाइल के लिए PHP को कॉन्फ़िगर कर सकते हैं। ट्रिक यह जान रही है कि इसे कैसे सेट किया जाए, क्योंकि आप प्लिस्को को तोड़े बिना सीधे कॉन्फ़िगरेशन को नहीं छू सकते। आपके (DV) प्रत्येक डोमेन नाम की अपनी निर्देशिका / var / www / vhosts में है। एक विशिष्ट निर्देशिका में निम्न शीर्ष स्तर की निर्देशिकाएँ होती हैं:

cgi-bin/
conf/
error_docs/
httpdocs/
httpsdocs/
...and so on

आप निम्नलिखित पंक्तियों के साथ डोमेन निर्देशिका के कॉन्फ / फोल्डर में एक vhost.conf फ़ाइल बनाना चाहते हैं:

php_value error_log /path/to/error_log
php_flag display_errors off
php_value error_reporting 6143
php_flag log_errors on

अपने वास्तविक इंस्टॉलेशन (मैंने /tmp/phperrors.log का उपयोग किया) से मिलान करने के लिए पहला मान बदलें। Vhost.conf फ़ाइल का संपादन करने के बाद, आप कंसोल से कॉन्फ़िगरेशन का परीक्षण करें:

apachectl configtest
…or if you don’t have apachectl (as Plesk 8.6 doesn’t seem to)…

/etc/init.d/httpd configtest

और अंत में Plesk को बताएं कि आपने यह बदलाव किया है।

/usr/local/psa/admin/bin/websrvmng -a

2

जिस मार्ग का आप उल्लेख कर रहे हैं, वह संपूर्ण है, और निर्देशिका नहीं है। जिस फ़ाइल को आप एक्सेस करना चाहते हैं, उस पूर्ण पथ का निर्माण करने का प्रयास करें, जहाँ अब आप संभवतः किसी सापेक्ष पथ का उपयोग कर रहे हैं ...


यह एक निरपेक्ष मार्ग का उपयोग कर रहा है। यह इस को छोड़कर सभी उपयोगकर्ताओं के लिए काम करता है।
वेबनेट

2

अगर आपको ispconfig3 के साथ इस तरह की समस्या है और इस तरह की त्रुटि मिली है

खुले_बेडिर प्रभाव में प्रतिबंध। फ़ाइल (/ var / www / क्लाइंट / क्लाइंट 7 / वेब 15) अनुमत पथ के भीतर नहीं है: .........

इसे (मेरे मामले में) हल करने के लिए, बस PHP को वेबसाइट के ispconfig3 के पैनल में SuPHP पर सेट करें

आशा है कि यह किसी की मदद करता है :)


2

अद्यतन करने और / या जाने के बाद मेरे पास यह समस्या थी।

डेटाबेस तालिका 'wp_options' 'upload_path' में देखें और इसे ठीक से संपादित करें ...


आपने इसे किस मूल्य पर सेट किया है? / I....//ublic/html/wp-content/uploads?
ब्रेट

1

अगर ispconfig3 का उपयोग किया जाता है:

वेबसाइट अनुभाग पर जाएँ -> विकल्प -> PHP ओपन_बेडिर:

यहाँ छवि विवरण दर्ज करें

  • इस क्षेत्र में वर्णित रास्तों का वर्णन किया गया है और प्रत्येक पथ को ":"

/ var / www / क्लाइंट / क्लाइंट 2 / वेब 3 / छवि: / var / www / क्लाइंट / क्लाइंट 2 / वेब 3 / वेब: / var / www / ... और इतने पर

  • इसलिए यहाँ उस रास्ते को रखना होगा जिसे आप एक्सेस करना चाहते हैं, मेरे मामले में:

/ Var / www / ग्राहकों / client2 / web3 / छवि:

  • समस्या प्रकट होती है क्योंकि:

जब कोई स्क्रिप्ट फ़ाइल सिस्टम तक पहुंचने की कोशिश करती है, उदाहरण के लिए, शामिल या फ़ोपेन () का उपयोग करके, फ़ाइल का स्थान जांचा जाता है। जब फ़ाइल निर्दिष्ट निर्देशिका-ट्री के बाहर है, तो PHP इसे एक्सेस करने से इंकार कर देगा।


0

यदि आप PHP IIS स्टैक चला रहे हैं और यह त्रुटि है, तो यह आमतौर पर एक त्वरित अनुमति फ़िक्स है।

यदि आप स्वयं विंडोज़ सर्वर का प्रशासन करते हैं और पहुंच रखते हैं, तो इस FIRST को आज़माएँ:

उस फ़ोल्डर पर नेविगेट करें जो आपको लिखने पर दुःख दे रहा है और इसे राइट करें> ओपन गुण> सुरक्षा पर क्लिक करें।

देखें कि उपयोगकर्ताओं के पास फ़ोल्डर तक पहुंच क्या है, जो केवल पढ़े हैं और जिनके पास पूर्ण है। क्या आपके पास एक समूह है जो लेखन को अवरुद्ध कर रहा है?

यह फिक्स आपके IIS सेटअप के लिए विशिष्ट होगा, क्या आप विशिष्ट उपयोगकर्ता IUSR या एप्लिकेशन पूल पहचान के साथ बेनामी प्रमाणीकरण का उपयोग कर रहे हैं?

किसी भी दर पर, आप IUSR, IIS_IUSRS, या आपके एप्लिकेशन पूल पहचान में से एक के लिए एक नया पूर्ण लेखन अनुमति जोड़ने जा रहे हैं - जैसे मैंने कहा, यह आपके सेटअप के आधार पर भिन्न हो सकता है और आप इसे कैसे करना चाहते हैं, आप इस पर एक (इस तरह के पोस्ट - IIS_IUSRS और IIS8 में IUSR अनुमतियाँ ) पर Google खरगोश छेद नीचे जा सकते हैं मेरे लिए, मैं अपने ऐप पूल पहचान के साथ एनॉन का उपयोग करता हूं ताकि मैं दूर हो सकूंMACHINE_NAME\IIS_IUSRS किसी भी अस्थायी या अपलोड के साथ पूर्ण पढ़ने / लिखने के साथ फ़ोल्डरों।

मुझे open_basedir =php.ini में अपने लिए कुछ अतिरिक्त जोड़ने की आवश्यकता नहीं है ।


0

के अलावा @ yogihosting का जवाब है, अगर आप का उपयोग कर रहे DirectAdmin , तो इन चरणों का पालन करें:

  1. DirectAdmin के लॉगिन पेज पर जाएं। आमतौर पर, इसका बंदरगाह 2222 है।
  2. व्यवस्थापक के रूप में लॉगिन करें। इसका उपयोगकर्ता नाम adminडिफ़ॉल्ट रूप से है।
  3. दाएं पैनल पर "एक्सेस लेवल" से, सुनिश्चित करें कि आप "एडमिन लेवल" पर हैं। यदि नहीं, तो इसे बदल दें।
  4. "अतिरिक्त सुविधाएँ" अनुभाग से, "कस्टम HTTPD विन्यास" पर क्लिक करें।
  5. वह डोमेन चुनें जिसे आप बदलना चाहते हैं।
  6. उस कॉन्फ़िगरेशन को दर्ज करें जिसे आप टेक्स्टरी में पेज के शीर्ष पर बदलना चाहते हैं। आपको मौजूदा कॉन्फ़िगरेशन फ़ाइल पर विचार करना चाहिए और इसके आधार पर मूल्यों को संशोधित करना चाहिए। उदाहरण के लिए, यदि आप देखते हैं कि open_basedirअंदर सेट किया गया है <Directory>, तो शायद आपको संबंधित <Directory>टैग में अपना परिवर्तन करना चाहिए :

    <Directory "/path/to/directory">
        php_admin_value open_basedir none
    </Directory>
    
  7. आवश्यक परिवर्तन करने के बाद, "सहेजें" बटन पर क्लिक करें।

  8. यदि आप मान्य थे, तो अब आपको अपने परिवर्तनों को कॉन्फ़िगरेशन फ़ाइल में सहेज कर देखना चाहिए।

हालाँकि, कॉन्फ़िगरेशन फ़ाइल को संपादित करने का एक और तरीका है:

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

  1. अपने सर्वर पर रूट के रूप में लॉगिन करें।
  2. के लिए जाओ /usr/local/directadmin/data/users । सूचीबद्ध उपयोगकर्ताओं से, उस डोमेन से संबंधित एक पर जाएं जिसे आप बदलना चाहते हैं।
  3. यहां, एक httpd.confफ़ाइल है। इससे एक बैकअप बनाएं:

    cp httpd.conf httpd.conf.back
    
  4. अब अपनी पसंद के संपादक के साथ कॉन्फ़िगरेशन फ़ाइल को संपादित करें। उदाहरण के लिए, मौजूदा open_basedirको संपादित करें none। चीजों को हटाने की कोशिश न करें, या आप डाउनटाइम का अनुभव कर सकते हैं। संपादन के बाद फ़ाइल सहेजें।

  5. निम्नलिखित तरीकों में से एक का उपयोग करके अपाचे वेब सर्वर को पुनरारंभ करें ( sudoयदि आवश्यक हो तो उपयोग करें ):

    httpd -k graceful
    apachectl -k graceful
    apache2 -k graceful
    
  6. यदि आपकी कोई त्रुटि है, तो मुख्य कॉन्फ़िगरेशन फ़ाइल को बैकअप फ़ाइल के साथ बदलें, और वेब सर्वर को पुनरारंभ करें।

फिर से, पहला समाधान पसंदीदा है, और आपको पहली बार दूसरी विधि की कोशिश नहीं करनी चाहिए। जैसा कि सावधानी में बताया गया है, पहले तरीके का लाभ यह है कि यह आपके खराब-कॉन्फ़िगर सामान को बचाने से रोकता है।

आशा करता हूँ की ये काम करेगा!


0

मैं अपने विंडोज-सर्वर पर एप्लिकेशन-विशिष्ट इन-ऑप्शंस के साथ PHP चलाने के लिए Apache vhost -File का उपयोग कर रहा हूं । इसलिए मैं ph- कमांड के -d विकल्प का उपयोग करता हूं ।

मैं इन विकल्पों में से एक के रूप में हर आवेदन के लिए open_basedir सेट कर रहा हूं ।

मुझे UNC-Path सहित open_badeir के रूप में कई url सेट करने की आवश्यकता थी , और इस मामले के लिए सिंटैक्स को खोजना थोड़ा कठिन था। आपको अर्धविराम वाले रास्तों को अलग करना होगा और यदि आपका पहला रास्ता एक ड्राइवलेटर के साथ शुरू होता है, तो आपको सूची को अर्धविराम के साथ भी शुरू करना पड़ सकता है। कम से कम मेरे लिए तो यही काम करता है।

उदाहरण:

php.exe -d open_basedir=;d:/www/applicationRoot;//internal.unc.path/ressource/

-3

बस खोज करो

open_basedir =

php.ini में और इसे अक्षम करें। इस समस्या को हल करने का यह सबसे सरल उपाय है।

बदलाव से पहले open_basedir =

बदलाव के बाद ;open_basedir =

Ps - परिवर्तनों के बाद अपने सर्वर को पुनः आरंभ करना न भूलें।

का आनंद लें ;)


3
ऐसा मत करो ... सुरक्षा है, विश्वास करो या नहीं, महत्वपूर्ण है। :) अपने उपकरणों पर डॉक्स पढ़ने का समय: php.net/manual/en/ini.core.php#ini.open-basedir
एडम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.