यह एक लैम्प स्टैक सुरक्षित करने के बारे में एक कैननिकल प्रश्न है
LAMP सर्वर हासिल करने के लिए पूर्ण दिशानिर्देश क्या हैं?
यह एक लैम्प स्टैक सुरक्षित करने के बारे में एक कैननिकल प्रश्न है
LAMP सर्वर हासिल करने के लिए पूर्ण दिशानिर्देश क्या हैं?
जवाबों:
डेविड का जवाब सर्वर सख्त के सामान्य सिद्धांतों की एक अच्छी आधार रेखा है। जैसा कि डेविड ने संकेत दिया, यह एक बहुत बड़ा सवाल है। आपके द्वारा ली जाने वाली विशिष्ट तकनीकें आपके वातावरण पर अत्यधिक निर्भर करती हैं और आपके सर्वर का उपयोग कैसे किया जाएगा। चेतावनी, यह एक परीक्षण वातावरण में बहुत सारे काम कर सकता है ताकि निर्माण और सही तरीके से किया जा सके। आपके उत्पादन वातावरण में एकीकृत करने के लिए बहुत सारे कामों का पालन किया गया, और इससे भी महत्वपूर्ण बात, व्यवसाय प्रक्रिया।
सबसे पहले, हालांकि, यह देखने के लिए जांचें कि क्या आपके संगठन की कोई सख्त नीतियां हैं, क्योंकि वे सबसे सीधे प्रासंगिक हो सकते हैं। यदि नहीं, तो आपकी भूमिका के आधार पर, उन्हें बनाने के लिए यह एक अच्छा समय हो सकता है। मैं भी नीचे से ऊपर प्रत्येक घटक से निपटने की सिफारिश करेंगे।
एल
वहाँ बहुत सारे अच्छे मार्गदर्शक हैं जो आपकी मदद करने के लिए उपलब्ध हैं। यह सूची आपके वितरण के आधार पर आपकी मदद कर सकती है या नहीं।
A
Apache सुरक्षित करने के लिए मज़ेदार हो सकती है। मुझे OS को सख्त करना और Apache या PHP की तुलना में प्रयोज्य बनाए रखना आसान लगता है।
उन्हें
P
यह सिक्योर प्रोग्रामिंग प्रैक्टिस के पूरे विचार में सुर्खियों में है, जो अपने आप में संपूर्ण अनुशासन है। SANS और OWASP में इस विषय पर हास्यास्पद जानकारी है, इसलिए मैं इसे यहां दोहराने की कोशिश नहीं करूंगा। मैं रनटाइम कॉन्फ़िगरेशन पर ध्यान केंद्रित करूंगा और अपने डेवलपर्स को बाकी के बारे में चिंता करने दूंगा। कभी-कभी LAMP में 'P' का अर्थ पर्ल होता है, लेकिन आमतौर पर PHP। मैं बाद की बात मान रहा हूं।
आपने एक प्रश्न पूछा है, जो बहुत स्पष्ट रूप से, इस विषय पर कुछ पुस्तकों के योग्य है। लेकिन कुछ सामान्य बुनियादी दिशानिर्देश हैं जो अच्छी तरह से काम करते हैं:
आशा है कि आप शुरू करने में मदद करता है।
यहाँ एक अच्छी चेकलिस्ट है जिसकी शुरुआत मुझे पसंद है।
डेविड जो बताता है, वह आपके इंस्टॉलेशन को और अधिक मॉड्यूलर करता है, इसका मतलब है कि मैं कुछ उपयोगकर्ताओं / समूहों के लिए विशेष रूप से एक कार्य के लिए उपयोग को प्रतिबंधित करता हूं और उनके दायरे को सीमित करता हूं, आपका LAMP स्टैक जितना सुरक्षित होता है: इसका एक उदाहरण अपाचे उपयोगकर्ता के लिए है अपाचे फ़ाइलों / फ़ोल्डरों के लिए अनुमतियों के अनुसार सेट किया गया है और किसी भी समूह में नहीं है जो महत्वपूर्ण सिस्टम फ़ाइलों / फ़ोल्डरों तक पहुंच सकता है। एक उपयोगकर्ता जो MySql तालिकाओं का उपयोग कर सकता है जो आपकी वेबसाइटों से संबद्ध हैं जिन्हें आप सेवा देने जा रहे हैं और केवल उन तालिकाओं को। इसके अतिरिक्त, आप PHP कॉल से न्यूनतम राशि तक पहुँच देने के लिए उनकी पहुँच को प्रतिबंधित कर सकते हैं। यह भी सुनिश्चित करें कि PHP फ़ाइल के माध्यम से उपयोग किया गया / उजागर किया गया MySQL उपयोगकर्ता नाम एक ही उपयोगकर्ता नाम या पासवर्ड का उपयोग नहीं करता है।
इसका क्या अर्थ है: यदि अपाचे उपयोगकर्ता या MySql उपयोगकर्ता समझौता कर रहे हैं, तो वे फ़ोल्डर के दायरे के बाहर कोई नुकसान नहीं कर सकते हैं (अपाचे उपयोगकर्ता के मामले में) अपाचे की पहुंच है (तालिका के बाहर) और ( s) / डेटाबेस (s) (MySQL डेटाबेस के लिए उपयोगकर्ता के मामले में)।
यदि किसी तरह MySQL उपयोगकर्ता से छेड़छाड़ की जाती है, तो वे उदाहरण के लिए, डेटाबेस तक नहीं पहुँच सकते हैं और MySQL से सभी डेटाबेस को छोड़ सकते हैं और आपके सभी डेटा को बर्बाद कर सकते हैं। वे कुछ परिस्थितियों में टेबल को गिराने या एक अलग डेटाबेस में कुछ तालिकाओं में जानकारी डालने में सक्षम हो सकते हैं, यही कारण है कि केवल टेबल एक्सेस देना महत्वपूर्ण है जहां यह बिल्कुल आवश्यक है और केवल आवश्यक अनुमतियाँ प्रदान करें ... यदि आप डॉन ' टी के लिए ड्रॉप टेबल विशेषाधिकार या विशेषाधिकारों को अद्यतन करने की आवश्यकता है, फिर उन्हें उस उपयोगकर्ता को न दें।
इसके अलावा, यदि किसी कारण से आपका प्रशासनिक खाता उपयोगकर्ता नाम और पासवर्ड MySQL के लिए पाया जाता है, यदि आप अपने सिस्टम पर किसी भी उपयोगकर्ता नाम की तुलना में एक अलग उपयोगकर्ता नाम का उपयोग करते हैं, तो उन्हें नुकसान करने के लिए अपने डेटाबेस में आने से पहले अपने सिस्टम की सुरक्षा को तोड़ना होगा। वही अपाचे उपयोगकर्ता और फाइलों तक पहुंच के बारे में सही है।
उदाहरण समय! मैं एक प्रणाली का उदाहरण देने जा रहा हूं ताकि विचार को सरल बनाया जा सके।
कहते हैं कि आपके पास आपके सिस्टम पर उपयोगकर्ता हैं (रूट को सुरक्षा के लिए umod -l या passwd -l, इत्यादि के माध्यम से अक्षम किया जाना चाहिए): जॉन, बार्नी, टेरेन्स, और लिसा।
आप बिगबर्ड के नाम के साथ MySQL में एक उपयोगकर्ता बना सकते हैं (सुनिश्चित करें कि आप हैशेड पासवर्ड का उपयोग करते हैं)। बिगबर्ड में केवल विशेषाधिकारों और अद्यतन विशेषाधिकारों का चयन होता है, लेकिन ड्रॉप या क्रिएट नहीं, और निश्चित रूप से नहीं । इसके अतिरिक्त, आप MySQL डेटाबेस पर काम करने के लिए नाम गारफ़ील्ड के साथ एक और प्रशासनिक MySQL उपयोगकर्ता बनाते हैं और आप रूट उपयोगकर्ता को MySQL डेटाबेस से हटा देते हैं ताकि इसे कंप्रेस न किया जा सके। गारफील्ड दी गई है । MySQL में विशेषाधिकार (प्रभावी रूप से, यह केवल रूट का नाम बदल रहा है)।
अब, आप या तो एक अपाचे समूह या एक उपयोगकर्ता बनाते हैं और हम इसे apweb2 कहेंगे। Appweb2 अन्य समूहों का सदस्य नहीं है, और Apache के लिए सभी फ़ाइलें / फ़ोल्डर / home / apweb2 / में संग्रहीत किए जाते हैं। प्रत्येक वर्चुअल होस्ट का अपना सबफ़ोल्डर होगा और इनमें से प्रत्येक होस्ट के पास उस सबफ़ोल्डर में दस्तावेज़ रूट सेट होगा। सिम्बलिंक को निष्क्रिय कर दिया जाएगा ताकि गलती से बाकी सिस्टम तक पहुंच न हो सके।
इसके अलावा, आप केवल कुछ उपयोगकर्ताओं (या कुछ समूहों के लिए ssh अभिगमन को प्रतिबंधित कर सकते हैं, मैं उन्हें ssh समूह में रखना पसंद करता हूँ, और केवल वही चीज़ उपयोग करने में सक्षम बनाता हूँ)।
इसके अलावा, आप चुन सकते हैं कि किन उपयोगकर्ताओं के पास चीजों को आगे भी प्रतिबंधित करने के लिए sudo विशेषाधिकार हैं। एक और कदम आप इसे आगे ले जा सकते हैं कि कोई भी ssh उपयोगकर्ता sudo में सक्षम न हो, आप ऐसे विशेष उपयोगकर्ता बना सकते हैं जो sudo का उपयोग कर सकते हैं जो ssh का उपयोग नहीं कर सकते हैं, ताकि एक बार ssh में आने के बाद, आपको दूसरे उपयोगकर्ता में लॉग इन करना पड़े सुडो तक पहुँच।
इसलिए, प्रत्येक खंड को संशोधित करके, यदि एक समझौता किया जाता है, तो पूरे स्टैक से समझौता नहीं किया जाएगा और आप फिर से खरोंच से सभी को शुरू करने के बजाय 1 समस्या का उपाय कर सकते हैं।
मुझे यह दस्तावेज़ SANS.org से वास्तव में उपयोगी http://www.sans.org/score/checklists/linuxchecklist.pdf मिला ।
वर्तमान समय में, कंटेनर वर्चुअलाइजेशन, अर्थात् डोकर, सिस्टमड-एनएसपीएन और कंटेनर वर्चुअलाइजेशन के तंत्र की उपेक्षा नहीं करते हैं, जिस पर वे निर्मित होते हैं (नामस्थान, cgroups)। कंटेनर वर्चुअलाइजेशन का उपयोग आपको प्रक्रियाओं को अलग करने की अनुमति देता है, उदाहरण के लिए, यदि सेवाओं में से एक में समझौता किया जाता है, तो एक हमलावर अन्य सेवाओं तक पहुंच प्राप्त नहीं करेगा।
LAMP के मामले में, उदाहरण के लिए, SSH- सर्वर, अपाचे, MySQL, PHP-FPM / पायथन / पर्ल / आदि के साथ चार डॉक कंटेनर का उपयोग करना संभव है।