FastCGI / PHP-FPM (उपयोगकर्ता "कोई भी") चलाते समय PHP सत्र फ़ोल्डर पर क्या अनुमतियाँ / स्वामित्व सेट करें?


17

मुझे कई स्क्रिप्ट चलने में समस्या हो रही है क्योंकि PHP-FPM मेरे सत्र फ़ोल्डर में नहीं लिख सकता है:

"2009/10/01 23:54:07 [त्रुटि] 17830 # 0: * 24 FastCGI ने stderr में भेजा:" PHP चेतावनी:
    अज्ञात: खुला (/ var / lib / php / session / sess_cskfq4godj4ka2a637i5lq41o5, O_RDWR)
    विफल: लाइन 0 पर अज्ञात में अनुमति अस्वीकृत (13)
PHP चेतावनी: अज्ञात: सत्र डेटा (फ़ाइलें) लिखने में विफल। कृप्या सत्यापित करें
    सत्र की वर्तमान सेटिंग। save_path सही है
    (/ var / lib / php / session) अज्ञात में लाइन 0 पर "अपस्ट्रीम पढ़ते समय"

जाहिर है कि यह एक अनुमति मुद्दा है; मेरे सत्र फ़ोल्डर का स्वामी / समूह वेबसर्वर का उपयोगकर्ता है, NGINX। PHP-FPM nobodyहालांकि चलता है , और इसलिए इसे nginx समूह में जोड़ना इतना तुच्छ नहीं है।

एक अस्थायी समाधान के लिए अनुमतियाँ सेट /var/lib/php/sessionकरना है 777- मुझे लगता है कि हालांकि "सर्वोत्तम अभ्यास" नहीं है।

जब आपको एक फ़ोल्डर में डेमन राइट एक्सेस का उपयोग करने की आवश्यकता होती है, तो यह सबसे अच्छा अभ्यास क्या है, लेकिन यह चल रहा है nobody?

जवाबों:


24

हमारे लिए सही अनुमति कहाँ

chown -R nobody:nogroup /var/lib/php/session

भले ही एनजीइंक्स उपयोगकर्ता के रूप में php-cgiचलता है nobody, वैसे ही चलता हैnginx


मेरे मामले में यह स्वामित्व / अनुमति का सवाल नहीं था। "3 निकालें;" session.save_path = "3; / var / lib / php / session" से
जॉन डोए

1
मुझे निम्न त्रुटि मिलती है: अमान्य समूह << कोई नहीं: nogroup >> :(
Pathros

मैं यह देखने में सक्षम था nobodyकि कोड की इस पंक्ति के साथ php चलाने वाला मेरा उपयोगकर्ता कौन है : <?php echo exec('whoami'); ?>(मेरे मामले में www-data) और उसके बाद यह सरल था जैसा कि अभी लिखा है chown -R www-data:www-data /var/lib/php/sessionsयह एक रेखांकित Google परिणाम है क्योंकि यह एकमात्र उत्तर था जिसने इसकी मदद की मुझे खोज के घंटे के बाद! धन्यवाद!
दिमित्र

9

यदि आप nginx का उपयोग करते हैं, तो सिस्टम अद्यतन को चलाते समय आप इसमें दौड़ सकते हैं।

कभी-कभी जब आप सिस्टम को अपडेट करते हैं, तो उस समूह /var/lib/php/sessionको अपाचे में बदल दिया जाता है।

sudo chgrp nginx /var/lib/php/*777 की अनुमतियों को सेट करने के बजाय निष्पादित करने का प्रयास करें जो एक बुरा अभ्यास है।

वह मेरे लिए कम से कम काम आए।


1
इसे स्वीकृत उत्तर के रूप में चिह्नित किया जाना चाहिए।
युडा प्रवीरा

3

/etc/php.ini सेशन का उपयोग करें । Save_path निर्देश

एक अस्थायी समाधान 777 के लिए / var / lib / php / सत्र की अनुमति निर्धारित करना है - मुझे लगता है कि हालांकि "सर्वोत्तम अभ्यास" नहीं है।

"यदि आप इस सेट को विश्व-पठनीय निर्देशिका में छोड़ते हैं, तो सर्वर के अन्य उपयोगकर्ता उस निर्देशिका में फ़ाइलों की सूची प्राप्त करके सत्रों को हाईजैक करने में सक्षम हो सकते हैं।"


क्षमा करें, मुझे लगता है कि मैं स्पष्ट नहीं हो सकता था: session.save_path पहले से ही / var / lib / php / session पर सेट है। समस्या यह है कि मैं यह पता लगाने की अनुमति नहीं दे सकता कि PHP-FPM को इसे लिखने के लिए सक्षम करने के साथ-साथ इसे सुरक्षित रखने के लिए सत्र पथ निर्देशिका को निर्दिष्ट करने के लिए क्या अनुमतियाँ और स्वामित्व हैं। स्वामी / समूह "nginx" (वेब ​​सर्वर मैं चला रहा हूँ) के रूप में निर्देशिका सेट कर रहा हूँ और अनुमतियाँ 755 चाल करने के लिए प्रतीत नहीं होता है
प्रोफेसर फ्रिंक

4
1. एक ही उपयोगकर्ता का उपयोग करें: nginx और php-fpm ( nginx.confया तो के माध्यम से php-fpm.conf) के लिए समूह , इसलिए आप इस निर्देशिका को 700 रख सकते हैं। 2. उपयोग chown -R nginx:nobody /var/lib/php/session && chmod -R 770 /var/lib/php/sessionकरें मुझे लगता है कि nginx और php-fpm दोनों इसका उपयोग कर सकते हैं
SaveTheRbtz

2
मैं पुष्टि कर सकता हूँ कि nginx का उपयोग करना: कोई भी (या nginx: nogroup कुछ परिस्थितियों में) काम करता है। यदि यह संभव है, तो मैं SaveTheRbtz 'विकल्प 1 की ओर झुकूंगा, हालांकि।
माइकल जॉनसन

3

मुझे प्रत्येक php-fpm पूल के लिए / var / lib / php / सत्र में 0700 अधिकारों के साथ फ़ोल्डर बनाना था।

इस फ़ोल्डर का स्वामी php-fpm पूल से उपयोगकर्ता और समूह है।

और / var / lib / php / सत्र अब 0777।

मुझे लगता है कि यह तरीका सबसे सुरक्षित है। केवल php-fpm पूल उपयोगकर्ता इस सत्र को देखेंगे।


1

मुझे भी यही समस्या थी और मैंने इसे हल किया। मैं गया /tmp(यहीं मेरी ses_ * फाइलें हैं) और उन सभी को हटा दिया। उसके बाद सब ठीक था।

पास के रूप में मैं बता सकता है कि सिस्टम पुरानी बंद फाइलों पर लिखने की कोशिश कर रहा था।

मेरे साथ खेलने के बाद समस्या उत्पन्न हुई php.ini। मैंने अपने जीवन से कुछ साल खो दिए लेकिन आखिरकार मुझे इसका हल मिल गया।


1

सही तरीके से सत्र फ़ोल्डर के स्वामित्व को nginx में बदलना चाहिए। हालाँकि, PHP-FPM डिफ़ॉल्ट रूप से nginx उपयोगकर्ता का उपयोग करके नहीं चलता है। यह डिफ़ॉल्ट रूप से अपाचे का उपयोग करता है।

इसके साथ ही, आपको उस उपयोगकर्ता को बदलना होगा जो PHP-FPM द्वारा उपयोग किया जाता है /etc/php-fpm.d/www.conf

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

PHP-FPM को पुनरारंभ करें और आपको जाने के लिए अच्छा होना चाहिए।

service php-fpm restart


PHP सत्र पथ स्थान के /etc/php.iniअंतर्गत पाया जा सकता है session.save_path/var/lib/php/sessionडिफ़ॉल्ट है।

Php सत्र फ़ोल्डर के स्वामित्व और समूह को अद्यतन करने के लिए आदेश

chown -R nginx:nginx /var/lib/php/session

और अगर आप की chmod साथ भी जाने के लिए अच्छा होना चाहिए 700


1

निर्देशिका / var / lib / php / सत्र में चिपचिपा बिट अनुमतियाँ होनी चाहिए।

sudo chmod 1773 /var/lib/php/sessions

ls -al /var/lib/php/
drwxr-xr-x  4 root root   .
drwxr-xr-x 51 root root   ..
drwxr-xr-x  3 root root   modules
drwx-wx-wt  2 root root   sessions

0

@ जूडर उत्तर के आधार पर , इसे काम करने के लिए मुझे किसी को भी पढ़ने और लिखने की अनुमति देने के लिए निम्न कमांड जोड़ना होगा और नोग्रुप : chmod दिए गए फ़ोल्डर पर अनुमतियों को बदल देगा -R फ़ोल्डर और फ़ाइलों के लिए एक ही अनुमति लागू करेगा लिखित अनुमति के लिए पढ़ने की अनुमति डब्ल्यू के लिए समूह आर के लिए उपयोगकर्ता जी के लिए दिए गए फ़ोल्डर यू के भीतर

chown -R nobody:nogroup /var/lib/php/session

sudo chmod -R ug+rw /var/lib/php/sessions






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