MySQL सबसे लोकप्रिय रिलेशनल डेटाबेस मैनेजमेंट सिस्टम में से एक है जो डेटाबेस में घुसने की कोशिश कर रहे हमलावरों के लिए एक जैकपॉट है। एक नव-स्थापित MySQL डेटाबेस सर्वर में कई कमजोरियाँ और खामियाँ हो सकती हैं। चूंकि डेटा सुरक्षा का बहुत महत्व है, इसलिए MySQL सुरक्षा के हर पहलू को समझना अनिवार्य है।
यह आलेख आपके MySQL डेटाबेस की ऑडिटिंग और सुरक्षा पर केंद्रित है और इसकी सुरक्षा को सख्त करने के लिए नौ युक्तियां प्रदान करता है।
1. अनावश्यक विशेषाधिकार अनुदान से बचें
माई एसक्यूएल कई विशेषाधिकार बयानों की अनुमति देता है जो जब एक वंचित उपयोगकर्ता को अनावश्यक रूप से असाइन किया जाता है तो फाइलों को पढ़ने/लिखने और अन्य उपयोगकर्ता विशेषाधिकारों को कम करने का कारण बन सकता है। कुछ सबसे संभावित जोखिम भरे विशेषाधिकार कथन हैं FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN, इत्यादि। आप इनके बारे में MySQL के आधिकारिक दस्तावेज़ीकरण से अधिक पढ़ सकते हैं। इसलिए, गैर-प्रशासनिक खातों को FILE, GRANT, SUPER, और PROCESS जैसे सुपरयुसर विशेषाधिकार असाइन न करें। आप इन अनावश्यक वैश्विक, डेटाबेस और तालिका-स्तरीय अनुमतियों को निम्नानुसार निरस्त कर सकते हैं:
*.* 'user_name'@'host_name' से सभी को निरस्त करें; #वैश्विक विशेषाधिकार
बनाना रद्द करें, डेटाबेस_नाम को छोड़ें।* 'user_name'@'host_name' से; #डेटाबेस विशेषाधिकार
'user_name'@'host_name' से डेटाबेस_नाम.टेबल_नाम पर डालें, अद्यतन करें, हटाएं; #टेबल विशेषाधिकार
फ्लश विशेषाधिकार;
2. दूरस्थ लॉगिन प्रतिबंधित करें
रिमोट एक्सेस डेटाबेस प्रशासकों के काम को आसान बनाता है, लेकिन यह सर्वर को संभावित कमजोरियों और कारनामों के लिए जोखिम में डालता है। आप मुख्य कॉन्फ़िगरेशन फ़ाइल में एक स्किप-नेटवर्किंग चर जोड़कर और सेवा को पुनरारंभ करके सभी प्रकार के MySQl उपयोगकर्ता खातों के लिए दूरस्थ पहुँच को अक्षम कर सकते हैं।
[mysqld]
स्किप-नेटवर्किंग
सुडो सेवा mysql पुनरारंभ करें
इसी तरह, आपको रूट अकाउंट एक्सेस को अक्षम करना होगा, यदि सभी रूट अकाउंट रिमोट लॉगिन को प्रतिबंधित करने के लिए नहीं हैं। यह सावधानी MySQL रूट खाते को ब्रूटफोर्स करने से रोकती है।
mysql> mysql.user से हटाएं जहां उपयोगकर्ता = 'रूट' और होस्ट नहीं ('लोकलहोस्ट', '127.0.0.1', ':: 1'); mysql> फ्लश विशेषाधिकार;
3. कार्य अक्षम करें (load_file, outfile, dumpfile)
स्थानीय फ़ाइल इंजेक्शन के खिलाफ MySQL को सुरक्षित करने के लिए एक और सावधानी केवल FILE अनुदान विशेषाधिकार के माध्यम से सुलभ कार्यों को अक्षम करना है। FILE एक ऐसा विकल्प है जो कम-विशेषाधिकार वाले उपयोगकर्ताओं को वैश्विक कमांड विकल्पों के साथ सर्वर पर फ़ाइलों को पढ़ने या लिखने में सक्षम बनाता है।
- फाइल लोड करो
load_file फ़ंक्शन सर्वर से फ़ाइल सामग्री को एक स्ट्रिंग के रूप में लोड करता है। उदाहरण के लिए, निम्न आदेश से सभी सामग्री लोड करेगा /etc/passwd फ़ाइल इस प्रकार है:
load_file ('/ etc/passwd') का चयन करें
- आउटफाइल
इसी तरह, आउटफाइल फ़ंक्शन स्थानीय सर्वर फ़ाइलों के लिए सामग्री लिखता है। सर्वर में फ़ाइल में पेलोड लिखने के लिए हमलावर इस फ़ंक्शन का उपयोग इस प्रकार कर सकते हैं:
आउटफाइल '/tmp/file.txt' में 'स्थानीय फ़ाइल SQL इंजेक्शन' चुनें;
बिल्ली /tmp/file.txt
आउटपुट:
स्थानीय फ़ाइल SQL इंजेक्शन
- डंप फ़ाइल
यह फ़ंक्शन स्क्रीन पर आउटपुट लौटाए बिना फ़ाइल को लिखने के लिए चुनिंदा कारण का उपयोग करता है।
बिल्ली /tmp/file.txt
'हैलो वर्ल्ड!' चुनें डंपफाइल '/ tmp/world' में;
आउटपुट:
क्वेरी ठीक, 1 पंक्ति प्रभावित (0.001 सेकंड)
आप निम्न प्रकार से FILE विशेषाधिकार को निरस्त करके इन कार्यों को अक्षम कर सकते हैं:
'user_name'@'localhost' से *.* पर फ़ाइल को निरस्त करें;
संबंधित: काली लिनक्स में मेटास्प्लोइट के लिए एक शुरुआती मार्गदर्शिका (व्यावहारिक उदाहरणों के साथ)
4. डिफ़ॉल्ट पोर्ट अक्षम करें
हम जानते हैं कि MySQL सेवाएँ पोर्ट 3306 पर चलती हैं, और हमलावर नेटवर्क पर चल रही सेवाओं की जाँच करने के लिए पोर्ट को स्कैन करते हैं। अस्पष्टता से सुरक्षा जोड़ने के लिए और इसकी मुख्य कॉन्फ़िगरेशन फ़ाइल में पोर्ट सिस्टम चर को संपादित करके डिफ़ॉल्ट MySQL पोर्ट को बदलने के लिए, आपको निम्नलिखित दर्ज करने की आवश्यकता होगी:
विम /etc/mysql/my.cnf
पोर्ट = XXXX
सुडो सेवा mysql पुनरारंभ करें
5. खाता नाम में वाइल्डकार्ड से बचें
MySQL में खाता नामों में दो भाग होते हैं जो एक उपयोगकर्ता और एक होस्टनाम "user_name"@"host_name" होता है। यह व्यवस्थापक को समान नाम वाले उपयोगकर्ताओं के लिए खाते बनाने में सक्षम बनाता है जो विभिन्न होस्ट से जुड़ते हैं। हालांकि, खाते के नाम का होस्ट हिस्सा वाइल्डकार्ड सम्मेलनों की अनुमति देता है जो कहीं से भी डेटाबेस तक पहुंच का एक बिंदु हो सकता है।
होस्टनाम या आईपी एड्रेस वैल्यू का वैकल्पिक उपयोग 'user_name'@'%' के बराबर है, जहां % MySQL पैटर्न से मेल खाता LIKE ऑपरेशन से मेल खाता है, और % का मतलब किसी भी होस्टनाम से है। इस बीच, '192.168.132.2%' से एक्सेस का मतलब क्लास सी नेटवर्क से कोई भी प्रयास है। इसके अलावा, कोई भी होस्ट भाग को '192.18.132.mysql.com' नाम देकर डेटाबेस तक पहुंच सकता है।
ऐसे प्रयासों से बचने के लिए, MySQL एक IP पते के नेटवर्क बिट्स की पहचान करने के लिए होस्ट मान के साथ एक नेटमास्क को परिभाषित करने की अनुमति देता है:
क्लाइंट-ip_add और नेटमास्क = host_name
होस्टनाम बनाने का सिंटैक्स host_ip/netmask है:
उपयोगकर्ता 'झॉन'@'192.168.132.0/255.255.255.0' बनाएं;
उपरोक्त होस्ट मान उपयोगकर्ता को सक्षम बनाता है जॉन 192.168.132.0-192.168.132.255 की सीमा के भीतर किसी भी आईपी से डेटाबेस तक पहुंचने के लिए। इसी तरह, 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 के मेजबान मान मेजबानों को कक्षा ए और बी नेटवर्क से अनुमति देंगे। जबकि 192.168.132.5 केवल विशिष्ट आईपी से एक्सेस की अनुमति देगा।
6. स्पष्ट पहुंच अक्षम करें
MySQL में उपयोगकर्ता नाम या तो एक ऐसा नाम है जिसके साथ डेटाबेस आने वाले कनेक्शन स्वीकार करता है या एक खाली उपयोगकर्ता नाम "@"host_name" जो एक अनाम उपयोगकर्ता बनाता है। हालाँकि, एक अनाम उपयोगकर्ता की उपस्थिति डेटाबेस सर्वर तक पहुँचने के लिए हमलावरों का लाभ उठा सकती है। इसके अलावा, MySQL 5.7 से पहले के MySQL संस्करण, उपयोगकर्ताओं का एक अनाम सेट बनाते हैं, और संस्करण अपग्रेड के बाद इंस्टॉलेशन अभी भी इन उपयोगकर्ताओं को जोड़ता है।
mysql.user से उपयोगकर्ता, होस्ट, पासवर्ड का चयन करें जहां उपयोगकर्ता '' पसंद करता है;
आप नोट कर सकते हैं कि उपयोगकर्ता और पासवर्ड कॉलम खाली हैं, और एक्सेस लोकलहोस्ट तक सीमित है। हालाँकि, आप नहीं चाहते कि कोई भी डेटाबेस तक पहुँच प्राप्त करे। अनाम उपयोगकर्ताओं को हटाने के लिए निम्न आदेश का उपयोग करें:
ड्रॉप उपयोगकर्ता ""@"लोकलहोस्ट"
फ्लश विशेषाधिकार;
7. मालिक या समूह के रूप में गैर-रूट खाता सेट करें
गैर-रूट उपयोगकर्ता खाता सेट करना MySQL रूट उपयोगकर्ता से संबंधित नहीं है। tar और tar.gz संकुल से Linux/Unix सिस्टम में MySQL संस्थापन सर्वर को किसी भी वंचित उपयोक्ता द्वारा चलाने की अनुमति देता है। यह एक सुरक्षा खामी है क्योंकि FILE अनुदान विकल्प वाला कोई भी उपयोगकर्ता सर्वर पर फ़ाइलों को संपादित या बना सकता है। हालांकि, यह एक त्रुटि देता है जब कोई उपयोगकर्ता इसे बिना एक्सेस करने का प्रयास करता है -उपयोगकर्ता = जड़ त्रुटि।
आप एक अलग Linux उपयोगकर्ता के रूप में डेटाबेस सर्वर तक पहुँचने के अंगूठे के नियम का अभ्यास करके इससे बच सकते हैं। नियमित Linux उपयोगकर्ता के रूप में mysqld को चलाने के लिए, सर्वर को रोकें और बदलें पढ़ने/लिखने की अनुमति MySQl सर्वर से mysql, इस प्रकार है:
chown -R mysql /path/to/mysql/datadir
MySQL मुख्य कॉन्फ़िगरेशन फ़ाइल खोलें, एक नया mysql उपयोगकर्ता जोड़ें, और सर्वर की आवश्यकता से बचने के लिए सेवा को पुनरारंभ करें:
विम /etc/mysql/my.cnf
उपयोगकर्ता = mysql
सुडो सेवा mysql पुनरारंभ करें
8. रूट अकाउंट के लिए पासवर्ड सेट करें
डेबियन-आधारित लिनक्स वितरण में एक इंटरैक्टिव शेल के माध्यम से MySQL की स्थापना रूट उपयोगकर्ता खाता बनाती है और आपको एक पासवर्ड सेट करने के लिए कहती है। हालांकि, गैर-सहभागी शेल संस्थापन और Red-Hat-आधारित वितरण में ऐसा नहीं होता है। जैसा कि ऊपर कहा गया है, एक लिनक्स मशीन का एक गैर-रूट उपयोगकर्ता mysql रूट उपयोगकर्ता खाते का उपयोग करके एक्सेस कर सकता है -उपयोगकर्ता = जड़ विकल्प। आप निम्न प्रकार से पासवर्ड सेट करके इससे बच सकते हैं:
सुडो mysqladmin पासवर्ड
विम /etc/mysql/my.cnf
पासवर्ड =
सुडो सेवा mysql पुनरारंभ करें
9. ट्रांजिट में और आराम से डेटा एन्क्रिप्शन सुनिश्चित करें
क्लाइंट और सर्वर के बीच डिफ़ॉल्ट अनएन्क्रिप्टेड संचार किसी भी व्यक्ति द्वारा डेटा अवरोधन का जोखिम रखता है। इसी तरह, डेटाबेस में अनएन्क्रिप्टेड उपयोगकर्ता डेटा उपयोगकर्ता की गोपनीयता और अखंडता को जोखिम में डालता है। MySQL TLS/SSL प्रोटोकॉल पर क्लाइंट और सर्वर के बीच डेटा एन्क्रिप्शन का समर्थन करता है, जबकि अनएन्क्रिप्टेड संचार केवल तभी स्वीकार्य होता है जब दोनों संचार पक्ष एक ही नेटवर्क के भीतर हों।
सिस्टम भंग होने पर भी सर्वर में संग्रहीत डेटा की सुरक्षा के लिए MySQL अब आराम से एन्क्रिप्शन का समर्थन करता है।
MySQL उन्नत सुरक्षा: स्वयं को सुरक्षित रखें
यह सुनिश्चित करना कि आपके पास ऑनलाइन सुरक्षा का उच्चतम स्तर है, महत्वपूर्ण है, और इस लेख ने आपको सही दिशा में कुछ उपयोगी संकेत दिए होंगे। उपरोक्त चरण आपके डेटाबेस सर्वर को सुरक्षित करने के लिए उपयोगी हैं, लेकिन गैर-प्रशासनिक उपयोगकर्ताओं को न्यूनतम अनुमतियाँ कैसे असाइन करना सीखना भी आवश्यक है।
सिर्फ एक टेक्स्ट एडिटर और इस मूल संरचना की रूपरेखा, या "स्कीमा" के साथ अपना खुद का mySQL डेटाबेस बनाएं।
आगे पढ़िए
- प्रोग्रामिंग
- सुरक्षा
- प्रोग्रामिंग
- सुरक्षा युक्तियाँ
- सुरक्षा
रुमैसा MUO में एक स्वतंत्र लेखिका हैं। उसने गणितज्ञ से लेकर सूचना सुरक्षा के प्रति उत्साही तक कई टोपियाँ पहनी हैं, और अब वह SOC विश्लेषक के रूप में काम कर रही है। उसकी रुचियों में नई तकनीकों के बारे में पढ़ना और लिखना, लिनक्स वितरण, और सूचना सुरक्षा के आसपास कुछ भी शामिल है।
हमारे न्यूज़लेटर की सदस्यता लें
तकनीकी युक्तियों, समीक्षाओं, निःशुल्क ई-पुस्तकों और अनन्य सौदों के लिए हमारे न्यूज़लेटर से जुड़ें!
सब्सक्राइब करने के लिए यहां क्लिक करें