जवाबों:
सबसे पहले, यह ध्यान रखें कि Apache (php, cgi, ruby, ...) में किसी भी स्क्रिप्टिंग की क्षमता स्क्रिप्ट चलाने वाले उपयोगकर्ता के विशेषाधिकारों के साथ एक शेल खाते के संभावित समकक्ष है।
यदि सर्वर कई उपयोगकर्ताओं के साथ साझा किया जाता है, तो आप suexec (- या ITK MPM - डेविड शमिट द्वारा सुझाए गए ) का उपयोग करने के बारे में सोचना चाह सकते हैं, इसलिए प्रत्येक स्क्रिप्ट एक ही अपाचे उपयोगकर्ता के रूप में नहीं चलती है।
वर्चुअलाइजेशन या चेरोट अपाचे, ताकि कोई भी समझौता कम से कम कुछ हद तक सुरक्षा की एक अतिरिक्त परत में निहित हो। इस बात से अवगत रहें कि जब आप अपाचे को काटते हैं, तो रखरखाव कठिन हो सकता है, जैसा कि आप जेल में चल रहे पुस्तकालयों को समाप्त करते हैं आदि। यदि आप फ्रीबीएसडी पर हैं, तो आप इसके बजाय जेल का उपयोग कर सकते हैं, जो बनाए रखने के लिए बहुत आसान है, क्योंकि आप बस अपाचे स्थापित कर सकते हैं। बंदरगाहों से, और किसी भी पुस्तकालय निर्भरता और मैन्युअल रूप से फ़ाइलों को स्थानांतरित करने के बारे में चिंता किए बिना, इसके भीतर से पोर्टाउडिट चलाएं, जो हमेशा एक बदसूरत गड़बड़ हो जाता है। बीएसडी जेलों के साथ आप बस पैकेज मैनेजमेंट सिस्टम (पोर्ट्स) का उपयोग कर सकते हैं। (GNU / लिनक्स पर आप वर्चुअलाइजेशन के लिए VServer का भी उपयोग कर सकते हैं । - डेविड श्मिट द्वारा सुझाए गए )
(जाहिर है) अपाचे के लिए ही नहीं, बल्कि PHP, रूबी, पर्ल, आदि के साथ अपडेट और पैचअप करते रहें ... आप सभी अपडेट्स को देने के लिए अपने OS पर भरोसा न करें। कुछ डिस्ट्रो अपने पैच के साथ बेहद धीमी हैं। जितना संभव हो, 0-दिन की कमजोरियों के लिए जोखिम समय को सीमित करें। चिपका milw0rm अपने आरएसएस रीडर में फ़ीड, की सदस्यता insecure.org मेलिंग सूची, आदि ... इतना ही नहीं यह पहले अपने ओएस एक पैच जारी करने के लिए चारों ओर हो जाता है आप कमजोरियों के बारे में जानने के लिए, आप भी कुछ php में कमजोरियों के बारे में जानेंगे में मदद मिलेगी उदाहरण के लिए cms अनुप्रयोग, जो आपके OS द्वारा प्रबंधित या पैच भी नहीं किया जा सकता है।
अपने फाइल सिस्टम पर परिवर्तनों पर नज़र रखने के लिए ट्रिपवायर / एड, ऑडिट या एमट्री (बीएसडी पर) जैसी किसी चीज़ का उपयोग करें । यह एक वास्तव में महत्वपूर्ण है। आपके पास नियमित रूप से भेजे गए कोई भी बदलाव, हर दिन मैन्युअल रूप से उनकी समीक्षा करें। यदि कोई फ़ाइल बदल जाती है जिसे बदलना नहीं चाहिए, तो जांच क्यों करें। यदि कुछ दुर्भावनापूर्ण जावास्क्रिप्ट किसी भी तरीके से आपके पृष्ठों में सम्मिलित हो जाती है, तो आप इसे इस तरह से पकड़ लेंगे। यह न केवल आपके सर्वर को बचाता है, बल्कि आपके उपयोगकर्ताओं को भी, क्योंकि आपके अपने वेबपेजों को आपके आगंतुकों को संक्रमित करने के लिए दुरुपयोग किया जा सकता है। (यह एक बहुत ही सामान्य रणनीति है, हमलावर अक्सर आपके सर्वर की भी परवाह नहीं करते हैं, वे केवल आपके कई आगंतुकों को तब तक संक्रमित करना चाहते हैं जब तक कि खोज नहीं हो जाती। ये हमलावर आमतौर पर अपनी पटरियों को छिपाने के लिए भी परेशान नहीं करते हैं। जितनी जल्दी हो सके इस तरह से समझौता करना बहुत महत्वपूर्ण है।)
Php की सुरक्षा के लिए suhosin जैसे सामान का उपयोग करने से मदद मिलती है। लेकिन इसे समझना भी सीखें, यह आपके एप्लिकेशन के अपेक्षित मापदंडों के लिए कॉन्फ़िगर है।
PaX जैसे कर्नेल पैच का उपयोग करने से आपको कई बफर अतिप्रवाह कमजोरियों से बचाने में मदद मिल सकती है। भले ही आपका सॉफ्टवेयर असुरक्षित हो। (यह आपको अजेय नहीं बनाता है, यह अभी तक एक और मामूली, परत है।)
कुछ सुरक्षा उपकरण का उपयोग करते समय अति आत्मविश्वास न करें। आपके द्वारा उपयोग किए जाने वाले टूल को समझें और सामान्य ज्ञान का उपयोग करें। पढ़ो, सीखो, जितना हो सके उतना साथ रखो।
अनिवार्य अभिगम नियंत्रण का उपयोग करने पर विचार करें (जैसे: SELinux )। यह आपको प्रत्येक एप्लिकेशन के लिए यह निर्दिष्ट करने की अनुमति देता है कि उसे क्या करना है, महान विवरण में। इसे एक्सेस करने के लिए किन फ़ाइलों की अनुमति है। कर्नेल कॉल क्या है, इसे बनाने की अनुमति है, आदि यह एक बहुत ही सम्मिलित प्रक्रिया है और इसके लिए बहुत सारी समझ की आवश्यकता होती है। कुछ डिस्ट्रो अपने पैकेजों के लिए पूर्व-निर्मित SELinux नीतियां प्रदान करते हैं (उदाहरण: Gentoo )। यह सुझाव नीचे दिए गए एक विरोधाभास की तरह है, लेकिन फिर भी मान्य है, फिर भी।
चीजों को सरल रखें। एक जटिल सुरक्षा रणनीति आपके खिलाफ काम कर सकती है।
अपाचे में, एक बहुत ही प्रतिबंधात्मक डिफ़ॉल्ट नियम (विकल्प कोई नहीं, सभी से इनकार, आदि ...) सेट करें और विशिष्ट VirtualHosts के लिए आवश्यकतानुसार ओवरराइड करें।
सभी डॉटफ़ाइल्स तक पहुँच से इनकार करें (जो तुरंत .htaccess फ़ाइलों को भी कवर करता है)
हमेशा किसी भी तरह के पासवर्ड प्रमाणीकरण के लिए https का उपयोग करें।
फ़ायरवॉल को एक डिफ़ॉल्ट-बाय-डिफ़ॉल्ट नीति होना चाहिए। विशिष्ट ट्रैफ़िक लॉग करने के लिए अपने फ़ायरवॉल में कुछ विशिष्ट नियम बनाएँ।
विसंगतियों के लिए अपने लॉग को स्कैन करने के लिए लॉग पार्सिंग स्क्रिप्ट सेट करें। ( प्रस्तावना आईडीएस सुइट ऐसा कर सकता है, लेकिन ईमानदारी से, मैं आपको समय के साथ अपनी स्क्रिप्ट बनाने की सलाह देता हूं, क्योंकि यह आपको अपने स्वयं के टूल और नियमों को बेहतर ढंग से समझने में मदद करेगा।)
सर्वर लॉग आप दैनिक रिपोर्ट पर पिछले लॉग इन उपयोगकर्ताओं, सक्रिय कनेक्शन, बैंडविड्थ इस्तेमाल किया, आदि है ...
सुसाइड बायनेरिज़, विश्व लेखन योग्य फ़ाइलों और उस तरह के सामान के लिए एक क्रोन स्कैन करें, और उन्हें आपके पास भेज दिया है।
आपके द्वारा सेट किए गए किसी भी सामान के लिए, आपको समय के साथ अपवादों की एक सूची बनानी चाहिए। (फ़ोल्डरों को अनदेखा करने के लिए फ़ोल्डर्स, 777 फाइलों को अनुमति देने के लिए बदल जाता है, बायनेरिज़ को अनुमति देने के लिए पर्याप्त है)। यह महत्वपूर्ण है कि आपको केवल उन चीजों के बारे में सूचित किया जाए जो नहीं होनी चाहिए। यदि आपको हर दिन तुच्छ सामान के साथ एक मेल मिलता है, तो आप उन्हें अनदेखा करना शुरू कर देंगे, और वे व्यर्थ हो जाएंगे।
एक अच्छी ठोस स्तरित निरर्थक बैकअप रणनीति रखें। और यह मत समझो कि हर चीज की एक छवि या कॉपी बनाना काम करता है। उदाहरण के लिए, यदि MySQL आपके बैकअप के दौरान किसी तालिका में लिखने के बीच में है, तो जब आप इस बैकअप को पुनर्स्थापित करते हैं तो आपकी MySQL बाइनरी फाइलें दूषित हो सकती हैं। तो आपको एक क्रोन की आवश्यकता होगी जो कि mysqldump के आपके डेटाबेस को नियमित छवियों के शीर्ष पर या रात के टारबॉल या संस्करण नियंत्रण या आपके पास जो भी सेटअप है, उसके ऊपर है। अपनी बैकअप रणनीति के बारे में सोचें। मेरा मतलब है, वास्तव में इसके बारे में सोचते हैं।
सुरक्षा के लिए इस तरह की सूचियों पर भरोसा न करें :) गंभीरता से! आप इन सभी को इंटरनेट पर बहुत सारे पाएंगे, उन सभी को पढ़ें, हर सुझाव पर शोध करें और अपने स्वयं के दिमाग को बनाने के लिए सामान्य ज्ञान और अनुभव का उपयोग करें। अंत में, अनुभव और सामान्य ज्ञान ही ऐसी चीजें हैं जो आपको बचाएंगी। न सूची, न उपकरण। पढ़ें, लेकिन बिना समझे कॉपी न करें।
मैं SAN से लिनक्स सुरक्षा चेकलिस्ट की सिफारिश करता हूं । मैं इसका उपयोग करता हूं, साथ ही इन-हाउस प्रक्रियाओं का उपयोग करता हूं। चेकलिस्ट थोड़ा आउट-डेटेड हो सकता है, लेकिन कई प्रमुख बिंदु सही हैं।
जाँच करने के लिए हमेशा अनगिनत अनुमतियाँ होंगी, अनगिनत जाँच-पड़ताल करने वाले, नए बग / भेद्यता की खोज को कभी खत्म नहीं करेंगे। सुरक्षा मुझे नहीं लगता कि कुछ ऐसा है जिसे आप चालू या बंद करते हैं, यह कुछ ऐसा है जो आप लगातार करते हैं।
सॉफ्टवेयर की "अपरिहार्य विफलता" को देखते हुए, SELinux कुछ चिंताओं को दूर करने में मदद करता है (सुरक्षा के लिए फिर से कोई चांदी की गोली नहीं)। एक उपयोगकर्ता के आवेदन को संभालने के लिए सही SELinux नीति से छेड़छाड़ की जाती है, यह उसे सामान्य रूप से कार्य करने से रोकेगा (यानी यदि SELinux अक्षम या अनुमित है) विशेषाधिकार। इस कोर्स के लिए आपको अपने ऑडिट लॉग पर नजर रखने और स्थापित पॉलिसी का विश्लेषण करने और इसे संशोधित करने की आवश्यकता होगी जहां एप्लिकेशन को कार्य करने की अनुमति देना आवश्यक है।
यह कहते हुए कि डिफ़ॉल्ट नीति मदद नहीं करेगी, लेकिन मैं व्यक्तिगत रूप से जानना चाहता हूं कि यह क्या अनुमति देता है।