php स्क्रिप्ट फ़ोल्डर तक नहीं पहुँच सकती / tmp नहीं कर सकती


16

मेरे पास कोई Open_basedir नहीं है, php एक्सेस / etc / usr / proc / home आदि कर सकता है ... लेकिन नहीं / tmp।

tmpfs माउंट है / tmp (/ tmp प्रकार tmpfs (rw)) यही कारण है कि मैं / tmp फ़ोल्डर का उपयोग करना चाहता हूं।

मेरी फाइलें http (nginx और php के लिए उपयोगकर्ता) और सभी द्वारा पठनीय हैं।

sudo -u http cat /tmp/file काम कर रहा है, लेकिन php स्क्रिप्ट के अंदर कुछ भी (जैसे file_exist () या फ़ाइल ()) नहीं है।

संपादित करें: लॉग में त्रुटि शो:

PHP Warning:  file(/tmp/ydlw/pid): failed to open stream: No such file or directory in /srv/http/ydlw/status.php on line 267

edit2: मैं इस मुद्दे को दूसरे तरीके से परीक्षण किया। मैंने बनाया

touch("/tmp/boo");
file_exist("/tmp/boo");

और file_exist रिटर्न सही है इसलिए फ़ाइल बनाई गई है। तब मैंने अंदर देखा / tmp और कोई "boo" फ़ाइल वहाँ नहीं मिली। यही कारण है कि मुझे डर था, php नहीं «माउंट» माउंट बिंदु देखें। ऐसा क्यों है और मैं इसे कैसे ठीक कर सकता हूं?


उन PHP फ़ंक्शंस द्वारा दी गई त्रुटि क्या है? PHP त्रुटि लॉग क्या दिखाता है?
— टेरो किलकेनन

मैंने त्रुटि लॉग जोड़ा
— eephyne

क्या यह फ़ाइल में /tmp/ydlw/pidमौजूद है /tmp? यदि नहीं, तो वह त्रुटि संदेश का कारण है।
— तेरो किल्केन जुएल

-rw-r - r-- 1 http 343 23 रस। 10:12 / tmp / ydlw / pid
— eephyne

आपका लिनक्स वितरण और PHP संस्करण क्या है और आपको PHP कहाँ से मिली?
— माइकल हैम्पटन

जवाबों:


31

मुझे पता चला कि क्यों, ठीक है, किसी ने मुझे वैश्विक संकेत दिया।

यह न तो php या tmpfs का दोष है। अपराधी व्यवस्थित था और उसकी सुरक्षा व्यवस्था PrivateTmp।

जो मैंने किया था, उसी अंक में पाने वालों के लिए , सिस्टम स्क्रिप्ट ( ) में सेवा php (और शायद कुछ अन्य) का PrivateTmpविकल्प है ।true/usr/lib/systemd/system

उस स्थिति में, एक नया /tmpबनाया जाता है और दूसरे से अलग किया जाता है। सेवा बंद करने के बाद अंदर के सभी डेटा हटा दिए जाते हैं।

यह एक सुरक्षा उपाय है क्योंकि /tmpइसमें बहुत अधिक संवेदनशील संकेत हो सकते हैं और php स्क्रिप्ट हमेशा सुरक्षित नहीं होती है।

इसे निष्क्रिय करने के लिए, बस स्क्रिप्ट को अंदर कॉपी करें /etc/systemd/system(अपडेट के बाद अपने परिवर्तनों की ओवरराइटिंग से बचने के लिए) और सेट PrivateTmpकरें false।

आप समान / tmp का उपयोग करके साझा करने के लिए दो या अधिक सेवाएँ भी सेट कर सकते हैं JoinsNamespaceOf।

अधिक जानकारी के लिए> man systemd.exec


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