आपको कभी भी अपने होम डायरेक्टरी के भीतर से वेबसाइट नहीं चलानी चाहिए । कभी। अन्यथा आपको वेब सर्वर को/home/
निर्देशिका संरचना को देखने केमाध्यम से पार करने की क्षमता प्रदान करनी होगी, लेकिन यह भी/home/$USER/
(आपके उपयोगकर्ता की होम निर्देशिका में, जहाँ हम कोशिश कर सकते हैं और देख सकते हैं कि आपके उपयोगकर्ता निर्देशिका में और क्या मौजूद है), साथ ही साथ कोई भी अन्य सबफ़ोल्डर वहाँ पर। एक खराब-कॉन्फ़िगर या गलत या अप्रकाशित वेब सर्वर इस तरह से बड़े पैमाने पर डेटा रिसाव का कारण बन सकता है, या क्रेडेंशियल्स की हानि और इस तरह जो आपके व्यक्तिगत डेटा और लॉगिन को विभिन्न चीजों पर जोखिम में डाल देगा। आपके द्वारा उपयोग किया जा रहा सिम्लिंक अप्रोच पढ़ने के लिए अपाचे अनुमति देने के प्रयास के रूप में उसी कारण से मदद नहीं करता है/home/andre/www/moodle
- वेब सर्वर को उस स्थान पर जाने के लिए अपने होम निर्देशिका को पार करने में सक्षम होना पड़ता है जो कि सिमिलिंक को /var/www/html
इंगित करता है, जो अभी भी उस सुरक्षा जोखिम को दर्शाता है ।
सबसे पहले, उपयोग करें sudo cp -r /home/andre/www/moodle/ /var/www/html/
। यह आपकी फ़ाइलों को कॉपी करेगा /var/www/html
, और इसे आपकी अपनी होम डाइरेक्टरी से दूर रखेगा। हम आपके और वेब सर्वर की उस निर्देशिका में सब कुछ एक्सेस कर सकते हैं, और फिर अपने उपयोगकर्ता को सभी फाइलों और निर्देशिकाओं को पूरा पढ़ने / लिखने की अनुमति दे देंगे। फिर, आपको केवल /var/www/html
अपनी साइट के लिए काम करना होगा ।
आपके डेटा को वापस कॉपी करने के बाद, यह चार चरणों में प्रभावी है /var/www/html
:
- Apache को फोल्डर और फाइलों तक पहुंच प्रदान करें, इसलिए यह 403 त्रुटियों के बिना साइट की सेवा कर सकता है।
- अपने उपयोगकर्ता को फ़ाइलों और फ़ोल्डरों पर 'स्वामी' दें, और अपने आप को सभी फ़ाइलों और फ़ोल्डरों पर पढ़ने / लिखने के साथ-साथ निर्देशिकाओं को पार करने की क्षमता दें।
- (वैकल्पिक लेकिन अनुशंसित) इसे ऐसे सेट करें कि निर्देशिका संरचना की संपूर्णता में यहाँ से बनाई गई किसी भी फ़ाइल या फ़ोल्डर में समूह सेट हो
www-data
।
- (वैकल्पिक) अंतिम सुरक्षा क्लीनअप, जहां हम अनुमतियाँ सेट करते हैं ताकि आप और वेब सर्वर साइट डेटा देख सकें, लेकिन अन्य उपयोगकर्ता साइट के लिए फ़ाइलों या निर्देशिका संरचना का उपयोग नहीं कर सकते हैं।
(1) अपाचे को फोल्डर और फाइलों तक पहुंच दें।
sudo chgrp -R www-data /var/www/html
sudo find /var/www/html -type d -exec chmod g+rx {} +
sudo find /var/www/html -type f -exec chmod g+r {} +
यह पुनरावर्ती www-data
फ़ोल्डर और फ़ाइलों के लिए 'समूह' को सेट करता है। यह तब वेब सर्वर को साइट दस्तावेज़ रूट निर्देशिका संरचना ( +x
केवल निर्देशिका के लिए) तक पहुंचने और प्राप्त करने की अनुमति देता है । यह तब भी सुनिश्चित करता है कि वेब सर्वर ने सभी फ़ाइलों के लिए अनुमतियाँ पढ़ ली हैं, इसलिए साइट डेटा प्राप्त किया जा सकता है।
ऐसे कुछ मामले हो सकते हैं जहां आपको वेब सर्वर को किसी फाइल को, या किसी डायरेक्टरी को लिखने की अनुमति देनी होती है - ऐसा करने से यह हासिल किया जा सकता है sudo chmod g+w /var/www/html/PATH
(जहां PATH
डायरेक्टरी स्ट्रक्चर में फाइल या फोल्डर का रास्ता है, जहां आपको आवेदन करने की आवश्यकता है वेब सर्वर के लिए अनुमतियाँ लिखें)।
सूचना : ऐसे कई मामले हैं जहां यह साइट कॉन्फ़िगरेशन (जैसे डेटाबेस एक्सेस क्रेडेंशियल, आदि) के बारे में 'सुरक्षित' जानकारी को उजागर कर सकता है, और आपको उन व्यक्तिगत फ़ाइलों या निर्देशिकाओं पर उस डेटा के लिए 'अन्य' एक्सेस अनुमतियों को हटा देना चाहिए निम्नलिखित: sudo chmod o-rwx /var/www/html/FILEPATH
( फ़ाइल के लिए फ़ोल्डर के FILEPATH
सापेक्ष पथ के साथ प्रतिस्थापित /var/www/html
)।
यह भी ध्यान रखें कि अगर भविष्य में वेब सर्वरों को सही अनुमति देने के लिए वेब सर्वरों को सही अनुमति देने के लिए और बनाए गए या कॉपी किए गए फ़ाइलों को एक्सेस करने के लिए 403 इश्यू मिलते हैं, तो आपको भविष्य में इन कमांड्स को फिर से चलाना पड़ सकता है। www-data
समूह को सही तरीके से सेट नहीं किया जा रहा है।
(2) अपने मालिक को फोल्डर और फाइलों के लिए विशेषाधिकारों को पढ़ें / लिखें, और निर्देशिका संरचना को पार करने के लिए फ़ोल्डर एक्सेस की अनुमति दें।
sudo chown -R USER /var/www/html/
sudo find /var/www/html -type d -exec chmod u+rwx {} +
sudo find /var/www/html -type f -exec chmod u+rw {} +
USER
अपने उपयोगकर्ता नाम के साथ पहले कमांड में बदलें !
हम यहां तीन काम करते हैं। सबसे पहले, हम आपके उपयोगकर्ता को सभी फ़ाइलों और निर्देशिकाओं के "स्वामी" के रूप में सेट करते हैं /var/www/html
। अगला, हमने फ़ोल्डरों पर पढ़ने और लिखने की अनुमति दी है, और आपको उन में जाने के लिए फ़ोल्डरों तक पहुंचने की अनुमति है ( +x
निर्देशिका आइटम पर आइटम)। फिर हमने स्वामी के लिए पढ़ने / लिखने की अनुमति के लिए सभी फाइलें सेट कीं, जो हमने अभी-अभी सेट की हैं।
(3) (वैकल्पिक)www-data
'एक्सेस' उपयोगकर्ता के रूप में निर्मित होने के बाद हर नई फ़ाइल को सुनिश्चित करें।
sudo find /var/www/html -type d -exec chmod g+s {} +
यह निर्देशिका पर समूह के लिए "सेट gid" बिट सेट करता है। इन निर्देशिकाओं के अंदर बनाई गई फ़ाइलें और फ़ोल्डर हमेशा www-data
वेब सर्वर एक्सेस की अनुमति देते हुए समूह के रूप में होंगे।
(4) (वैकल्पिक) अंतिम सुरक्षा सफाई, यदि आप नहीं चाहते कि अन्य उपयोगकर्ता डेटा को देख सकें
हमें निर्देशिकाओं और फ़ाइलों को देखने के लिए आपके उपयोगकर्ता की आवश्यकता है। हमें ऐसा करने के लिए वेब-सर्वर की भी आवश्यकता है। हम डेटा को देखने के लिए अन्य सिस्टम उपयोगकर्ताओं (रूट को छोड़कर) नहीं चाहते हैं। तो उन्हें वह एक्सेस न दें, और इसे केवल आपके उपयोगकर्ता और वेब सर्वर डेटा को देख सकें।
sudo chmod -R o-rwx /var/www/html/
नोट: आपको बाद में इसे फिर से नहीं चलाना पड़ेगा, या यहां 'अन्य' श्रेणी की अनुमतियों के लिए अनुमतियों को संपादित करना होगा। यदि 'अन्य' उपयोगकर्ता प्राप्त नहीं कर सकते हैं /var/www/html/
(उनके पास फाइलस्ट्रक्चर और निर्देशिका संरचना को आगे बढ़ाने के लिए आवश्यक +x
बिट नहीं है /var/www/html
, और न ही +r
फ़ाइल सूचियों को पढ़ने के लिए बिट), तो अन्य उपयोगकर्ताओं के लिए उस निर्देशिका के नीचे आइटम पर अनुमतियाँ हैं या समूह वास्तव में बहुत ज्यादा मायने नहीं रखते हैं।
इसके लिए थोड़ा कम आक्रामक समाधान है, हालांकि, यह सभी नई फ़ाइलों के लिए काम करने की गारंटी नहीं है, और न ही फ़ाइल एक्सेस कंट्रोल सूचियों को शामिल करते हुए सभी फ़ाइल सिस्टम पर काम करने की गारंटी है । यह आपको www-data
चीजों के लिए फाइलों के स्वामित्व को छोड़ने देता है, लेकिन आपको प्रभावी मालिकाना हक देता है, सभी इरादों और उद्देश्यों के लिए, भले ही आप व्यक्तिगत रूप से फाइलों के मालिक न हों।
यह समाधान थोड़ा कम आक्रामक है, और आपके पास एक निर्देशिका और सभी फाइलें हैं जिनके पास स्वामित्व है www-data:www-data
या root:www-data
फिर खुद को एक्सेस भी दे सकते हैं। यह एक्सेस कंट्रोल लिस्ट का उपयोग करता है , जो आपको कई उपयोगकर्ताओं को व्यक्तिगत समूह स्थापित किए बिना अनुमति देता है। यह root
या www-data
सिस्टम उपयोगकर्ताओं को अपनी फ़ाइलों की सुविधा देता है, लेकिन आपको केस-दर-मामला आधार पर अतिरिक्त अनुमतियों को जोड़ने की अनुमति देता है, और कुछ उपयोगकर्ताओं के लिए फाइन-ट्यून की अनुमति देता है ताकि वे चीजों को पढ़ सकें, लेकिन संपादित नहीं कर सकें, और ऐसे।
यह मानते हुए कि हम अभी भी साथ काम कर रहे हैं /var/www/html/
, और हम अपने डेटा को देखने के लिए हमारे और सिस्टम (और रूट) के अलावा अन्य उपयोगकर्ताओं को स्नूपिंग नहीं करना चाहते, हमें निम्न काम करने होंगे:
- वेबसर्वर सिस्टम उपयोगकर्ता को स्वामित्व वापस दें
www-data
।
sudo chown -R www-data: www-data / var / www / html
- अन्य उपयोगकर्ताओं (फ़ाइलों को छोड़कर
www-data
और root
निश्चित रूप से) को फ़ाइलों तक पहुंच नहीं देते हुए, आप फ़ाइलों पर पढ़ने / लिखने को पुन: लिख दें ।
sudo find / var / www / html -type f -exec setfacl -mu: YourUSERNAME: rw -m other :: --- {}};
- निर्देशिकाओं पर अपने आप को पढ़ने / लिखने / ट्रैवर्स करने के लिए, अन्य उपयोगकर्ताओं (छोड़कर ) और के लिए फ़ोल्डर्स तक पहुंच को हटा दें
www-data
और root
इसे निर्देशिकाओं में नई फ़ाइलों के लिए 'डिफ़ॉल्ट' एसीएल के रूप में सेट करें।
sudo find / var / www / html -type d -exec setfacl -d -mu: YourUSERNAME: rwx -mo :: --- {{};
- हमें
setgid
सभी निर्देशिकाओं के लिए बिट सेट करने की भी आवश्यकता है , ताकि यदि आप एक फ़ाइल बनाते हैं, तो वेबसर्वर अभी भी इसे www-data
समूह अनुमतियों के माध्यम से एक्सेस कर सकता है ।
sudo find / var / www / html -type d -exec chmod g + x {} \;
और अब आप सभी निर्देशिकाओं तक पहुँच प्राप्त कर चुके हैं, और आपको इससे दूर नहीं जाना है, www-data
जिससे वेबसर्वर को मदद मिलती है क्योंकि अभी भी हर जगह फाइल बना सकते हैं जैसे कि जरूरत है (जैसे कि PHP पर आधारित अपने स्वयं के कैश निर्देशिकाओं और जैसे बनाने की जरूरत है और उचित संचालन के लिए लिखा है)।
एकमात्र चेतावनी: यदि आप मैन्युअल रूप से नई फाइलें बनाते हैं, तो आपको वेबसर्वर को स्वामित्व देने के लिए उनके अनुसार उन्हें चेंज करने की आवश्यकता है। यह एक सरल है sudo chown www-data:www-data filename
, और एक्सेस कंट्रोल लिस्ट अभी भी आपको फ़ाइल के प्रभावी मालिक अधिकार प्रदान करने चाहिए।
ऐसे कई मामले हैं जहां मुझे किसी फ़ाइल के मालिकों को बदले बिना कुछ प्रकार के गैर-मानक पहुंच के लिए एक sysadmin के रूप में ऐसा करना पड़ा है। यह काम करता है, लेकिन इसके अपने सिरदर्द हैं, क्योंकि हर फाइल सिस्टम फ़ाइल एक्सेस सूचियों का समर्थन नहीं करता है।
+x
फ़ाइलों को निष्पादन योग्य अनुमति देता है, और हम नहीं चाहते हैं कि PHP फ़ाइलों को निष्पादित किया जाए, जरूरी है, PHP कमांड लाइन के माध्यम से या सर्वर पर एक निष्पादन योग्य के रूप में - हम चाहते हैं कि वे वेब सर्वर में PHP पार्सर द्वारा संसाधित हों और हम+x
PHP पार्सर को पढ़ने और उन्हें संसाधित करने के लिए PHP फ़ाइलों की आवश्यकता नहीं है)। निर्देशिकाओं+x
को निर्देशिकाओं के माध्यम से ट्रैवर्सल को अनुमति देने की आवश्यकता है - अर्थात, यदि कोई निर्देशिका नहीं है+x
और मैं जड़ नहीं हूं, तो मैं उस निर्देशिका में नहीं जा सकता, जो कि आपके पास अपाचे के साथ आपके सहानुभूति और आपके घर के काम न करने की समस्या है। निर्देशिका।