यह तय करते समय कि आपको किन अनुमतियों का उपयोग करना है, आपको यह जानना होगा कि आपके उपयोगकर्ता कौन हैं और उनकी क्या आवश्यकता है। एक वेबसर्वर दो प्रकार के उपयोगकर्ता के साथ सहभागिता करता है।
प्रमाणीकृत उपयोगकर्ताओं का सर्वर पर एक उपयोगकर्ता खाता होता है और उन्हें विशिष्ट विशेषाधिकार प्रदान किए जा सकते हैं। इसमें आमतौर पर सिस्टम प्रशासक, डेवलपर्स और सेवा खाते शामिल होते हैं। वे आमतौर पर एसएसएच या एसएफटीपी का उपयोग करके सिस्टम में बदलाव करते हैं।
अनाम उपयोगकर्ता आपकी वेबसाइट के विज़िटर हैं। हालाँकि, उनके पास फ़ाइलों को सीधे एक्सेस करने की अनुमति नहीं है, वे एक वेब पेज और अपनी ओर से वेब सर्वर कार्य करने का अनुरोध कर सकते हैं। वेब सर्वर प्रक्रिया की क्या अनुमति है, इस बारे में सावधान रहकर आप अनाम उपयोगकर्ताओं की पहुंच को सीमित कर सकते हैं। कई लिनक्स वितरण पर, अपाचे www-data
उपयोगकर्ता के रूप में चलता है लेकिन यह अलग हो सकता है। उपयोग करें ps aux | grep httpd
या ps aux | grep apache
देखें कि आपके सिस्टम पर उपयोगकर्ता Apache क्या उपयोग कर रहा है।
लिनक्स अनुमतियों पर नोट्स
लिनक्स और अन्य POSIX- अनुरूप सिस्टम पारंपरिक यूनिक्स अनुमतियों का उपयोग करते हैं। फाइलसिस्टम अनुमतियों के बारे में विकिपीडिया पर एक उत्कृष्ट लेख है इसलिए मैं यहाँ सब कुछ नहीं दोहराऊँगा। लेकिन कुछ चीजें हैं जिनसे आपको अवगत होना चाहिए।
निष्पादित बिट
इंटरप्टेड स्क्रिप्ट (जैसे। रूबी, पीएचपी) निष्पादन की अनुमति के बिना ठीक काम करती है। केवल बायनेरिज़ और शेल स्क्रिप्ट को निष्पादित बिट की आवश्यकता होती है। किसी निर्देशिका को आगे बढ़ाने (दर्ज करने) के लिए, आपको उस निर्देशिका पर अनुमति की आवश्यकता है। वेबसर्वर को निर्देशिका को सूचीबद्ध करने या उसके अंदर किसी भी फाइल को परोसने के लिए इस अनुमति की आवश्यकता होती है।
डिफ़ॉल्ट नई फ़ाइल अनुमतियाँ
जब एक फ़ाइल बनाई जाती है, तो यह सामान्य रूप से जिसने भी इसे बनाया है, उसके समूह आईडी को विरासत में मिला है। लेकिन कभी-कभी आप नई फ़ाइलों को फ़ोल्डर के समूह आईडी को प्राप्त करना चाहते हैं जहां वे बनाई जाती हैं, इसलिए आप मूल फ़ोल्डर में SGID बिट को सक्षम कर सकते हैं।
डिफ़ॉल्ट अनुमति मान आपके umask पर निर्भर करते हैं। Umask नई बनाई गई फ़ाइलों से अनुमतियों को घटाता है, इसलिए 755 के साथ बनाई जा रही फ़ाइलों में 022 परिणामों का सामान्य मूल्य है। एक समूह के साथ सहयोग करते समय, यह आपके umask को 002 में बदलने के लिए उपयोगी है ताकि आपके द्वारा बनाई गई फ़ाइलों को समूह के सदस्यों द्वारा संशोधित किया जा सके। और यदि आप अपलोड की गई फ़ाइलों की अनुमतियों को अनुकूलित करना चाहते हैं, तो आपको फ़ाइल अपलोड होने के बाद एपाचे के लिए umask को बदलना होगा या chmod को चलाना होगा।
777 के साथ समस्या
जब आप chmod 777
अपनी वेबसाइट बनाते हैं, तो आपके पास कोई सुरक्षा नहीं होती है। सिस्टम का कोई भी उपयोगकर्ता आपकी वेबसाइट की किसी भी फ़ाइल को बदल या हटा सकता है। लेकिन अधिक गंभीरता से, याद रखें कि वेब सर्वर आपकी वेबसाइट पर आगंतुकों की ओर से कार्य करता है, और अब वेब सर्वर उन्हीं फाइलों को बदलने में सक्षम है जिन्हें यह निष्पादित कर रहा है। यदि आपकी वेबसाइट में कोई प्रोग्रामिंग भेद्यताएं हैं, तो उनका उपयोग आपकी वेबसाइट को खराब करने, फ़िशिंग हमलों को सम्मिलित करने, या आपके सर्वर से जानकारी चोरी करने के लिए किया जा सकता है।
इसके अतिरिक्त, यदि आपका सर्वर एक जाने-माने पोर्ट पर चलता है (जो कि गैर-रूट उपयोगकर्ताओं को स्पॉनिंग सुनने की सेवाओं को रोकने के लिए है जो विश्व-सुलभ हैं), तो इसका मतलब है कि आपका सर्वर रूट द्वारा शुरू किया जाना चाहिए (हालांकि कोई भी सेंस सर्वर तुरंत बंद हो जाएगा एक कम-विशेषाधिकार प्राप्त खाते में एक बार बंदरगाह बंधे होने के बाद)। दूसरे शब्दों में, यदि आप एक वेबसर्वर चला रहे हैं, जहां मुख्य निष्पादन योग्य संस्करण नियंत्रण (उदाहरण के लिए एक CGI ऐप) का हिस्सा है, तो इसकी अनुमति (या, उस मामले के लिए, युक्त निर्देशिका की अनुमति, जिससे उपयोगकर्ता नाम बदल सकता है। 777 पर निष्पादन योग्य) किसी भी उपयोगकर्ता को किसी भी निष्पादन योग्य को रूट के रूप में चलाने की अनुमति देता है ।
आवश्यकताओं को परिभाषित करें
- डेवलपर्स को फ़ाइलों को पढ़ने / लिखने की आवश्यकता होती है ताकि वे वेबसाइट को अपडेट कर सकें
- डेवलपर्स को निर्देशिकाओं को पढ़ने / लिखने / निष्पादित करने की आवश्यकता होती है ताकि वे चारों ओर ब्राउज़ कर सकें
- अपाचे को फ़ाइलों और व्याख्या की गई स्क्रिप्ट तक पहुंच की आवश्यकता है
- अपाचे को सेवा योग्य निर्देशिकाओं तक पहुंच को पढ़ने / निष्पादित करने की आवश्यकता होती है
- अपाचे को अपलोड की गई सामग्री के लिए निर्देशिकाओं को पढ़ने / लिखने / निष्पादित करने की आवश्यकता है
एक एकल उपयोगकर्ता द्वारा बनाए रखा
यदि साइट को बनाए रखने के लिए केवल एक उपयोगकर्ता जिम्मेदार है, तो उन्हें वेबसाइट निर्देशिका पर उपयोगकर्ता के मालिक के रूप में सेट करें और उपयोगकर्ता को पूर्ण rwx अनुमतियां दें। अपाचे को अभी भी एक्सेस की आवश्यकता है ताकि यह फ़ाइलों की सेवा कर सके, इसलिए समूह स्वामी के रूप में www-data सेट करें और समूह rx अनुमतियाँ दें।
आपके मामले में, ईव, जिसका उपयोगकर्ता नाम हो सकता eve
है, एकमात्र उपयोगकर्ता है जो बनाए रखता है contoso.com
:
chown -R eve contoso.com/
chgrp -R www-data contoso.com/
chmod -R 750 contoso.com/
chmod g+s contoso.com/
ls -l
drwxr-s--- 2 eve www-data 4096 Feb 5 22:52 contoso.com
यदि आपके पास फ़ोल्डर हैं जिन्हें अपाचे द्वारा लिखने योग्य होने की आवश्यकता है, तो आप बस समूह स्वामी के लिए अनुमति मान को संशोधित कर सकते हैं ताकि www-data लेखन तक पहुंच हो।
chmod g+w uploads
ls -l
drwxrws--- 2 eve www-data 4096 Feb 5 22:52 uploads
इस कॉन्फ़िगरेशन का लाभ यह है कि सिस्टम पर अन्य उपयोगकर्ताओं के लिए यह मुश्किल हो जाता है (लेकिन असंभव नहीं है) चारों ओर सूँघने के लिए, क्योंकि केवल उपयोगकर्ता और समूह के मालिक ही आपकी वेबसाइट निर्देशिका को ब्राउज़ कर सकते हैं। यह उपयोगी है यदि आपके पास अपनी कॉन्फ़िगरेशन फ़ाइलों में गुप्त डेटा है। अपने umask के बारे में सावधान रहें! यदि आप यहां एक नई फ़ाइल बनाते हैं, तो अनुमति मान शायद 755 तक डिफ़ॉल्ट होंगे। आप इसे चला सकते हैं umask 027
ताकि नई फाइलें 640 ( rw- r-- ---
) तक डिफ़ॉल्ट हो जाएं ।
उपयोगकर्ताओं के एक समूह द्वारा बनाए रखा
यदि साइट को बनाए रखने के लिए एक से अधिक उपयोगकर्ता जिम्मेदार हैं, तो आपको अनुमतियाँ असाइन करने के लिए उपयोग करने के लिए एक समूह बनाना होगा। प्रत्येक वेबसाइट के लिए एक अलग समूह बनाना और उस वेबसाइट के बाद समूह का नाम देना अच्छा है।
groupadd dev-fabrikam
usermod -a -G dev-fabrikam alice
usermod -a -G dev-fabrikam bob
पिछले उदाहरण में, हमने अपाचे को विशेषाधिकार देने के लिए समूह के मालिक का उपयोग किया था, लेकिन अब इसका उपयोग डेवलपर्स समूह के लिए किया जाता है। चूंकि उपयोगकर्ता का मालिक हमारे लिए अधिक उपयोगी नहीं है, इसलिए इसे रूट करना यह सुनिश्चित करने का एक सरल तरीका है कि कोई विशेषाधिकार लीक नहीं हुआ है। अपाचे को अभी भी एक्सेस की आवश्यकता है, इसलिए हम बाकी दुनिया के लिए रीड एक्सेस देते हैं।
chown -R root fabrikam.com
chgrp -R dev-fabrikam fabrikam.com
chmod -R 775 fabrikam.com
chmod g+s fabrikam.com
ls -l
drwxrwxr-x 2 root dev-fabrikam 4096 Feb 5 22:52 fabrikam.com
यदि आपके पास फ़ोल्डर हैं जिन्हें अपाचे द्वारा लिखने योग्य होने की आवश्यकता है, तो आप अपाचे को या तो उपयोगकर्ता का मालिक या समूह का मालिक बना सकते हैं। किसी भी तरह से, इसके पास इसकी सभी जरूरतें होंगी। व्यक्तिगत रूप से, मैं इसे उपयोगकर्ता का मालिक बनाना पसंद करता हूं ताकि डेवलपर्स अभी भी अपलोड किए गए फ़ोल्डरों की सामग्री को ब्राउज़ और संशोधित कर सकें।
chown -R www-data uploads
ls -l
drwxrwxr-x 2 www-data dev-fabrikam 4096 Feb 5 22:52 uploads
हालांकि यह एक सामान्य दृष्टिकोण है, एक नकारात्मक पहलू है। चूंकि सिस्टम के प्रत्येक दूसरे उपयोगकर्ता के पास आपकी वेबसाइट के लिए एक ही विशेषाधिकार है जैसा कि अपाचे करता है, अन्य उपयोगकर्ताओं के लिए आपकी साइट ब्राउज़ करना और उन फ़ाइलों को पढ़ना आसान होता है जिनमें गुप्त डेटा हो सकता है, जैसे आपकी कॉन्फ़िगरेशन फ़ाइलें।
आप अपना केक ले सकते हैं और इसे भी खा सकते हैं
इस पर बेहतर सुधार किया जा सकता है। यह स्वामी के लिए समूह की तुलना में कम विशेषाधिकार प्राप्त करने के लिए पूरी तरह से कानूनी है, इसलिए उपयोगकर्ता स्वामी को इसे रूट करने के लिए बर्बाद करने के बजाय, हम आपकी वेबसाइट पर निर्देशिका और फ़ाइलों पर उपयोगकर्ता के मालिक को अपाचे बना सकते हैं। यह एकल अनुचर परिदृश्य का उलटा है, लेकिन यह समान रूप से अच्छी तरह से काम करता है।
chown -R www-data fabrikam.com
chgrp -R dev-fabrikam fabrikam.com
chmod -R 570 fabrikam.com
chmod g+s fabrikam.com
ls -l
dr-xrwx--- 2 www-data dev-fabrikam 4096 Feb 5 22:52 fabrikam.com
यदि आपके पास फ़ोल्डर हैं जिन्हें अपाचे द्वारा लिखने योग्य होने की आवश्यकता है, तो आप उपयोगकर्ता स्वामी के लिए अनुमति मूल्यों को केवल संशोधित कर सकते हैं ताकि www-data लेखन तक पहुंच हो।
chmod u+w uploads
ls -l
drwxrwx--- 2 www-data dev-fabrikam 4096 Feb 5 22:52 fabrikam.com
इस समाधान से सावधान रहने वाली एक बात यह है कि नई फ़ाइलों का उपयोगकर्ता स्वामी www-डेटा पर सेट होने के बजाय निर्माता से मेल खाएगा। इसलिए आपके द्वारा बनाई गई कोई भी नई फ़ाइल अपाचे द्वारा पठनीय नहीं होगी जब तक आप उन्हें चाउ नहीं करते।
* अपाचे विशेषाधिकार जुदाई
मैंने पहले उल्लेख किया है कि यह वास्तव में आपकी वेबसाइट के आसपास अन्य उपयोगकर्ताओं के लिए संभव है कि आप किस तरह के विशेषाधिकारों का उपयोग कर रहे हैं। डिफ़ॉल्ट रूप से, सभी Apache प्रक्रियाएं एक ही www-data उपयोगकर्ता के रूप में चलती हैं, इसलिए कोई भी Apache प्रक्रिया उसी सर्वर पर कॉन्फ़िगर की गई अन्य सभी वेबसाइटों की फ़ाइलों को पढ़ सकती है, और कभी-कभी परिवर्तन भी कर सकती है। कोई भी उपयोगकर्ता जो अपाचे को स्क्रिप्ट चलाने के लिए प्राप्त कर सकता है, वही एक्सेस प्राप्त कर सकता है जो अपाचे के पास है।
इस समस्या से निपटने के लिए, अपाचे में विशेषाधिकार पृथक्करण के विभिन्न दृष्टिकोण हैं । हालांकि, प्रत्येक दृष्टिकोण विभिन्न प्रदर्शन और सुरक्षा कमियों के साथ आता है। मेरी राय में, उच्च सुरक्षा आवश्यकताओं वाली किसी भी साइट को एक साझा सर्वर पर VirtualHosts का उपयोग करने के बजाय एक समर्पित सर्वर पर चलाया जाना चाहिए।
अतिरिक्त मुद्दो पर विचार करना
मैंने पहले इसका उल्लेख नहीं किया था, लेकिन आमतौर पर डेवलपर्स को वेबसाइट को सीधे संपादित करने का एक बुरा अभ्यास है। बड़ी साइटों के लिए, आप किसी तरह के रिलीज़ सिस्टम से बहुत बेहतर हैं जो वेबसर्वर को संस्करण नियंत्रण प्रणाली की सामग्री से अपडेट करता है। एकल अनुचर दृष्टिकोण शायद आदर्श है, लेकिन एक व्यक्ति के बजाय आपके पास स्वचालित सॉफ़्टवेयर है।
यदि आपकी वेबसाइट ऐसे अपलोड की अनुमति देती है, जिन्हें बाहर भेजने की आवश्यकता नहीं है, तो उन अपलोड को वेब रूट के बाहर कहीं संग्रहीत किया जाना चाहिए। अन्यथा, आप पा सकते हैं कि लोग उन फ़ाइलों को डाउनलोड कर रहे हैं जिनका उद्देश्य गुप्त था। उदाहरण के लिए, यदि आप छात्रों को असाइनमेंट जमा करने की अनुमति देते हैं, तो उन्हें एक निर्देशिका में सहेजा जाना चाहिए जो Apache द्वारा सेवित नहीं है। यह उन कॉन्फ़िगरेशन फ़ाइलों के लिए भी एक अच्छा तरीका है जिनमें रहस्य हैं।
अधिक जटिल आवश्यकताओं वाली वेबसाइट के लिए, आप एक्सेस कंट्रोल लिस्ट के उपयोग पर गौर कर सकते हैं । ये विशेषाधिकारों के अधिक परिष्कृत नियंत्रण को सक्षम करते हैं।
यदि आपकी वेबसाइट की जटिल आवश्यकताएं हैं, तो आप एक स्क्रिप्ट लिखना चाहते हैं जो सभी अनुमतियों को सेट करती है। इसे अच्छी तरह से परखें, फिर सुरक्षित रखें। यह सोने में इसके वजन के लायक हो सकता है यदि आप कभी भी किसी कारण से अपनी वेबसाइट को फिर से बनाने की आवश्यकता महसूस करते हैं।