फ़ाइलों और फ़ोल्डरों को लिखने के लिए PHP की अनुमति देना


13

अन्य ग्राहकों के लिए अद्यतन:

Http://expressionengine.com/user_guide/installation/installation.html के अनुसार , यह कहता है:

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

निश्चित नहीं इसका क्या मतलब। मैं विशिष्ट फ़ाइलों और फ़ोल्डरों को क्रमशः 666 और 777 में बदल सकता हूं, जहां मैं चाउनेयर हूं, लेकिन उपरोक्त ध्वनियां जैसे मुझे PHP को भी ऐसा करने की अनुमति देने की आवश्यकता है?

मूल प्रश्न:

मुझे यह सुनिश्चित करने की आवश्यकता है कि PHP विशिष्ट फ़ाइलों (666) और फ़ोल्डरों (777) को लिख सकती है।

मैं यह कैसे करु?


2
मुझे यकीन नहीं है कि आप किस समस्या को हल करने की कोशिश कर रहे हैं? यदि आप उस निर्देशिका तक पहुँच सकते हैं जहाँ फ़ाइल स्थित है और उसमें अनुमति निष्पादित है तो आप उन अनुमतियों के साथ फ़ाइलों और निर्देशिकाओं को लिख सकते हैं।
कार्लसन

ऊपर और विवरण जोड़ा गया।
५:३१ बजे oshirowanen

1
अधिकांश यूनिक्स होस्ट के लिए निम्नलिखित विशिष्ट है, लेकिन आप अपने होस्ट के साथ यह देखने के लिए जांच कर सकते हैं कि क्या PHP में फ़ाइलों (666) और फ़ोल्डर्स (777) को लिखने की अनुमति देने के लिए अधिक प्रतिबंधात्मक अनुमतियों का उपयोग किया जा सकता है - क्या कोई कोमा गायब है? अन्यथा इस वाक्यांश का कोई मतलब नहीं है। जब तक उच्च स्तर की निर्देशिका प्रतिबंधित नहीं होती है तब तक आपके पास विश्व लेखन योग्य फ़ाइलों या निर्देशिकाओं के लिए कोई समस्या नहीं होती है।
कार्लसन

मैंने प्रलेखन से सिर्फ एक कॉपी और पेस्ट किया। इसके अलावा, यही कारण है कि मैंने सवाल पोस्ट किया क्योंकि मुझे समझ में नहीं आया कि उस बोली का क्या मतलब है ...
oshirowanen

1
यदि आप वेब फ़ाइलों के संबंध में 666 या 777 का उपयोग करते हुए सुझाव देते हुए देखते हैं, तो आपको शायद इसे अनदेखा करना चाहिए जब तक कि कोई अच्छा कारण न समझाया गया हो। यह आमतौर पर किसी ऐसे व्यक्ति द्वारा लिखा गया है जो यह पता नहीं लगा सकता है कि सही अनुमतियों को कैसे सेट किया जाए, और फाइलों को पढ़ने या लिखने के लिए सभी को दिया और दिया।
jsbillings

जवाबों:


18

मैं एक तकनीकी समाधान के साथ rahmu और MV के उत्तरों को पूरा करूंगा। जो कुछ भी अनुसरण करता है वह UNIX- जैसी प्रणालियों के लिए ही मान्य है।

ACLs का उपयोग करके उदाहरण के लिए chmod / chown सेक्शन को स्क्रॉल करें - UNIX फ़ाइल मोड से अधिक शक्तिशाली टूल।

अपना वेब सर्वर उपयोगकर्ता नाम ढूँढना

सबसे पहले, आपको उस उपयोगकर्ता नाम को जानना होगा जिसके तहत आपका वेब सर्वर चलता है। यदि आप अपाचे का उपयोग कर रहे हैं, तो यह apacheया , आदि हो सकता है httpd, www-dataअधिकांश डेबियन जैसी प्रणालियों पर, अपाचे है www-data। नग्नेक्स के लिए, आम तौर पर, यह भी है www-data

इसे जांचने के लिए, प्रयास करें:

ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1

सुनिश्चित करें कि यह कमांड रिटर्न उपयोगकर्ता नाम सुसंगत है (उदाहरण के लिए, मैं 99% nginx समय का उपयोग करता हूं, लेकिन यह कमांड रिटर्न tomcat7, एक जावा वेब सर्वर जिसे मैंने एक बार स्थापित किया है)


वेब सर्वर को अनुमति देना: उपयोग करना chmodऔरchown

एक कर chmodके 666 या 777 (बुरा दस्तावेजों / ट्यूटोरियल में समस्याओं उस तरह के लिए जाने के लिए समाधान) जादुई चीजें काम कर सकते हैं, लेकिन असुरक्षित है। 666 या 777 अनुमतियाँ देने से "अन्य" तक पहुँच मिलेगी। इसलिए न केवल अपाचे, बल्कि यह भी grandmotherऔर nsa(बशर्ते कि वे उपयोगकर्ता खाते आपकी मशीन पर मौजूद हों - लेकिन वास्तव में, कृपया ऐसा करने से बचें जब तक कि यह केवल परीक्षण / समस्या निवारण के लिए न हो)।

अधिक विशिष्ट होना बेहतर है और आप और अपाचे को अनुमति दें। वेब सर्वर पर अपनी फ़ाइलों पर पूर्ण नियंत्रण देने के लिए अपनी फ़ाइलों के समूह को बदलें। ऐसा करने के लिए, स्वामी को पुनरावर्ती रूप से बदलें:

chown -R www-data:www-data your/folder/

लेकिन सबसे अधिक संभावना है, आप केवल समूह को बदलकर अपनी फ़ाइलों पर पूर्ण पहुंच रखना चाहते हैं:

chown -R yourusername:www-data your/folder/

फिर, chmodसमूह www-dataको आपके समान अनुमतियाँ देने के लिए उपयुक्त कार्य करें । उदाहरण के लिए, यदि वर्तमान मोड 640 (आपके लिए 6, www-डेटा के लिए 4, दूसरों के लिए 0, -rw-r -----) का अनुवाद है , तो इसे 660 पर सेट करें (6 आप के लिए, 6 www के लिए- डेटा, दूसरों के लिए, अनुवाद करने के लिए -rw-rw ----) । फ़ाइल मोड के बारे में अधिक जानने के लिए rahmu का उत्तर देखें, यह एक पुराना, लेकिन सुरुचिपूर्ण तंत्र है।

के साथ रहस्यमय संख्या में हेरफेर से बचने के लिए chmod, आप इस वाक्यविन्यास का उपयोग कर सकते हैं:

chmod -R g+rw your/folder/

इसका अर्थ है "समूह में ( g), जोड़ने ( +) पढ़ने और लिखने ( rw) फ़ोल्डर पर अनुमति your/folder/, पुनरावर्ती ( -R)"।

90% मामलों में, यह पर्याप्त होना चाहिए।


मेरी पसंदीदा विधि: ACLs (एक्सेस कंट्रोल लिस्ट) का उपयोग करना

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

और chmod/ chownविधि पर्याप्त नहीं हो सकती है, जब आप सीएलआई (मेरे उपयोगकर्ता खाते के तहत) और वेब (वेब ​​सर्वर उपयोगकर्ता) में समानांतर सिम्फनी कंसोल का उपयोग कर रहे हैं। यह बहुत सारी समस्याओं का कारण बनता है क्योंकि सिम्फनी लगातार अनुमतियों को संशोधित कर रहा है।

इस मामले में, हम एसीएल (एक्सेस कंट्रोल लिस्ट) का उपयोग करेंगे, जो कई यूनिक्स प्रणालियों पर अनुमतियों को प्रबंधित करने का एक अधिक उन्नत तरीका है।

यहां आधिकारिक सिम्फनी प्रलेखन द्वारा दिए गए आदेश ( कृपया अपनी आवश्यकताओं को बदलें app/cacheऔरapp/logs ):

ऐसी प्रणाली पर जो समर्थन करती है chmod +a(यानी डेबियन / उबंटू नहीं)

sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs

ऐसी प्रणाली पर जो समर्थन नहीं करती है chmod +a(सबसे आम)

आपको setfaclउपकरण की आवश्यकता होगी ; हो सकता है कि यह आपके सिस्टम पर डिफ़ॉल्ट रूप से स्थापित हो, इसलिए setfacl -vयह देखने का प्रयास करें कि क्या कमांड उपलब्ध है।

यदि कमांड उपलब्ध नहीं है, और आप Ubuntu 14.04+ का उपयोग कर रहे हैं, तो आपको बस टूल इंस्टॉल करना होगा:

sudo apt install acl

अन्यथा, अपने ओएस प्रलेखन का पालन करें, क्योंकि आपको यह बदलने की आवश्यकता हो सकती है कि आपका विभाजन कैसे माउंट किया गया है ( उबंटू प्रलेखन यहां )।

और वहाँ हम हैं:

sudo setfacl  -R -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs

इस पद्धति से मुझे कभी कोई समस्या नहीं हुई, संतुष्ट या आपके पैसे वापस नहीं मिले।


1
+1 के लिए 'ps aux | grep -E '[a] pache | [h] ttpd | [_] www | [w] ww-data | [n] ginx' grep -v रूट | सिर -1 | cut -d \ -f1 '
अमर प्रताप

4

कोई फर्क नहीं पड़ता कि कौन फ़ाइलों का मालिक है, 666 अनुमतियां और 777 पर्याप्त होगा: अंतिम अंक यह सुनिश्चित करता है कि सिस्टम का प्रत्येक उपयोगकर्ता एक्सेस कर सकता है। हालांकि यह ऐसा करने का सबसे आसान तरीका है, यह निश्चित रूप से उस सटीक कारण के लिए सबसे सुरक्षित नहीं है।

इसे करने का एक बेहतर तरीका है

पहली बात जो आपको समझने की ज़रूरत है कि यूनिक्स अनुमतियाँ कैसे काम करती हैं । इस लिंक पर मैंने जो उत्तर दिया है, उसे समझने की रुचि में, कृपया ध्यान दें कि अनुमतियों को संख्याओं में अनुवाद किया जा सकता है:

  • 0: ---
  • 1: --x
  • 2: -w-
  • 3: -wx
  • 4: r--
  • 5: r-x
  • 6: rw-
  • 7: rwx

A chmod 666तब अनुमतियों को बदलने के समतुल्य है rw-rw-rw

आगे आपको यह पता लगाना है कि PHP स्क्रिप्ट को निष्पादित करने वाला उपयोगकर्ता कौन सा है। आम तौर पर वह उपयोगकर्ता होगा जो आपका वेब सर्वर चला रहा है। यह कैसे करें (आप अपने वेब सर्वर के नाम के साथ अपाचे को बदल सकते हैं) इसका एक उदाहरण है

एक बार जब आप जानते हैं कि स्क्रिप्ट को निष्पादित करने वाला उपयोगकर्ता कौन है, और आपके द्वारा उल्लेखित फ़ाइलों का स्वामी, उचित अनुमतियाँ सेट करना आपके ऊपर है। ध्यान रखें कि आपके सिस्टम पर प्रत्येक उपयोगकर्ता को लेखन एक्सेस (यहां तक ​​कि पढ़ने) देना संभावित रूप से विनाशकारी हो सकता है।


0

अभिव्यक्ति इंजन कई अन्य PHP वेब अनुप्रयोगों की तरह है जो कुछ फ़ाइलों और निर्देशिकाओं के लिए पढ़ने + लिखने की आवश्यकता है। उदाहरण के लिए, EE को अपने config.php और database.php फाइलों तक लिखने की पहुँच की आवश्यकता होती है, और इसकी फ़ाइल अपलोड निर्देशिकाओं तक पहुँच लिखें।

प्रलेखन क्या कह रहा है कि, चूंकि अधिकांश सर्वर PHP को mod_php के रूप में चलाते हैं (और इसलिए वेब सर्वर की अनुमतियों के साथ चलते हैं), और जैसा कि आप शायद अपने स्वयं के उपयोगकर्ता, उन फ़ाइलों का उपयोग करके FTP (या समान) के साथ अपनी फ़ाइलों को अपलोड करेंगे। निर्देशिकाओं को 666 (हर कोई पढ़ और लिख सकता है) और 777 (हर कोई पढ़, लिख और ब्राउज़ कर सकता है) को अनुमति देनी होगी।

यह सबसे सुरक्षित तरीका नहीं है, लेकिन निश्चित रूप से सबसे आसान है, खासकर यदि आपका होस्टिंग सेवा का उपयोग कर रहा है।

हालांकि, ईई निर्देश राज्य के रूप में, अपने होस्टिंग प्रदाता से पूछें, क्योंकि कुछ mod_php का उपयोग नहीं करते हैं, लेकिन एक fastcgi, suphp या विभिन्न संस्करण। वे सर्वर आपके स्वयं के उपयोगकर्ता के रूप में PHP चलाते हैं, इसलिए आपके द्वारा अपलोड की जाने वाली सभी फाइलें PHP द्वारा पहले से ही पठनीय और लिखने योग्य हैं और EE स्क्रिप्ट द्वारा बनाई गई किसी भी फ़ाइल द्वारा। उस स्थिति में PHP द्वारा एक्सेस की गई फ़ाइलों और निर्देशिकाओं को 600 और 700 का उपयोग करने की आवश्यकता होगी। वेब सर्वर (PHP रनटाइम नहीं) द्वारा सीधे एक्सेस की जाने वाली अन्य फ़ाइलों को अभी भी 666 और 777 एक्सेस की आवश्यकता होगी)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.