सवाल लिनक्स वेबसर्वर पर मेरी वेबसाइट फ़ाइलों / फ़ोल्डरों की क्या अनुमतियां होनी चाहिए?


यह है एक कैननिकल प्रश्न लिनक्स वेब सर्वर पर फ़ाइल अनुमतियों के बारे में।

मेरे पास एक लिनक्स वेब सर्वर है जो Apache2 चला रहा है जो कई वेबसाइट होस्ट करता है। प्रत्येक वेबसाइट का अपना फ़ोल्डर / var / www / में होता है।

/var/www/contoso.com/
/var/www/contoso.net/
/var/www/fabrikam.com/

आधार निर्देशिका / var / www / रूट के स्वामित्व में है: रूट। अपाचे www-data के रूप में चल रहा है: www-data। फैब्रिकम वेबसाइट दो डेवलपर्स, ऐलिस और बॉब द्वारा रखी जाती है। दोनों Contoso वेबसाइटों को एक डेवलपर, ईव द्वारा बनाए रखा जाता है। सभी वेबसाइटें उपयोगकर्ताओं को छवियों को अपलोड करने की अनुमति देती हैं। यदि किसी वेबसाइट से समझौता किया गया है, तो प्रभाव जितना संभव हो उतना सीमित होना चाहिए।

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

/var/www/fabrikam.com
    /cache
    /modules
    /styles
    /uploads
    /index.php

इन निर्देशिकाओं और फ़ाइलों पर अनुमतियों को कैसे सेट किया जाना चाहिए? मैंने कहीं पढ़ा है कि आपको कभी भी वेबसाइट पर 777 अनुमतियों का उपयोग नहीं करना चाहिए, लेकिन मुझे समझ में नहीं आता कि कौन सी समस्याएं हो सकती हैं। व्यस्त अवधि के दौरान, वेबसाइट स्वचालित रूप से कुछ पृष्ठों को कैश करती है और परिणामों को कैश फ़ोल्डर में संग्रहीत करती है। वेबसाइट आगंतुकों द्वारा सबमिट की गई सभी सामग्री अपलोड फ़ोल्डर में सहेजी जाती है।


283
2018-02-06 01:50


मूल


यह एक होना है कैनन का वेबसाइट अनुमतियों के बारे में हमें प्राप्त होने वाले सभी प्रश्नों के उत्तर दें। - Nic
"मैंने कहीं पढ़ा है कि आपको कभी भी वेबसाइट पर 777 अनुमतियों का उपयोग नहीं करना चाहिए, लेकिन मुझे समझ में नहीं आ रहा है ..." - तो क्या पाठक समझने में सक्षम होगा या कम से कम उत्तर की योग्यताओं की तुलना करने में सक्षम होगा? कोई समाधान विशिष्ट आवश्यकताओं पर आधारित होना चाहिए - यहां आवश्यकताएं पर्याप्त विशिष्ट नहीं हैं (खतरा मॉडल क्या है) - symcbean
मुझे प्यार है कि आप अपाचे के बारे में पूछ रहे हैं, लेकिन डोमेन का उपयोग कर रहे हैं माइक्रोसॉफ्ट आमतौर पर उदाहरण के रूप में उपयोग करता है। - gWaldo
और देखें Apache2 के उपयोगकर्ता www-data / var / www में अनुमतियों को संभालने का सबसे अच्छा तरीका क्या है? - Gareth
लिनक्स में वेबसाइट फ़ाइलों और फ़ोल्डर्स पर रखने की अनुमति के बारे में पूरी जानकारी के लिए आप यहां संदर्भित कर सकते हैं serverfault.com/questions/124800/...


जवाब:


यह तय करते समय कि कौन सी अनुमतियों का उपयोग करना है, आपको यह जानना होगा कि आपके उपयोगकर्ता कौन हैं और उन्हें क्या चाहिए। एक वेबसर्वर दो प्रकार के उपयोगकर्ता के साथ बातचीत करता है।

प्रमाणीकृत उपयोगकर्ताओं के पास सर्वर पर उपयोगकर्ता खाता है और विशिष्ट विशेषाधिकारों के साथ प्रदान किया जा सकता है। इसमें आमतौर पर सिस्टम प्रशासक, डेवलपर और सेवा खाते शामिल होते हैं। वे आमतौर पर एसएसएच या एसएफटीपी का उपयोग कर सिस्टम में बदलाव करते हैं।

गुमनाम उपयोगकर्ता आपकी वेबसाइट के आगंतुक हैं। हालांकि उनके पास फ़ाइलों तक सीधे पहुंचने की अनुमति नहीं है, फिर भी वे एक वेब पेज का अनुरोध कर सकते हैं और वेब सर्वर उनकी ओर से कार्य करता है। वेब सर्वर प्रक्रिया की अनुमतियों के बारे में सावधान रहकर आप अज्ञात उपयोगकर्ताओं की पहुंच को सीमित कर सकते हैं। कई लिनक्स वितरण पर, अपाचे के रूप में चलता है www-data उपयोगकर्ता लेकिन यह अलग हो सकता है। उपयोग ps aux | grep httpd या ps aux | grep apache यह देखने के लिए कि आपके सिस्टम पर अपाचे किस उपयोगकर्ता का उपयोग कर रहा है।


लिनक्स अनुमतियों पर नोट्स

लिनक्स और अन्य पॉज़िक्स-अनुरूप सिस्टम पारंपरिक यूनिक्स अनुमतियों का उपयोग करते हैं। विकिपीडिया पर एक उत्कृष्ट लेख है फाइल सिस्टम अनुमतियां तो मैं यहाँ सब कुछ दोहराना नहीं होगा। लेकिन ऐसी कुछ चीजें हैं जिनके बारे में आपको अवगत होना चाहिए।

निष्पादन बिट
व्याख्या की गई स्क्रिप्ट्स (उदाहरण के लिए रूबी, PHP) निष्पादन अनुमति के बिना ठीक काम करती है। केवल बाइनरी और शैल स्क्रिप्ट को निष्पादित बिट की आवश्यकता होती है। किसी निर्देशिका को घुमाने (दर्ज) करने के लिए, आपको उस निर्देशिका पर निष्पादन अनुमति की आवश्यकता है। वेबसर्वर को किसी निर्देशिका को सूचीबद्ध करने या इसके अंदर की किसी भी फाइल को सेवा देने के लिए इस अनुमति की आवश्यकता होती है।

डिफ़ॉल्ट नई फ़ाइल अनुमतियां
जब कोई फ़ाइल बनाई जाती है, तो आमतौर पर इसे बनाए गए समूह आईडी को प्राप्त होता है। लेकिन कभी-कभी आप नई फाइलों को फ़ोल्डर के समूह आईडी को प्राप्त करने के लिए चाहते हैं जहां वे बनाए जाते हैं, ताकि आप मूल फ़ोल्डर पर एसजीआईडी ​​बिट सक्षम कर सकें।

डिफ़ॉल्ट अनुमति मान आपके उमास्क पर निर्भर करते हैं। उमास्क नव निर्मित फाइलों से अनुमतियों को घटाता है, इसलिए 022 के सामान्य मान 755 के साथ बनाई जा रही फाइलों में होते हैं। समूह के साथ सहयोग करते समय, अपने उमास्क को 002 में बदलना उपयोगी होता है ताकि आपके द्वारा बनाई गई फ़ाइलों को समूह के सदस्यों द्वारा संशोधित किया जा सके। और यदि आप अपलोड की गई फ़ाइलों की अनुमतियों को कस्टमाइज़ करना चाहते हैं, तो फ़ाइल अपलोड होने के बाद आपको या तो अपाचे के लिए उमास्क बदलना होगा या chmod चलाएं।


777 के साथ समस्या

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

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


आवश्यकताओं को परिभाषित करें

  • डेवलपर्स को फ़ाइलों तक पहुंच पढ़ने / लिखने की आवश्यकता है ताकि वे वेबसाइट अपडेट कर सकें
  • डेवलपर्स को निर्देशिकाओं पर पढ़ने / लिखने / निष्पादित करने की आवश्यकता है ताकि वे चारों ओर ब्राउज़ कर सकें
  • अपाचे को फ़ाइलों तक पहुंचने और स्क्रिप्ट की व्याख्या करने की आवश्यकता होती है
  • अपाचे को सेवा योग्य निर्देशिकाओं तक पहुंच को पढ़ने / निष्पादित करने की आवश्यकता है
  • अपाचे को अपलोड की गई सामग्री के लिए निर्देशिकाओं तक पहुंच पढ़ने / लिखने / निष्पादित करने की आवश्यकता है

एक उपयोगकर्ता द्वारा बनाए रखा

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

आपके मामले में, हव्वा, जिसका उपयोगकर्ता नाम हो सकता है 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

इस कॉन्फ़िगरेशन का लाभ यह है कि सिस्टम पर अन्य उपयोगकर्ताओं के लिए घूमने के लिए यह कठिन हो जाता है (लेकिन असंभव नहीं *), क्योंकि उपयोगकर्ता और समूह के मालिक केवल आपकी वेबसाइट निर्देशिका ब्राउज़ कर सकते हैं। यह उपयोगी है अगर आपके पास अपनी कॉन्फ़िगरेशन फ़ाइलों में गुप्त डेटा है। अपने उमास्क के बारे में सावधान रहें! यदि आप यहां एक नई फाइल बनाते हैं, तो अनुमति मान शायद 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-data पर सेट होने के बजाय निर्माता से मेल खाता है। तो आपके द्वारा बनाई गई कोई भी नई फाइल अपाचे द्वारा तब तक पठनीय नहीं होगी जब तक आप उन्हें बोए नहीं।


* अपाचे विशेषाधिकार अलगाव

मैंने पहले उल्लेख किया था कि अन्य उपयोगकर्ताओं के लिए वास्तव में आपकी वेबसाइट के चारों ओर घूमना संभव है चाहे आप किस प्रकार के विशेषाधिकारों का उपयोग कर रहे हों। डिफ़ॉल्ट रूप से, सभी अपाचे प्रक्रियाएं एक ही www-data उपयोगकर्ता के रूप में चलती हैं, इसलिए कोई भी अपाचे प्रक्रिया उसी सर्वर पर कॉन्फ़िगर की गई सभी अन्य वेबसाइटों से फ़ाइलों को पढ़ सकती है, और कभी-कभी परिवर्तन भी कर सकती है। कोई भी उपयोगकर्ता जो स्क्रिप्ट चलाने के लिए अपाचे प्राप्त कर सकता है, उसी अपाचे को प्राप्त कर सकता है।

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


अतिरिक्त मुद्दो पर विचार करना

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

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

अधिक जटिल आवश्यकताओं वाली वेबसाइट के लिए, आप इसका उपयोग देखना चाहेंगे एक्सेस कंट्रोल सूचियां। ये विशेषाधिकारों के अधिक परिष्कृत नियंत्रण को सक्षम बनाता है।

यदि आपकी वेबसाइट में जटिल आवश्यकताएं हैं, तो आप एक ऐसी स्क्रिप्ट लिखना चाहेंगे जो सभी अनुमतियों को सेट करे। इसे अच्छी तरह से परीक्षण करें, फिर इसे सुरक्षित रखें। यदि आप कभी भी किसी कारण से अपनी वेबसाइट को पुनर्निर्माण करने की आवश्यकता महसूस करते हैं तो यह सोने में अपना वजन लायक हो सकता है।


316
2018-02-06 01:50



"chmod -R 775 fabrikam.com"। अधिकांश वेबसाइटों के अंदर बहुत कम फाइलें निष्पादन योग्य होनी चाहिए; उदाहरण के लिए PHP सर्वर तब तक हो सकता है जब तक कि वेब सर्वर उन्हें पढ़ सके। chmod -R ए + एक्स fabrikam.com केवल निर्देशिकाओं पर सभी को निष्पादन योग्य अधिकार देगा।
अच्छा विवरण! - RNA
ध्यान दें कि अपाचे उपयोगकर्ता के रूप में चलता है apache Red Hat व्युत्पन्न सिस्टम पर। - Michael Hampton♦
यह उत्कृष्ट है, लेकिन एक बात मुझे समझ में नहीं आई थी: फ़ाइल की निर्देशिका के उपयोगकर्ता / मालिक को अपाचे बनाने की रणनीति के लक्ष्य या लाभ को मैं समझ नहीं पा रहा हूं यदि फ़ाइल में पहले से ही समूह स्वामित्व है। - idiotprogrammer
यह एक उत्कृष्ट पोस्ट है। यहां मेरा योगदान दिया गया है: www-data का उपयोग स्वामी और देव-fabrikam समूह के रूप में करने का नकारात्मक हिस्सा (में उल्लिखित आप अपना केक ले सकते हैं और इसे भी खा सकते हैं पेश किए गए परिदृश्य में भी (विपरीत में) लागू होता है एक उपयोगकर्ता द्वारा बनाए रखा। उस परिदृश्य में, जब भी अपाचे फ़ोल्डर या फ़ाइल बनाता है, तो उपयोगकर्ता को इसकी पहुंच नहीं होगी, इसलिए फ़ाइलों को मूल उपयोगकर्ता को वापस जाने की आवश्यकता है। मैंने जवाब अपडेट नहीं किया है क्योंकि मैं अपने बयान के बारे में 100% निश्चित नहीं हूं। जवाब देने से पहले मैं दूसरों की पुष्टि करता हूं।


मैं सोच रहा हूं कि इतने सारे लोग अपाचे (और / या PHP) को नियंत्रित करने के लिए लिनक्स अधिकारों के "अन्य" (ओ) भाग का उपयोग क्यों करते हैं (या अनुशंसा करते हैं)। इस सही भाग को "0" से किसी अन्य चीज़ पर सेट करके, आप पूरी दुनिया को फ़ाइल / निर्देशिका पर कुछ करने की अनुमति देते हैं।

मेरा दृष्टिकोण निम्नलिखित है:

  • मैं दो अलग-अलग उपयोगकर्ताओं को बना देता हूं। एसएसएच / एसएफटीपी एक्सेस (यदि आवश्यक हो) के लिए एक, जिसमें सभी फाइलें होंगी, और एक PHP फास्टसीजीआई उपयोगकर्ता (उपयोगकर्ता वेबसाइट के रूप में चलती है) के लिए। आइए इन उपयोगकर्ताओं को क्रमशः कॉल करें बॉब तथा बॉब-www
  • बॉब पूर्ण अधिकार होंगे (rwx फ़ोल्डरों पर, rw- फाइलों पर), ताकि वह पूरी वेबसाइट को पढ़ और संपादित कर सके।
  • PHP फास्टसीजीआई प्रक्रिया की जरूरत है आर-x फ़ोल्डर्स पर अधिकार और r-- फाइलों पर अधिकार, बहुत विशिष्ट फ़ोल्डरों को छोड़कर cache/ या uploads/, जहां "लिखने" अनुमति की भी आवश्यकता है। इस क्षमता को PHP फास्टसीजीआई देने के लिए, यह इस प्रकार चलाएगा बॉब-www, तथा बॉब-www स्वचालित रूप से बनाए गए में जोड़ा जाएगा बॉब समूह।
  • अब हम सुनिश्चित करते हैं कि सभी निर्देशिकाओं और फ़ाइलों के मालिक और समूह हैं बॉब बॉब
  • कुछ गुम है: यहां तक ​​कि हम फास्टसीजीआई का भी उपयोग करते हैं, लेकिन अपाचे को अभी भी स्थिर सामग्री, या .htaccess फ़ाइलों के लिए पढ़ने की आवश्यकता है, जिसे पढ़ने की कोशिश की जाएगी AllowOverride कुछ और के लिए सेट है None। का उपयोग करने से बचने के लिए  अधिकारों का हिस्सा, मैं जोड़ता हूं www-डेटा उपयोगकर्ता के लिए बॉब समूह।

अभी व:

  • डेवलपर क्या कर सकता है इसे नियंत्रित करने के लिए, हम साथ खेल सकते हैं यू अधिकारों का हिस्सा (लेकिन यह नीचे नोट)।
  • अपाचे और PHP क्या कर सकते हैं इसे नियंत्रित करने के लिए, हम साथ खेल सकते हैं जी अधिकारों का हिस्सा
  •  भाग हमेशा 0 पर सेट होता है, इसलिए सर्वर पर कोई और भी वेबसाइट को पढ़ या संपादित नहीं कर सकता है।
  • जब कोई समस्या नहीं है बॉब उपयोगकर्ता नई फाइलें बनाता है, क्योंकि यह स्वचालित रूप से इसके मुख्य समूह से संबंधित होगा (बॉब)।

यह एक पुनरावृत्ति है, लेकिन इस स्थिति में, बॉब एसएसएच को अनुमति है। यदि किसी उपयोगकर्ता को वेबसाइट को संशोधित करने की अनुमति नहीं दी जानी चाहिए (उदाहरण के लिए ग्राहक केवल सीएमएस व्यवस्थापक पैनल के माध्यम से वेबसाइट को संशोधित करता है और इसमें लिनक्स ज्ञान नहीं है), तो दो उपयोगकर्ताओं को वैसे भी बनाएं, लेकिन दें /bin/falseके लिए खोल के रूप में बॉब साथ ही, और इसके लॉगिन को अक्षम करें।

    adduser --home /var/www/bobwebsite --shell /bin/bash bob
    adduser --no-create-home --shell /bin/false --disabled-login --ingroup bob bob-www
    adduser www-data bob
    cd /var/www/bobwebsite
    chown -R bob:bob .
    find -type d -exec chmod 750 {} \;
    find -type f -exec chmod 640 {} \;

ध्यान दें : लोग भूल जाते हैं कि सीमित है यू (स्वामी) अधिकार बेकार और असुरक्षित समय का अधिकांश समय है, क्योंकि फ़ाइल के मालिक को चलाया जा सकता है chmod आदेश, यहां तक ​​कि अधिकार 000 हैं।

मुझे बताएं कि मेरे दृष्टिकोण में कुछ सुरक्षा समस्याएं हैं, क्योंकि मैं 100% निश्चित नहीं हूं, लेकिन मैं इसका उपयोग कर रहा हूं।

मुझे लगता है कि इस कॉन्फ़िगर में एक समस्या है: जब PHP / Apache एक नई फ़ाइल बनाता है (उदाहरण के लिए अपलोड), यह संबंधित होगा बॉब-: www बॉब, तथा बॉब केवल इसे पढ़ने में सक्षम हो जाएगा। शायद निर्देशिका पर setuid समस्या हल कर सकते हैं।


13
2017-07-19 21:42



लिनक्स अनदेखा करता है setuid। नई फाइलें हमेशा निर्माता द्वारा स्वामित्व में होती हैं। - Paul
मुझे कुछ समझ में नहीं आता है। यह स्थिति को शामिल नहीं करता है जब अधिक डेवलपर्स वेबसाइट पर एक साथ काम करते हैं, क्योंकि एकमात्र उपयोगकर्ता है bob। आप इससे कैसे निपटते हैं? उदाहरण के लिए। एसएसएच के माध्यम से, दोनों उपयोगकर्ता बॉब के रूप में लॉग इन करते हैं। बॉब (1) का मानना ​​है कि उसे पासवर्ड याद नहीं है और इसे दूसरे में बदल सकता है लेकिन फिर भी सुरक्षित है। बॉब (2) अगली बार लॉग इन करने की कोशिश करता है, और वह नहीं कर सकता है। - n611x007
@naxa किसी भी मामूली अच्छी प्रणाली में कभी भी वेबसाइट डेवलपर्स को संशोधित करने वाले किसी भी डेवलपर को नहीं होना चाहिए। आदर्श रूप में, वेबसाइट संस्करण नियंत्रण में है जैसे उपयोगकर्ता खाता 'बॉब' स्वचालित रूप से प्रत्येक (स्थिर) रिलीज को खींचता है और तैनात करता है। इसलिए, डेवलपर विकास ऑफ़साइट करते हैं, और तैनाती सर्वर पर धकेलने के बाद परिवर्तनों को तैनात किया जाता है। 'बॉब' एक सिस्टम उपयोगकर्ता है जिसके पास बहुत सीमित नेटवर्क अनुमतियां होनी चाहिए, जिसमें दूरस्थ लॉगिन शामिल नहीं है; iptables वास्तव में आपको इस तरह की चीजों के लिए यूआईडी द्वारा फ़िल्टर करने की अनुमति देता है। - Parthian Shot
"मैं सोच रहा हूं कि इतने सारे लोग" अन्य "(ओ) भाग का उपयोग क्यों करते हैं (या अनुशंसा करते हैं) - तो शायद आपको जवाब के बजाय इसे एक प्रश्न के रूप में पोस्ट करना चाहिए था। समर्थन, विकास, व्यवस्थापक खातों को अलग-अलग पहुंच की आवश्यकता होने पर जानबूझकर वेबसर्वर (सिस्टम के सबसे उजागर हिस्से के रूप में) को सबसे कम स्तर के विशेषाधिकार के साथ चलाने के लिए असामान्य नहीं है। - symcbean


उपर्युक्त उत्कृष्ट उत्तर पर Google रैंक को देखते हुए, मुझे लगता है कि एक बात है जिसे ध्यान दिया जाना चाहिए, और मैं जवाब के बाद एक नोट छोड़ना प्रतीत नहीं कर सकता।

उदाहरण के साथ जारी रखते हुए, यदि आप निर्देशिका (या फ़ाइल) पर 570 अनुमतियों वाले समूह के रूप में www-data को स्वामी और dev-fabrikam के रूप में उपयोग करने की योजना बनाते हैं, तो यह ध्यान रखना महत्वपूर्ण है कि लिनक्स अनदेखा करता है  setuid, इसलिए सभी नई फाइलें उस उपयोगकर्ता के स्वामित्व में होंगी जिसने उन्हें बनाया है। इसका मतलब है कि नई निर्देशिका और फ़ाइलों को बनाने के बाद आपको कुछ ऐसा उपयोग करना होगा:

chown -R www-data /newdirectory/
chmod -R 570 /newdirectory/

रैकस्पेस ओपनस्टैक के लिए उबंटू 12.04 में, मेरे पास एक अजीब मुद्दा था जहां मुझे सर्वर को रीबूट करने तक 570 अनुमतियां प्राप्त नहीं हुईं, जिसने इस मुद्दे को जादुई रूप से ठीक किया। उस साधारण मुद्दे पर बढ़ती दर पर बाल खो रहा था ....


9
2018-01-13 22:03



कृपया इसे गुमराह करें: रास्पबेन में (रास्पबेरी पीआई पर उर्फ, यदि आप lighttpd (या किसी अन्य वेब ब्राउज़र) के अंतर्गत / var / www के स्वामित्व को बदलना चाहते हैं, तो आपको रीबूट करना होगा। - gbronner
@gbronner यदि समाधान के लिए यह एक कठिन मुद्दा है, तो आप इसे एक प्रश्न के रूप में पोस्ट करने और प्रश्न का उत्तर देने पर विचार कर सकते हैं। हालांकि, यह शायद एक अलग एसई क्यू एंड ए साइट में अधिक उपयुक्त है। मेरा अनुमान है यूनिक्स और लिनक्स ऐसा करने के लिए एक अच्छी जगह हो सकती है। - Paul
Raspberrypi.stackexchange.com भी है; ऐसा लगता है कि एसई साइटें ज्ञान को थोड़ा कम कर रही हैं। - gbronner
@ ग्रब्रोनर लॉल। मैं उस बारे में नहीं जानता था! यू एंड एल पर रास्पियन टैग में 120 प्रश्न हैं। - Paul


मैं इस विन्यास के साथ जा रहा हूँ:

  1. अपलोड को छोड़कर सभी निर्देशिका मालिकों को एक सेट root और समूह root, अनुमतियाँ 0755
  2. सभी फाइल मालिक के लिए सेट root और समूह root, अनुमतियाँ 0644
  3. मालिक को सेट निर्देशिका अपलोड करता है rootसमूह www-data, अनुमतियाँ 1770। चिपचिपा बिट समूह के मालिक को निर्देशिका और फ़ाइलों को अंदर हटाने या नाम बदलने की अनुमति नहीं देता है।
  4. अपलोड फ़ोल्डर के अंदर एक नई निर्देशिका के अंदर www-data मालिक उपयोगकर्ता और समूह, और 0700 प्रत्येक के लिए अनुमतियाँ www-data उपयोगकर्ता जो फाइल अपलोड करते हैं।
  5. अपाचे कॉन्फ़िगरेशन:

मना AllowOverride तथा Index अपलोड निर्देशिका में, ताकि अपाचे पढ़ न सके .htaccess फ़ाइलें, और अपाचे उपयोगकर्ता अपलोड फ़ोल्डर की सामग्री को अनुक्रमित नहीं कर सकता है:

<Directory /siteDir>
   Options -Indexes
</Directory>

<Directory /siteDir/uploadDir>
   AllowOverride none
</Directory>

6। php.ini विन्यास:

open_basedir = /siteDir:/tmp:/usr/share/phpmyadmin
post_max_size = 5M
file_uploads = On
upload_max_filesize = 3M
max_file_uploads = 20

इस विन्यास के साथ, www-data उपयोगकर्ता अन्य निर्देशिकाओं के अंदर नहीं जा पाएगा siteDir/  /tmp तथा /usr/share/phpmyadmin। इसके अलावा आप एक ही अनुरोध में अपलोड करने के लिए अधिकतम फ़ाइल आकार, अधिकतम पोस्ट आकार और अधिकतम फ़ाइलों को नियंत्रित कर सकते हैं।


3
2017-10-23 09:54





जब आपके पास "लियो" नामक एफ़टीपी उपयोगकर्ता को example.com वेब निर्देशिका में फ़ाइलों को अपलोड करने की आवश्यकता होती है और आपको अपने "अपाचे" उपयोगकर्ता को कैश निर्देशिका में अपोलो-फाइल / सत्र / कैश फ़ाइलों को बनाने में सक्षम होने की आवश्यकता होती है तो निम्नानुसार करें:

यह आदेश example.com पर apache के रूप में लियो को मालिक और समूह के रूप में निर्दिष्ट करता है, अपाचे उपयोगकर्ता समूह अपाचे का हिस्सा है, इसलिए यह अपाचे समूह की अनुमतियों का वारिस करेगा

chown -R लियो: apache example.com

एक और आदेश जो सही अनुमति का बीमा करता है और सुरक्षा चिंताओं को भी पूरा करता है।

chmod -R 2774 example.com

यहां पहला नंबर 2 निर्देशिका के लिए है और बीमा की गई प्रत्येक नई फ़ाइल उसी समूह और मालिक अनुमतियों में रहेगी। 77 मालिक और समूह के लिए है इसका मतलब है कि उनके पास पूर्ण पहुंच है। 4 दूसरों के लिए है मतलब है कि वे केवल कटा पढ़ सकते हैं।

अनुमति संख्या को समझने के लिए निम्नलिखित सहायक है

Number  Octal Permission Representation
0   No permission
1   Execute permission
2   Write permission
3   Execute and write permission: 1 (execute) + 2 (write) = 3
4   Read permission
5   Read and execute permission: 4 (read) + 1 (execute) = 5
6   Read and write permission: 4 (read) + 2 (write) = 6
7   All permissions: 4 (read) + 2 (write) + 1 (execute) = 7

3
2017-08-09 07:15