Laravel के लिए फ़ाइल अनुमतियां कैसे सेट करें?


233

मैं अपाचे वेब सर्वर का उपयोग कर रहा हूं जिसका मालिक सेट है _www:_www। मैं कभी नहीं जानता कि फ़ाइल अनुमतियों के साथ सबसे अच्छा अभ्यास क्या है, उदाहरण के लिए जब मैं नया लारवेल 5 प्रोजेक्ट बनाता हूं।

Laravel 5 को राइट /storageकरने के लिए फ़ोल्डर की आवश्यकता होती है । मुझे इसे काम करने के लिए बहुत सारे अलग-अलग दृष्टिकोण मिले और मैं आमतौर पर इसे बार-बार 777चामोड बनाने के साथ समाप्त करता हूं । मुझे पता है कि यह सबसे अच्छा विचार नहीं है।

आधिकारिक डॉक्टर कहते हैं:

लारवेल को कॉन्फ़िगर करने के लिए कुछ अनुमतियों की आवश्यकता हो सकती है: भीतर फ़ोल्डर storageऔर vendorवेब सर्वर द्वारा लिखने की पहुंच की आवश्यकता होती है।

क्या इसका मतलब यह है कि वेब सर्वर को स्वयं storageऔर vendorकेवल अपनी वर्तमान सामग्री तक ही फ़ोल्डर्स की पहुंच की आवश्यकता है ?

मैं मानता हूं कि जो बेहतर है, वह अनुमति के बजाय मालिक को बदल रहा है । मैंने सभी Laravel की फ़ाइलों की अनुमतियों को पुनरावर्ती रूप से बदल दिया है _www:_wwwऔर इससे साइट सही ढंग से काम करती है, जैसे कि मैंने chmod को बदल दिया है 777। समस्या यह है कि अब मेरा टेक्स्ट एडिटर मुझसे हर बार पासवर्ड मांगता है जो मैं किसी भी फाइल को सहेजना चाहता हूं और ऐसा ही होता है अगर मैं फाइंडर में कुछ भी बदलने की कोशिश करता हूं, जैसे कि उदाहरण के लिए फाइल कॉपी करना।

इन समस्याओं को हल करने के लिए सही तरीका क्या है?

  1. परिवर्तन chmod
  2. वेब सर्वर से मेल खाने के लिए फाइलों के मालिक को बदलें और शायद पाठ संपादक (और खोजक?) को पासवर्ड के लिए पूछना छोड़ दें, या उनका उपयोग करें? sudo
  3. ओएस उपयोगकर्ता से मिलान करने के लिए वेब सर्वर के मालिक को बदलें (मुझे परिणाम नहीं पता)
  4. कुछ और

4
मुझे लगता 777है कि बहुत अधिक स्वतंत्रता है, क्योंकि इसमें सभी के लिए सभी अनुमतियां शामिल हैं।
रोबो रोबोक

Laravel डॉक्स से: भीतर निर्देशिकाएँ storageऔर bootstrap/cacheनिर्देशिका अपने वेब सर्वर द्वारा लिखने योग्य होना चाहिए
joshuamabina

1
fcgi का उपयोग करें और आप सभी के लिए 755/644 (incl। सार्वजनिक / भंडारण) कर सकते हैं
Jeffz

@ जेयूवी सहमत है कि हम सवाल को सर्वरफॉल्ट पर रख सकते हैं बजाय इसे होल्ड पर रखने के?
wp78de

जवाबों:


587

इस चर्चा को देखने वाले किसी भी व्यक्ति के लिए स्पष्ट रूप से बताने के लिए .... यदि आप अपने किसी भी फ़ोल्डर को 777 अनुमतियाँ देते हैं, तो आप किसी को भी उस निर्देशिका में किसी भी फ़ाइल को पढ़ने, लिखने और निष्पादित करने की अनुमति दे रहे हैं .... इसका मतलब यह है कि आपने दिया है। कोई भी (पूरी दुनिया में कोई भी हैकर या दुर्भावनापूर्ण व्यक्ति) किसी भी फ़ाइल, वायरस या किसी अन्य फ़ाइल को अपलोड करने की अनुमति देता है, और उस फ़ाइल को निष्पादित नहीं करता है ...

यदि आप 777 के लिए अपने फ़ोल्डर के पैमानों को सेट कर रहे हैं, तो आप अपने डिएक्ट्री को प्राप्त करने के लिए किसी को भी अपने सर्वर को देख सकते हैं। पर्याप्त रूप से स्पष्ट??? :)

मूल रूप से आपके स्वामित्व और अनुमतियां सेट करने के दो तरीके हैं। या तो आप खुद को स्वामित्व देते हैं या आप वेबसर्वर को सभी फाइलों का मालिक बनाते हैं।

मालिक के रूप में वेबसर्वर (जिस तरह से ज्यादातर लोग इसे करते हैं, और लारवेल डॉक का तरीका है):

www-data (यह कुछ और हो सकता है) संभालने वाला आपका वेबसर्वर उपयोगकर्ता है।

sudo chown -R www-data: www-data / path / to / your / laravel / root / निर्देशिका

यदि आप ऐसा करते हैं, तो वेबसर्वर सभी फ़ाइलों का मालिक है, और समूह भी है, और आपको फ़ाइलों को अपलोड करने या FTP के माध्यम से फ़ाइलों के साथ काम करने में कुछ समस्याएँ होंगी, क्योंकि आपका एफ़टीपी क्लाइंट आपके वेबसर्वर के रूप में लॉग इन किया जाएगा, इसलिए नहीं वेबसर्वर उपयोगकर्ता समूह के लिए आपका उपयोगकर्ता:

सूद usermod -a -G www-data ubuntu

बेशक, यह मानता है कि आपका वेबसर्वर www-data (होमस्टेड डिफ़ॉल्ट) के रूप में चल रहा है, और आपका उपयोगकर्ता ubuntu है (यह योनि है यदि आप होमस्टेड का उपयोग कर रहे हैं)।

फिर आप अपने सभी निर्देशिकाओं को 755 और अपनी फ़ाइलों को 644 पर सेट करें ... फ़ाइल अनुमतियाँ सेट करें

सूदो / पाथ / / to / your / laravel / root / directory -type f -exec chmod 644 {} \;    

SET निर्देशिका अनुमतियाँ

सूदो / पाथ / / to / your / laravel / root / directory -type d -exec chmod 755 {} \;

स्वामी के रूप में आपका उपयोगकर्ता

मैं सभी निर्देशिकाओं और फ़ाइलों का स्वामी हूं (यह सब कुछ बहुत आसान काम करता है), इसलिए मैं करता हूं:

sudo chown -R my-user: www-data / path / to / your / laravel / root / निर्देशिका

फिर मैं अपने और वेबसर्वर दोनों को अनुमति देता हूं:

sudo find / path / to / your / laravel / root / directory -type f -exec chmod 664 {}};    
sudo find / path / to / your / laravel / root / directory -type d -exec chmod 775 {} \;

फिर वेबसर्वर को स्टोरेज और कैश को पढ़ने और लिखने का अधिकार दें

जिस भी तरीके से आप इसे सेट करते हैं, तो आपको स्टोरेज, कैश और किसी भी अन्य निर्देशिका के लिए वेबसर्वर को पढ़ने और लिखने की अनुमति देना होगा।

sudo chgrp -R www-data storage बूटस्ट्रैप / कैश
sudo chmod -R ug + rwx स्टोरेज बूटस्ट्रैप / कैश

अब, आप सुरक्षित हैं और आपकी वेबसाइट काम करती है, और आप फाइलों के साथ काफी आसानी से काम कर सकते हैं


4
महान उदाहरण, अगर कोई www-data उपयोगकर्ता नहीं है, तो Apache का उपयोग करें: www-data (कुछ डिस्ट्रोस पर) के स्थान पर Apache
Denis Solakovic

53
मुझे लगता है कि लोग इस anyoneअवधारणा को बहुत गलत समझते हैं । लिनक्स के anyoneध्वज का अर्थ किसी भी व्यक्ति से है, किसी व्यक्ति से नहीं। आपको अभी भी सर्वर एक्सेस की आवश्यकता है।
मार्को औरेलियो देलेउ

3
@ andreshg112 पहला www-डेटा उपयोगकर्ता का नाम है, और दूसरा www-डेटा समूह का नाम है। तो इसका मतलब है कि मालिक अपाचे है और (यह-समूह) अपाचे। Www-data का उपयोग करें: www-data या अपने उपयोगकर्ता को उस समूह में जोड़ें। (CLI: useradd -G {group-name} username), और इससे आप उपयोगकर्ता नाम को चेस कर सकते हैं: www-group
Denis Solakovic

2
@fs_tigre मुझे नहीं लगता है कि सुरक्षा के लिए सभी में बहुत अंतर है ... सिवाय इसके कि मुझे लगता है कि एक के बदले पासवर्ड का अनुमान लगाने के लिए दो उपयोगकर्ता हैं, और निश्चित रूप से मैं अपने उपयोगकर्ता खाते के साथ हर समय लॉग इन करता हूं, इसलिए यदि मैंने इसे असुरक्षित तरीके से किया (सामान्य एफ़टीपी और उदाहरण के लिए पासवर्ड का उपयोग करके) यह साइट से समझौता कर सकता है, लेकिन मैं केवल पुट्टी और एसएसएच के साथ लॉगिन करता हूं, और जब मैं एफ़टीपी का उपयोग करता हूं तो यह एसएफटीपी है, इसलिए कोई समस्या नहीं है। बाशी द्वारा सुझाए गए आदेशों की सिफारिश की जाती है क्योंकि वे चिपचिपा बिट सेट करते हैं, इसलिए यदि आपका वेबसर्वर उपनिर्देशिका बनाता है तो उनके पास माता
5'17 bgies

3
पहली विधि में, क्या उपयोगकर्ता तब भी फाइलें अपलोड नहीं कर पाएगा, जब आपने writeसमूह को अनुमति नहीं दी थी?
फहमी

44

storageऔर vendorफ़ोल्डरों के लिए अनुमतियाँ 775स्पष्ट सुरक्षा कारणों के लिए, रहना चाहिए ।

हालाँकि, आपके कंप्यूटर और आपके सर्वर अपाचे दोनों को इन फ़ोल्डरों में लिखने में सक्षम होना चाहिए। Ex: जब आप जैसे कमांड चलाते हैं php artisan, वैसे ही आपके कंप्यूटर को लॉग फाइल में लिखना होता है storage

आपको अपाचे को फ़ोल्डर्स के स्वामित्व देने की ज़रूरत है:

sudo chown -R www-data:www-data /path/to/your/project/vendor
sudo chown -R www-data:www-data /path/to/your/project/storage

फिर आपको अपना कंप्यूटर usernameउस समूह से जोड़ना होगा, जिसमें सर्वर अपाचे का है। इस तरह :

sudo usermod -a -G www-data userName

नोट: सबसे अक्सर, groupNameहै www-dataलेकिन आपके मामले में, यह के साथ बदलें_www


10
+1 मुझे यह तरीका पसंद है। लेकिन मेरा मानना ​​है कि chownकमांडों में -R ध्वज शामिल होना चाहिए। इसके अलावा, लारवेल 5.1 और 5.2 में, विक्रेता निर्देशिका के बजाय, आपको बूटस्ट्रैप / कैश निर्देशिका तक पहुंच देनी चाहिए।
जेसन व्हीलर

क्या यह परीक्षण करने का कोई तरीका है कि क्या यह ठीक काम करेगा? मेरा मतलब है कि यदि स्टोरेज / लॉग्स में नई लॉग फ़ाइल बनाई गई है, जिसकी सही अनुमति होगी तो मैं कैसे जांच सकता हूं?
चौधरी वकास

20

Laravel अनुप्रयोगों के लिए अनुमतियां सेट करते समय हमने कई किनारे मामलों में भाग लिया है। हम deployLaravel एप्लिकेशन फ़ोल्डर के स्वामी के लिए एक अलग उपयोगकर्ता खाता ( ) बनाते हैं और CLI से Laravel कमांड निष्पादित करते हैं, और इसके तहत वेब सर्वर चलाते हैं www-data। इसका एक कारण यह है कि लॉग फ़ाइल (ओं) के स्वामित्व में हो सकती है www-dataया deploy, इस पर निर्भर करता है कि पहले लॉग फ़ाइल में किसने लिखा था, जाहिर है कि भविष्य में दूसरे उपयोगकर्ता को इसे लिखने से रोका जा सकता है।

मैंने पाया है कि लिनक्स एसीएल का उपयोग करने के लिए एकमात्र समझदार और सुरक्षित समाधान है। इस समाधान का लक्ष्य है:

  1. उस उपयोगकर्ता को अनुमति देने के लिए जो लारवेल एप्लिकेशन कोड तक पहुँच पढ़ता है और लिखता है (हम उपयोग किए गए उपयोगकर्ता का उपयोग करते हैं deploy)।
  2. www-dataउपयोगकर्ता को Laravel एप्लिकेशन कोड तक पहुंच पढ़ने की अनुमति देने के लिए , लेकिन पहुंच नहीं लिखें।
  3. किसी अन्य उपयोगकर्ता को Laravel एप्लिकेशन कोड / डेटा तक पहुंचने से रोकने के लिए।
  4. अनुमति देने के लिए दोनों www-dataउपयोगकर्ता और उपयोगकर्ता आवेदन ( deployभंडारण फ़ोल्डर में) लेखन पहुँच, चाहे उपयोगकर्ता फ़ाइल का मालिक है (दोनों तो deployऔर www-dataउदाहरण के लिए एक ही लॉग फ़ाइल को लिख सकते हैं)।

हम इसे इस प्रकार पूरा करते हैं:

  1. application/फ़ोल्डर के भीतर सभी फाइलें डिफ़ॉल्ट umask के साथ बनाई जाती हैं 0022, जिसके परिणामस्वरूप फ़ोल्डर में drwxr-xr-xअनुमतियाँ और फ़ाइलें होती हैं -rw-r--r--
  2. sudo chown -R deploy:deploy application/(या बस deployउपयोगकर्ता के रूप में अपने आवेदन को तैनात करें, जो हम करते हैं)।
  3. chgrp www-data application/देने के लिए www-dataआवेदन करने के लिए समूह का उपयोग कर सकते।
  4. chmod 750 application/deployउपयोगकर्ता को पढ़ने / लिखने की अनुमति देने के लिए , www-dataउपयोगकर्ता केवल पढ़ने के लिए, और किसी भी अन्य उपयोगकर्ताओं के लिए सभी अनुमतियों को हटाने के लिए।
  5. setfacl -Rdm u:www-data:rwx,u:deploy:rwx application/storage/storage/फ़ोल्डर और सभी सबफ़ोल्डर पर डिफ़ॉल्ट अनुमतियाँ सेट करने के लिए । भंडारण फ़ोल्डर में बनाई गई कोई भी नई फ़ोल्डर / फाइलें इन अनुमतियों ( rwxदोनों के लिए ) www-dataऔर इनहेरिट करेंगी deploy
  6. setfacl -Rm u:www-data:rwX,u:deploy:rwX application/storage/ उपरोक्त अनुमतियों को किसी भी मौजूदा फाइल / फोल्डर पर सेट करने के लिए।

15

निर्देशिका के मालिक समूह के भीतर किसी भी उपयोगकर्ता के लिए पढ़ने / लिखने / निष्पादित करने में सक्षम करने के लिए अपने प्रोजेक्ट फ़ोल्डर के लिए अनुमतियाँ बदलें (जो आपके मामले में है _www):

chmod -R 775 /path/to/your/project

फिर अपने OS X उपयोगकर्ता नाम को उस _wwwसमूह में जोड़ें जिससे वह निर्देशिका तक पहुंच सके:

sudo dseditgroup -o edit -a yourusername -t user _www

जब मैं dseditgroupआप द्वारा प्रदान की, मैं एक त्रुटि हो रही है: Username and password must be provided.
रोबो रोबोक

मेरी गलती, आपको उस उपयोगकर्ता को चलाने की आवश्यकता है जिसके पास उचित अनुमति है, इसलिए अभी sudoशुरुआत में जोड़ें ।
बोगदान

तो क्या मुझे उन फ़ाइलों के स्वामी को _www:_wwwया myuser:_wwwसाथ ही बदलना होगा ?
रोबो रोबोक

आप इसे छोड़ सकते हैं _www:_www, क्योंकि 775 का मतलब है कि समूह के किसी भी उपयोगकर्ता _wwwको उस फ़ोल्डर में पढ़ने / लिखने / एक्सपेक्ट करने की पूर्ण अनुमति होगी, और आपने सिर्फ अपना उपयोगकर्ता नाम उस समूह में जोड़ा था।
बोगदान

क्या आप मुझे एक बात बता सकते हैं? इसका क्या मतलब है chown myuser:_www? मुझे पता है कि पहला उपयोगकर्ता है और दूसरा समूह है, लेकिन क्या इसका अर्थ है "यह उपयोगकर्ता और इस समूह से कोई भी व्यक्ति" या "यह उपयोगकर्ता केवल इस समूह के लिए ही सही है"?
रोबो रोबोक

8

जैसा कि पहले से ही पोस्ट किया गया है

आपको अपाचे को फ़ोल्डर्स के स्वामित्व देने की ज़रूरत है:

लेकिन मैं जोड़ा आर के लिए chown आदेश: sudo chown -R www-data:www-data /path/to/your/project/vendor sudo chown -R www-data:www-data /path/to/your/project/storage


3
हमें वेंडर निर्देशिका को अनुमति क्यों देनी होगी? भंडारण से समझ में आता है, लॉग फाइल आदि लिखने के लिए, लेकिन विक्रेता? क्यों?
अली हारिस

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

मैक पर त्रुटि: chown: www-data: अवैध समूह का नाम
सुनील कुमार


7

अधिकांश फ़ोल्डर्स सामान्य होना चाहिए "755" और फाइलें, "644"

Laravel को वेब सर्वर उपयोगकर्ता के लिए कुछ फ़ोल्डर्स को लिखने योग्य बनाने की आवश्यकता होती है। आप इस कमांड का उपयोग यूनिक्स आधारित ओएस पर कर सकते हैं।

sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

6

Laravel 5.4 डॉक्स कहते हैं:

लारवेल को स्थापित करने के बाद, आपको कुछ अनुमतियों को कॉन्फ़िगर करने की आवश्यकता हो सकती है। भीतर निर्देशिकाएँ storageऔर bootstrap/cacheनिर्देशिका अपने वेब सर्वर द्वारा लिखने योग्य होना चाहिए या Laravel नहीं चलेंगे। यदि आप होमस्टेड वर्चुअल मशीन का उपयोग कर रहे हैं, तो ये अनुमतियाँ पहले से ही सेट होनी चाहिए।

इस पृष्ठ पर बहुत सारे उत्तर हैं जो 777अनुमतियों का उपयोग करते हुए उल्लेख करते हैं । ऐसा मत करो। आप खुद को हैकर्स के सामने उजागर करेंगे ।

इसके बजाय, 755 (या अधिक प्रतिबंधात्मक) की अनुमतियों को सेट करने के तरीके के बारे में दूसरों के सुझावों का पालन करें। आपको यह पता लगाने की आवश्यकता हो सकती है कि आपका एप्लिकेशन किस उपयोगकर्ता whoamiटर्मिनल में चल रहा है और फिर कुछ निर्देशिकाओं के स्वामित्व को बदलकर उपयोग कर रहा है chown -R

यदि आपके पास उपयोग करने की अनुमति नहीं है sudoतो कई अन्य उत्तरों की आवश्यकता है ...

आपका सर्वर संभवतः एक साझा होस्ट है जैसे Cloudways।

(मेरे मामले में, मैंने अपना Laravel एप्लिकेशन मेरे दूसरे क्लाउडवे सर्वर में क्लोन किया था, और यह पूरी तरह से काम नहीं कर रहा था क्योंकि storageऔर bootstrap/cacheनिर्देशिकाओं की अनुमतियों को गड़बड़ कर दिया गया था।)

मुझे उपयोग करने की आवश्यकता है:

Cloudways Platform > Server > Application Settings > Reset Permission

तब मैं php artisan cache:clearटर्मिनल में दौड़ सकता था ।


6

संगीतकार से जोड़ें। json

"scripts": {
    "post-install-cmd": [
      "chgrp -R www-data storage bootstrap/cache",
      "chmod -R ug+rwx storage bootstrap/cache"
    ]
}

उपरांत composer install


2
यह एक बुरा जवाब है। यदि आपने वेबसर्वर को सही तरीके से कॉन्फ़िगर किया है, तो आपको कभी भी किसी भी फ़ोल्डर के लिए 777 का उपयोग करने की आवश्यकता नहीं होनी चाहिए। किसी फ़ाइल को अपलोड करने के लिए किसी भी हैकर के लिए 777 का उपयोग करने से आपका सर्वर खुल जाता है, और यदि वे जानते हैं कि फ़ोल्डर मौजूद है, तो फ़ाइल को निष्पादित करें।
म्बोज़वुड

2
ठीक है। आप क्या पेशकश कर रहे हैं?
Davron Achilov

और यदि हां, तो क्या यह सही होगा? chown -R $ USER: www-data storage, chown -R $ USER: www-data बूटस्ट्रैप / कैश
Davron Achilov

सही उत्तर देखें, इसमें वे सभी आवश्यक जानकारी हैं जो आप पूरी तरह से पोस्ट-अपडेट में डाल सकते हैं :)
mobzwood

4

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

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

-rw-r--r-- 1 www-data www-data 1005 Dec  6 09:40 969370d7664df9c5206b90cd7c2c79c2

यदि आप "कारीगर सेवा" चलाते हैं और एक अलग पृष्ठ पर पहुंचते हैं, तो आपको अलग-अलग अनुमतियां मिलेंगी क्योंकि CLI PHP अपाचे से अलग व्यवहार करती है:

-rw-rw-r-- 1 user     www-data 16191 Dec  6 09:48 2a1683fac0674d6f8b0b54cbc8579f8e

अपने आप में यह कोई बड़ी बात नहीं है क्योंकि आप उत्पादन में ऐसा नहीं करेंगे। लेकिन अगर अपाचे एक फाइल बनाता है जिसे बाद में उपयोगकर्ता द्वारा लिखा जाना चाहिए, तो यह विफल हो जाएगा। और यह लॉग-इन उपयोगकर्ता और कारीगर का उपयोग करते समय कैश फ़ाइलों, कैश्ड दृश्यों और लॉग पर लागू हो सकता है । एक मुखर उदाहरण "कारीगर कैश: क्लीयर" है जो www-data: www-data 644: किसी भी कैश फ़ाइलों को हटाने में विफल रहेगा।

इसे www-डेटा के रूप में कारीगर कमांड चलाकर आंशिक रूप से कम किया जा सकता है, इसलिए आप सब कुछ जैसे / स्क्रिप्टिंग कर रहे हैं:

sudo -u www-data php artisan cache:clear

या आप इससे होने वाली थकान से बच जाएंगे और इसे अपने .bash_aliases में जोड़ देंगे:

alias art='sudo -u www-data php artisan'

यह काफी अच्छा है और किसी भी तरह से सुरक्षा को प्रभावित नहीं कर रहा है। लेकिन डेवलपमेंट मशीनों पर, रनिंग टेस्टिंग और सैनिटेशन स्क्रिप्ट्स को यह अनकही बना देता है, जब तक कि आप phpunit को चलाने के लिए www sudo -u www-data ’का उपयोग करने के लिए एलियास को स्थापित नहीं करना चाहते हैं और बाकी सब कुछ जो आप अपने बिल्ड की जांच करते हैं, जिससे फाइलें बन सकती हैं।

इसका उपाय यह है कि बेल्स सलाह के दूसरे भाग का पालन करें, और निम्नलिखित को / etc / apache2 / envvars में जोड़ें, और पुनः आरंभ करें (पुनः लोड नहीं करें) Apache:

umask 002

यह अपाचे को डिफ़ॉल्ट रूप से 664 फाइलें बनाने के लिए मजबूर करेगा। अपने आप में, यह एक सुरक्षा जोखिम पेश कर सकता है। हालाँकि, लारवेल वातावरण पर ज्यादातर यहाँ चर्चा की जा रही है (होमस्टेड, वैग्रैंट, उबंटू) वेब सर्वर समूह www-डेटा के तहत उपयोगकर्ता www-data के रूप में चलता है। इसलिए यदि आप मनमाने ढंग से www-data समूह में शामिल होने की अनुमति नहीं देते हैं, तो कोई अतिरिक्त जोखिम नहीं होना चाहिए। यदि कोई व्यक्ति वेबसर्वर से बाहर निकलने का प्रबंधन करता है, तो उनके पास www-डेटा एक्सेस स्तर वैसे भी कुछ भी नहीं खोता है (हालांकि यह सुरक्षा से संबंधित होने का सबसे अच्छा रवैया नहीं है)। इसलिए उत्पादन पर यह अपेक्षाकृत सुरक्षित है, और एकल-उपयोगकर्ता विकास मशीन पर, यह सिर्फ एक मुद्दा नहीं है।

अंततः जैसा कि आपका उपयोगकर्ता www-data समूह में है, और इन फ़ाइलों वाली सभी निर्देशिकाएं g + s हैं (फ़ाइल हमेशा मूल निर्देशिका के समूह के तहत बनाई गई है), उपयोगकर्ता द्वारा बनाई गई कुछ भी या www-डेटा r / होगी दूसरे के लिए डब्ल्यू।

और यही यहाँ उद्देश्य है।

संपादित करें

आगे अनुमतियों को स्थापित करने के लिए उपरोक्त दृष्टिकोण की जांच करने पर, यह अभी भी काफी अच्छा लग रहा है, लेकिन कुछ ट्विक्स मदद कर सकते हैं:

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

cd /var/www/projectroot
sudo chmod 750 ./
sudo chgrp www-data ./

पहली चीज़ जो हम करते हैं, वह सभी के लिए पहुँच को अवरुद्ध करती है, और समूह को www-data बनाती है। केवल www-डेटा के स्वामी और सदस्य ही निर्देशिका तक पहुँच सकते हैं।

sudo chmod 2775 bootstrap/cache
sudo chgrp -R www-data bootstrap/cache

वेबसर्वर को Services.json और compiled.php बनाने की अनुमति देने के लिए, जैसा कि आधिकारिक Laravel इंस्टॉलेशन गाइड द्वारा सुझाया गया है। समूह चिपचिपा सा सेट करने का मतलब है कि ये www-data के समूह के साथ निर्माता के स्वामित्व में होंगे।

find storage -type d -exec sudo chmod 2775 {} \;
find storage -type f -exec sudo chmod 664 {} \;
sudo chgrp -R www-data storage

हम कैश, लॉग, सत्र और फ़ाइलों को देखने की अनुमति देने के लिए भंडारण फ़ोल्डर के साथ एक ही काम करते हैं। हम निर्देशिकाओं और फ़ाइलों के लिए निर्देशिका अनुमतियों को स्पष्ट रूप से सेट करने के लिए खोज का उपयोग करते हैं। हमें बूटस्ट्रैप / कैश में ऐसा करने की आवश्यकता नहीं थी क्योंकि वहां कोई भी उप-निर्देशिका नहीं है (सामान्य रूप से)।

आपको किसी भी निष्पादन योग्य झंडे को फिर से लगाने, और विक्रेता को हटाने की आवश्यकता हो सकती है / * और फ़ोपुनिट एट अल के लिए लिंक को फिर से बनाने के लिए संगीतकार निर्भरता को पुनर्स्थापित करना, जैसे:

chmod +x .git/hooks/*
rm vendor/*
composer install -o

बस। ऊपर बताए गए अपाचे के लिए umask को छोड़कर, www-डेटा द्वारा पूरे प्रॉजेक्ट को लिखने योग्य बनाने के बिना यह आवश्यक है, जो कि अन्य समाधानों के साथ होता है। इसलिए यह इस तरह से सुरक्षित है कि www-data के रूप में चल रहे एक घुसपैठिए के पास अधिक सीमित लेखन पहुंच है।

अंत संपादित करें

Systemd के लिए परिवर्तन

यह php-fpm के उपयोग पर लागू होता है, लेकिन शायद दूसरों के लिए भी।

मानक systemd सेवा को ओवरराइड करने की आवश्यकता होती है, ओवरराइड.कॉन्फ़ फ़ाइल में umask सेट, और सेवा पुनरारंभ होती है:

sudo systemctl edit php7.0-fpm.service
Use:
    [Service]
    UMask=0002
Then:
sudo systemctl daemon-reload
sudo systemctl restart php7.0-fpm.service

3

यह मेरे लिए काम किया:

cd [..LARAVEL PROJECT ROOT]
sudo find . -type f -exec chmod 644 {} \;
sudo find . -type d -exec chmod 755 {} \;
sudo chmod -R 777 ./storage
sudo chmod -R 777 ./bootstrap/cache/

यह क्या करता है:

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

नोट: हो सकता है कि आप सूडो उपसर्ग के साथ ऐसा करने या करने की आवश्यकता नहीं कर सकते। यह आपके उपयोगकर्ता की अनुमति, समूह आदि पर निर्भर करता है ...


2

मैंने परियोजनाओं को स्थापित करने के कुछ दर्द को कम करने के लिए अपनी खुद की स्क्रिप्ट लिखने का फैसला किया।

अपने प्रोजेक्ट रूट के अंदर निम्नलिखित चलाएँ:

wget -qO- https://raw.githubusercontent.com/defaye/bootstrap-laravel/master/bootstrap.sh | sh

बूटस्ट्रैपिंग के पूरा होने की प्रतीक्षा करें और आप जाने के लिए अच्छे हैं।

उपयोग से पहले स्क्रिप्ट की समीक्षा करें।


2

मैंने EC2 उदाहरण पर लार्वा स्थापित किया है और अनुमति की त्रुटि को ठीक करने के लिए 3 दिन बिताए हैं और अंतिम समय पर इसे ठीक कर दिया है। इसलिए मैं इस अनुभव को अन्य लोगों के साथ साझा करना चाहता हूं।

  1. उपयोगकर्ता की समस्या जब मैंने ec2 उदाहरण में लॉग इन किया, तो मेरा उपयोगकर्ता नाम ec2-user है और usergroup ec2-user है। और वेबसाइट httpd उपयोगकर्ता के तहत काम करती है: अपाचे: अपाचे इसलिए हमें अपाचे की अनुमति निर्धारित करनी चाहिए।

  2. फ़ोल्डर और फ़ाइल अनुमति ए। फ़ोल्डर की संरचना पहले, आपको यह सुनिश्चित करना चाहिए कि आपके पास इस तरह की फ़ोल्डर संरचना है जैसे भंडारण के तहत

    भंडारण

    • ढांचा
      • कैश
      • सत्र
      • विचारों
    • लॉग आपके द्वारा उपयोग किए जाने वाले लार्वा संस्करण के अनुसार फ़ोल्डर संरचना भिन्न हो सकती है। मेरा लार्वा संस्करण 5.2 है और आप अपने संस्करण के अनुसार उपयुक्त संरचना पा सकते हैं।

B. अनुमति पहले, मुझे फ़ाइल_पुट_कंट हटाने के लिए भंडारण के तहत 777 सेट करने के निर्देश मिलते हैं: स्ट्रीम त्रुटि को खोलने में विफल। इसलिए मैंने chmod -R 777 स्टोरेज को स्टोर करने के लिए 777 सेटअप की अनुमति दी लेकिन त्रुटि को ठीक नहीं किया गया। यहां, आपको एक पर विचार करना चाहिए: जो भंडारण / सत्र और विचारों के लिए फाइल लिखते हैं। यह ec2-user नहीं है, लेकिन अपाचे है। हा सही है। "अपाचे" उपयोगकर्ता सत्र और दृश्य फ़ोल्डर के लिए फ़ाइल (सत्र फ़ाइल, संकलित दृश्य फ़ाइल) लिखता है। तो आपको इन फोल्डर को अनुमति लिखने के लिए अपाचे देना चाहिए। डिफ़ॉल्ट रूप से: SELinux का कहना है कि / var / www फ़ोल्डर को केवल अपाचे डीमन द्वारा पढ़ा जाना चाहिए।

तो इसके लिए, हम सेलिनक्स को 0: सेटेनफोर्स 0 के रूप में सेट कर सकते हैं

यह समस्या को अस्थायी रूप से हल कर सकता है, लेकिन इससे mysql काम नहीं कर रहा है। तो यह इतना अच्छा समाधान नहीं है।

आप स्टोरेज फोल्डर में एक रीड-राइट सन्दर्भ सेट कर सकते हैं: (इसे जांचने के लिए 1 सेट करने के लिए याद रखें)

chcon -Rt httpd_sys_content_rw_t storage/

तब आपकी समस्या ठीक हो जाएगी।

  1. और इस संगीतकार अद्यतन php कारीगर कैश मत भूलना: स्पष्ट

    ये आदेश बाद या उससे पहले उपयोगी होंगे।

    मुझे उम्मीद है कि आप अपना समय बचाएंगे। सौभाग्य। Hacken


क्या आपने वेब सर्वर से कमांड लाइन स्क्रिप्ट को कॉल करने की कोशिश की? मैं जारी कर रहा हूं क्योंकि यह किसी भी आउटपुट को प्रिंट नहीं करता है
Volatil3

0

मेरे पास निम्नलिखित कॉन्फ़िगरेशन था:

  • NGINX (उपयोगकर्ता चला रहा है nginx) :
  • पीएचपी-एफ पी एम

और स्वीकृत उत्तर में सुझाए गए @bgies के अनुसार अनुमतियाँ सही तरीके से लागू की गईं। मेरे मामले में समस्या php-fpm के कॉन्फ़िगर किए गए चल रहे उपयोगकर्ता और समूह की थी जो मूल रूप से थी apache

यदि आप php-fpm के साथ NGINX का उपयोग कर रहे हैं, तो आपको php-fpm की कॉन्फिग फ़ाइल खोलनी चाहिए:

nano /etc/php-fpm.d/www.config

और एक एनजीआईएनएक्स के साथ प्रतिस्थापित userऔर groupविकल्प का मान के साथ काम करने के लिए कॉन्फ़िगर किया गया है; मेरे मामले में, दोनों थे nginx:

... ; 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 ...

इसे सहेजें और nginx और php-fpm सेवाओं को पुनरारंभ करें।


0

लारवेल डेवलपर्स के लिए, निर्देशिका मुद्दों में थोड़ा दर्द हो सकता है। अपने आवेदन में, मैं अपने स्थानीय परिवेश में सफलतापूर्वक इस निर्देशिका के लिए फ़्लाई और फाइल्स पर निर्देशिका बना रहा था। फिर सर्वर पर, मुझे नई बनाई गई डायरेक्टरी में फाइल ले जाते समय त्रुटियाँ हो रही थीं।

यहां चीजें हैं जो मैंने की हैं और अंत में एक सफल परिणाम मिला है।

  1. sudo find /path/to/your/laravel/root/directory -type f -exec chmod 664 {} \;
    sudo find /path/to/your/laravel/root/directory -type d -exec chmod 775 {} \;
  2. chcon -Rt httpd_sys_content_rw_t /path/to/my/file/upload/directory/in/laravel/project/
  3. मक्खी पर नई निर्देशिका बनाते समय, मैंने कमांड का उपयोग किया mkdir($save_path, 0755, true);

उत्पादन सर्वर पर उन परिवर्तनों को करने के बाद, मैंने सफलतापूर्वक नई निर्देशिकाएं बनाईं और उनके लिए फाइलें स्थानांतरित कीं।

अंत में, यदि आप लारवेल में फ़ाइल मुखौटा का उपयोग करते हैं तो आप कुछ इस तरह कर सकते हैं: File::makeDirectory($save_path, 0755, true);


-1

मुझे इसका एक और बेहतर समाधान मिला। इसका कारण यह है क्योंकि php डिफ़ॉल्ट रूप से किसी अन्य उपयोगकर्ता के रूप में चल रहा है।

तो इसे ठीक करने के लिए

sudo nano /etc/php/7.0/fpm/pool.d/www.conf

फिर संपादित करें user = "put user that owns the directories" group = "put user that owns the directories"

फिर:

sudo systemctl reload php7.0-fpm


यदि वेबपृष्ठ का आगंतुक वेबसर्वर से बाहर निकलने का प्रबंधन करता है, तो उन्हें अब "उपयोगकर्ता जो निर्देशिकाओं का मालिक है" का एक्सेस अधिकार होगा। यदि वह उपयोगकर्ता www-data है, तो सीमित मात्रा में नुकसान हो सकता है, और यही कारण है कि Apache एक सीमित उपयोगकर्ता के रूप में चलता है। यदि वह उपयोगकर्ता इतना सीमित नहीं है, तो वे अधिक नुकसान कर सकते हैं। यदि उस उपयोगकर्ता के पास sudo अधिकार हैं, तो वे बहुत अधिक नुकसान कर सकते हैं।
markdwhite

यह अपाचे के साथ एक ही सौदा है। BTW मैं अब एक बड़े लड़के की तरह nignx चलाता हूं
सेसिल मेरेल उर्फ ​​स्टीफायरफायर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.