क्या उपयोगकर्ता को अपाचे और PHP के रूप में चलना चाहिए? क्या अनुमतियाँ / var / www फ़ाइलें होनी चाहिए?


41

मैं सिर्फ एक उबंटू 11.10 बॉक्स का उपयोग करता हूं और फिर apt-get install apache2 php5बॉक्स पर apache2 और PHP 5 स्थापित करने के लिए दौड़ा । अब यह "वेब सर्वर" के रूप में कार्य कर रहा है और यह "इट वर्क्स" को लोड करता है। पृष्ठ। अब मैं सुरक्षा बढ़ाने की कोशिश कर रहा हूं और मेरे पास लिनक्स वेब सर्वर के बारे में निम्नलिखित प्रश्न हैं:

  1. अपाचे को किसके रूप में चलना चाहिए?
  2. इस उपयोगकर्ता को किस समूह में होना चाहिए?
  3. क्या पैकेज (s) PHP (और Apache?) फ़ाइलों के स्वामी के रूप में चला सकते हैं? (जैसे साझा वेब होस्ट पर) क्या मुझे इन पैकेजों का उपयोग करना चाहिए? क्या वे एक छोटी प्रणाली पर बनाए रखने में आसान / संभव हैं?
  4. वेब पर अपाचे के साथ चलने वाली फ़ाइलों और फ़ोल्डरों के लिए डिफ़ॉल्ट अनुमतियाँ क्या होनी चाहिए www-data? उपयोगकर्ता के रूप में अपाचे / php के लिए चल रहा है?

मैंने डिफ़ॉल्ट सेटअप की जांच में निम्नलिखित बातें की हैं:

फ़ाइल संरचना

जब मैं cd /और एक कर ls -alसामग्री की लिस्टिंग, मैं देख रहा हूँ /var:

drwxr-xr-x 13 root root  4096 2012-02-04 20:47 var/

मैं तो cdमें varऔर है ls -alमैं देख रहा हूँ:

drwxr-xr-x  2 root root  4096 2012-02-04 20:47 www/

अंत में, /var/wwwमैं अंदर देखता हूं:

drwxr-xr-x  2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r--  1 root root  177 2012-02-04 20:47 index.html

मेरा मुख्य साधन यह है कि अब तक ये सभी root:rootफाइलें 644 की अनुमतियों की हैं, और निर्देशिकाओं की 755 की अनुमति है।

अपाचे की अनुमतियाँ

यदि मैं /var/www/test.phpसामग्री के साथ रूट के रूप में एक फ़ाइल बनाता हूं :

<?php echo shell_exec('whoami');

और उस फ़ाइल को एक ब्राउज़र में लोड करें जो मुझे बताती है www-data, जो कि फ़ाइल के समान है /etc/apache2/envvars:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

अगर मैं ps aux | grep -i apacheनिम्नलिखित देखता हूं:

root      1916  1.2 104664  7488 Ss   20:47 /usr/sbin/apache2 -k start
www-data  1920  0.8 105144  5436 S    20:47 /usr/sbin/apache2 -k start
www-data  1921  1.0 105144  6312 S    20:47 /usr/sbin/apache2 -k start
www-data  1922  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1923  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1924  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1925  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start

तो कौन अपाचे के रूप में चल रहा है? ऐसा लगता है कि शायद पहली प्रक्रिया इस प्रकार है root, हो सकता है कि /etc/init.d/apacheस्क्रिप्ट से जब सिस्टम शुरू हुआ हो, और अन्य www-dataपहले के रूप में पैदा हुए हों। क्या वो सही है?

अगला, अगर मैं टाइप करता हूं groups www-dataतो मैं देखता हूं www-data : www-data- इसलिए यह केवल www-dataसमूह में होना चाहिए । मुझे लगता है कि यह मानक अभ्यास है।

साझा होस्टिंग और सुरक्षा

इसलिए यदि मैं चीजों को सही ढंग से समझता हूं, अगर अपाचे के रूप में चल रहा है www-dataऔर मैं चाहता हूं कि अपाचे एक निर्देशिका को पढ़ने में सक्षम हो, तो xबिट को दुनिया (अन्य) समूह ( o+x) के लिए सेट करने की आवश्यकता है, और यह भी सभी माता-पिता पर सेट करने की आवश्यकता है सभी तरह से श्रृंखला ( www, var) निर्देशिका। और अगर मैं चाहता हूं कि अपाचे एक फ़ाइल से पढ़ने में सक्षम हो, तो o+rबिट को सेट करने की आवश्यकता है।

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

मैंने दो पैकेजों के बारे में सुना है, suphpऔर phpsuexecयह एक साझा प्रणाली पर उपयोगकर्ताओं की फ़ाइलों को "उन्हें" के रूप में "बाहर" दिए जाने की अनुमति देता है। इनमें से एक उपनाम यह है कि यह वेब एप्लिकेशन (जैसे वर्डप्रेस) को फाइल बनाने और संशोधित करने की अनुमति देता है - थीम, प्लगइन्स को जोड़ने और सॉफ़्टवेयर को अपग्रेड करने के लिए बहुत उपयोगी है। बेशक, इन चीजों को मैन्युअल रूप से करना अधिक सुरक्षित है, लेकिन क्या उपरोक्त उल्लिखित पैकेजों में से एक के साथ समझौता किया जा सकता है? या संभवतः chownवर्डप्रेस निर्देशिका समूह बनाने के लिए उपयोग करके समूह www-dataपर चिपचिपा बिट सेट करें ( g+s)?

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

वापस प्रश्नों के लिए

  1. अपाचे को किसके रूप में चलना चाहिए?
  2. इस उपयोगकर्ता को किस समूह में होना चाहिए?
  3. क्या पैकेज (s) PHP (और Apache?) फ़ाइलों के स्वामी के रूप में चला सकते हैं? (जैसे साझा वेब होस्ट पर) क्या मुझे इन पैकेजों का उपयोग करना चाहिए? क्या वे एक छोटी प्रणाली पर बनाए रखने में आसान / संभव हैं?
  4. वेब पर अपाचे के साथ चलने वाली फ़ाइलों और फ़ोल्डरों के लिए डिफ़ॉल्ट अनुमतियाँ क्या होनी चाहिए www-data? उपयोगकर्ता के रूप में अपाचे / php के लिए चल रहा है?

के संभावित डुप्लिकेट serverfault.com/questions/339948/...
AD7six

जवाबों:


17
  1. जड़ नहीं
  2. जड़ नहीं
  3. SuEXEC
  4. निर्भर करता है। फ़ाइलों के लिए 644 और फ़ोल्डरों के लिए 755 एक सुरक्षित डिफ़ॉल्ट हैं।

जब तक आप उस फ़ाइल / फ़ोल्डर की सामग्री को संपादित करने में सक्षम होना चाहते हैं, तब तक www-डेटा के कुछ भी स्वामित्व को न बदलें

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

यदि आप अपने php एप्लिकेशन के माध्यम से कोई फाइल नहीं लिख रहे हैं, तो आप अपने स्वामित्व वाली फ़ाइलों को छोड़ सकते हैं: आप। इस परिस्थिति में विश्व अनुमति (xx4 / 5) वह है जो लागू होती है।

यदि आप फ़ाइलों को अपने स्वामित्व के अनुसार छोड़ते हैं: आप 644 (फ़ाइलों) की फ़ाइल अनुमतियों के साथ हैं, तो इसका मतलब यह होगा कि केवल आप वेबसाइट फ़ाइलों को संपादित कर सकते हैं - www-data आप नहीं है - इसलिए यह फ़ाइलों को संपादित नहीं कर सकता है।

यदि आप अपाचे + तक पहुँच को प्रतिबंधित करना चाहते हैं और अन्य सभी पहुँच को रोक देते हैं chown -R you:www-data *। 640 की फ़ाइल अनुमतियों और 750 की फ़ोल्डर अनुमतियों को आप संपादित कर सकते हैं, www-data पढ़ सकते हैं - क्योंकि तब अपाचे समूह की अनुमति (x4 / 5x) पढ़ता है।

एक न्यूनतम पथ को प्रतिबंधित करें जिसे आप अपाचे / php को लिखने की अनुमति देते हैं - यदि कोई tmp dir है तो अनुप्रयोग को लिखने की आवश्यकता है - इसे केवल उस फ़ोल्डर में लिखने की अनुमति दें - और किसी भी योग्य स्थानों के लिए यदि संभव हो तो यह सुनिश्चित करें कि यह बाहर है । यह सुनिश्चित करने के लिए दस्तावेज़ रूट या कदम उठाएं कि यह वेब-सुलभ नहीं है।

ध्यान दें कि "आप" रूट नहीं होना चाहिए । रूट के रूप में सीधे ssh एक्सेस की अनुमति देना अन्य सुरक्षा लैप्स (जैसे पासवर्ड लॉगिन को अस्वीकार नहीं करना ) का एक संकेतक है , लेकिन यह स्वयं के लिए प्रश्नों का एक पूरा गुच्छा है।


10

इसलिए अगर मैं चीजों को सही ढंग से समझता हूं, अगर अपाचे www-डेटा के रूप में चल रहा है और मैं चाहता हूं कि अपाचे एक निर्देशिका को पढ़ने में सक्षम हो, तो x बिट को दुनिया (अन्य) समूह (ओ + एक्स) के लिए सेट करने की आवश्यकता है, और वह भी श्रृंखला (www, var) सभी तरह से सभी मूल निर्देशिकाओं पर सेट किए जाने की आवश्यकता है। और अगर मैं चाहता हूं कि अपाचे एक फ़ाइल से पढ़ने में सक्षम हो, तो ओ + आर बिट सेट करने की आवश्यकता है।

यह सच नहीं है, आपको rwx'अन्य' के लिए सेट नहीं करना है । आपको उस विशेष फ़ोल्डर / फ़ाइल के स्वामी और / या समूह को बदलना चाहिए जिसे आप संरक्षित करने का प्रयास कर रहे हैं। उदाहरण के लिए:

chown -R cwd:www-data /var/www/cwd.com
chmod 750 /var/www/cwd.com

अब केवल समूह के सदस्य ही www-dataपढ़ सकते हैं /var/www/cwd.com। और केवल आप (cwd) इसे लिख सकते हैं। यदि आप अपने एप्लिकेशन (अपाचे के माध्यम से) को उस निर्देशिका में फ़ाइलों को लिखने / संशोधित करने की अनुमति देना चाहते हैं, तो आप इसे 770 तक भेज सकते हैं।

मुझे लगता है कि यह आपके सभी मुद्दों को कवर करता है, मुझे लगता है कि उपयोगकर्ता के अपाचे को बदलने का कोई कारण नहीं है।


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

@cwd क्या आपने इसे समाप्त किया है?
रिकी बॉयस

@cwd यह सटीक प्रश्न था जो मेरे पास था। : यही कारण है कि मैं इस के लिए कहा है serverfault.com/questions/807723/...
नंदकुमार Edamana
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.