आज हम जिस युग में रह रहे हैं, उसमें कम सुरक्षित वातावरण वाली कोई भी चीज आसानी से हमले का निशाना बन जाती है और हमलावरों के लिए वरदान बन जाती है। पिछले 20 वर्षों की तुलना में, आजकल हैकर्स न केवल कौशल के साथ बल्कि उन उपकरणों के साथ भी अधिक उन्नत हैं जिनका वे उपयोग कर रहे हैं। यह कोई आश्चर्य की बात नहीं है कि क्यों कुछ बड़ी कंपनियों को हैक किया जा रहा है और उनका मूल्यवान डेटा लीक किया जा रहा है।
केवल वर्ष 2021 में, डेटा उल्लंघनों से संबंधित 10 से अधिक घटनाएं पहले ही हो चुकी हैं। सबसे हालिया घटना की रिपोर्ट एक प्रसिद्ध ऑडियो निर्माता BOSE ने की थी, जो मई में हुई थी। BOSE ने पाया कि उसके कुछ वर्तमान और पूर्व कर्मचारियों की व्यक्तिगत जानकारी हमलावरों द्वारा एक्सेस की गई थी। हमले में उजागर की गई व्यक्तिगत जानकारी में नाम, सामाजिक सुरक्षा नंबर, मुआवजे की जानकारी और मानव संसाधन से संबंधित अन्य जानकारी शामिल है।
आपको क्या लगता है कि इस तरह के हमले का उद्देश्य क्या है और हैकर को ऐसा करने के लिए क्या प्रेरित करता है? यह स्पष्ट रूप से पैसे के बारे में है। चूंकि चोरी का डेटा भी अक्सर बेचा जाता है, बड़ी कंपनियों पर हमला करके हैकर्स पैसा कमा सकते हैं। न केवल महत्वपूर्ण डेटा व्यवसाय के प्रतिस्पर्धियों को बेचा जा सकता है, बल्कि हैकर्स एक ही समय में एक बड़ी फिरौती भी मांग सकते हैं।
तो हम इसे डेटाबेस से कैसे जोड़ सकते हैं? चूंकि डेटाबेस कंपनी के लिए बड़ी संपत्तियों में से एक है, इसलिए इसकी बेहतर सुरक्षा के साथ देखभाल करने की अनुशंसा की जाती है ताकि हमारे मूल्यवान डेटा को अधिकांश समय सुरक्षित रखा जा सके। अपने पिछले ब्लॉग पोस्ट में, हम पहले से ही SELinux के बारे में कुछ परिचय के माध्यम से गए, इसे कैसे सक्षम किया जाए, SELinux में किस प्रकार का मोड है और इसे MongoDB के लिए कैसे कॉन्फ़िगर किया जाए। आज, हम देखेंगे कि MySQL आधारित सिस्टम के लिए SELinux को कैसे कॉन्फ़िगर किया जाए।
SELinux के शीर्ष 5 लाभ
आगे बढ़ने से पहले, शायद आप में से कुछ लोग सोच रहे होंगे कि क्या SELinux कोई सकारात्मक लाभ प्रदान करता है, क्योंकि इसे सक्षम करने में थोड़ी परेशानी होती है। यहां शीर्ष 5 SELinux लाभ दिए गए हैं जिन्हें आप छोड़ना नहीं चाहते हैं और जिन पर विचार करना चाहिए:
-
एक ही समय में प्रक्रियाओं की रक्षा करते हुए डेटा गोपनीयता और अखंडता को लागू करना
-
सेवाओं और डेमॉन को अधिक अनुमानित होने तक सीमित रखने की क्षमता
-
विशेषाधिकार वृद्धि हमलों के जोखिम को कम करना
-
नीति सिस्टम-व्यापी लागू है, उपयोगकर्ता के विवेक पर सेट नहीं है और प्रशासनिक रूप से परिभाषित है
-
एक सुक्ष्म अभिगम नियंत्रण प्रदान करना
इससे पहले कि हम अपने MySQL इंस्टेंस के लिए SELinux को कॉन्फ़िगर करना शुरू करें, क्यों न सभी MySQL आधारित परिनियोजन के लिए SELinux को ClusterControl के साथ सक्षम करने के बारे में जानें। हालांकि चरण सभी डेटाबेस प्रबंधन प्रणालियों के लिए समान है, हमें लगता है कि आपके संदर्भ के लिए कुछ स्क्रीनशॉट शामिल करना एक अच्छा विचार है।
MySQL प्रतिकृति के लिए SELinux को सक्षम करने के चरण
इस खंड में, हम MySQL प्रतिकृति को ClusterControl 1.8.2 के साथ परिनियोजित करने जा रहे हैं। मारियाडीबी, गैलेरा क्लस्टर या माईएसक्यूएल के लिए चरण समान हैं:यह मानते हुए कि सभी नोड्स तैयार हैं और पासवर्ड रहित एसएसएच कॉन्फ़िगर किया गया है, आइए परिनियोजन शुरू करें। हमारे सेटअप के लिए SELinux को सक्षम करने के लिए, हमें "AppArmor/SELinux को अक्षम करें" को अनचेक करना होगा, जिसका अर्थ है कि SELinux को सभी नोड्स के लिए "अनुमोदक" के रूप में सेट किया जाएगा।
आगे, हम एक विक्रेता के रूप में Percona को चुनेंगे (आप MariaDB भी चुन सकते हैं) , Oracle या MySQL 8 भी), फिर "रूट" पासवर्ड निर्दिष्ट करें। आप अपने सेटअप के आधार पर एक डिफ़ॉल्ट स्थान या अपनी अन्य निर्देशिकाओं का उपयोग कर सकते हैं।
एक बार जब सभी होस्ट जुड़ जाते हैं, तो हम परिनियोजन शुरू कर सकते हैं और इसे करने दे सकते हैं SELinux कॉन्फ़िगरेशन के साथ शुरू करने से पहले समाप्त करें।
SELinux को MariaDB प्रतिकृति के लिए सक्षम करने के चरण
इस खंड में, हम मारियाडीबी प्रतिकृति को क्लस्टर नियंत्रण 1.8.2 के साथ परिनियोजित करने जा रहे हैं।
हम एक विक्रेता और संस्करण 10.5 के रूप में मारियाडीबी का चयन करेंगे और साथ ही निर्दिष्ट करेंगे "रूट" पासवर्ड। आप अपने सेटअप के आधार पर एक डिफ़ॉल्ट स्थान या अपनी अन्य निर्देशिकाओं का उपयोग कर सकते हैं।
एक बार सभी मेजबानों को जोड़ लेने के बाद, हम परिनियोजन शुरू कर सकते हैं और इसे करने दे सकते हैं SELinux कॉन्फ़िगरेशन के साथ आगे बढ़ने से पहले समाप्त करें।
गैलेरा क्लस्टर के लिए SELinux सक्षम करने के चरण
इस खंड में, हम Galera Cluster को ClusterControl 1.8.2 के साथ परिनियोजित करने जा रहे हैं। एक बार फिर, "AppArmor/SELinux को अक्षम करें" को अनचेक करें, जिसका अर्थ है कि SELinux को सभी नोड्स के लिए "अनुमोदक" के रूप में सेट किया जाएगा:
आगे, हम एक विक्रेता के रूप में Percona और MySQL 8 को भी चुनेंगे "रूट" पासवर्ड निर्दिष्ट करें। आप अपने सेटअप के आधार पर एक डिफ़ॉल्ट स्थान या अपनी अन्य निर्देशिकाओं का उपयोग कर सकते हैं। एक बार सभी मेजबानों को जोड़ लेने के बाद, हम परिनियोजन शुरू कर सकते हैं और इसे समाप्त होने दे सकते हैं।
हमेशा की तरह, हम UI के "गतिविधि" अनुभाग में परिनियोजन की स्थिति की निगरानी कर सकते हैं।
MySQL के लिए SELinux को कैसे कॉन्फ़िगर करें
यह देखते हुए कि हमारे सभी क्लस्टर MySQL आधारित हैं, SELinux को कॉन्फ़िगर करने के चरण भी समान हैं। इससे पहले कि हम सेटअप के साथ शुरू करें और चूंकि यह एक नया सेटअप वातावरण है, इसलिए हमारा सुझाव है कि आप नीचे दिए गए स्क्रीनशॉट के अनुसार क्लस्टर और नोड दोनों के लिए ऑटो रिकवरी मोड को अक्षम कर दें। ऐसा करने से, जब हम परीक्षण कर रहे होते हैं या सेवा को पुनः आरंभ करते हैं, तो हम क्लस्टर को विफल होने से बचा सकते हैं:
सबसे पहले, देखते हैं कि "mysql" का संदर्भ क्या है। आगे बढ़ें और संदर्भ देखने के लिए निम्न कमांड चलाएँ:
$ ps -eZ | grep mysqld_t
और आउटपुट का उदाहरण नीचे दिया गया है:
system_u:system_r:mysqld_t:s0 845 ? 00:00:01 mysqld
उपरोक्त आउटपुट की परिभाषा है:
-
system_u - उपयोगकर्ता
-
system_r - भूमिका
-
mysqld_t - प्रकार
-
s0 845 - संवेदनशीलता स्तर
यदि आप SELinux स्थिति की जांच करते हैं, तो आप देख सकते हैं कि स्थिति "अनुमोदक" है जो अभी तक पूरी तरह से सक्षम नहीं है। हमें मोड को "एनफोर्सिंग" में बदलने की जरूरत है और इसे पूरा करने के लिए हमें इसे स्थायी बनाने के लिए SELinux कॉन्फ़िगरेशन फ़ाइल को संपादित करना होगा।
$ vi /etc/selinux/config
SELINUX=enforcing
परिवर्तनों के बाद सिस्टम को रीबूट करने के लिए आगे बढ़ें। जैसा कि हम मोड को "अनुमोदक" से "लागू करने" में बदल रहे हैं, हमें फ़ाइल सिस्टम को फिर से लेबल करने की आवश्यकता है। सामान्यतया, आप चुन सकते हैं कि संपूर्ण फ़ाइल सिस्टम को फिर से लेबल करना है या केवल एक अनुप्रयोग के लिए। इस तथ्य के कारण कि "लागू करने" मोड को सही ढंग से चलाने के लिए सही लेबल या फ़ंक्शन की आवश्यकता होती है, इस कारण से रिलेबेल की आवश्यकता होती है। कुछ उदाहरणों में, उन लेबलों को "अनुमोदक" या "अक्षम" मोड के दौरान बदल दिया जाता है।
इस उदाहरण के लिए, हम निम्नलिखित कमांड का उपयोग करके केवल एक एप्लिकेशन (MySQL) को फिर से लेबल करेंगे:
$ fixfiles -R mysqld restore
ऐसे सिस्टम के लिए जो काफी समय से इस्तेमाल किया जा रहा है, पूरे फाइल सिस्टम को फिर से लेबल करना एक अच्छा विचार है। निम्न आदेश रिबूट किए बिना काम करेगा और आपके सिस्टम के आधार पर इस प्रक्रिया में कुछ समय लग सकता है:
$ fixfiles -f -F relabel
कई अन्य डेटाबेस की तरह, MySQL भी बहुत सारी फाइलों को पढ़ने और लिखने की मांग करता है। उन फ़ाइलों के लिए एक सही SELinux संदर्भ के बिना, पहुँच को निर्विवाद रूप से अस्वीकार कर दिया जाएगा। SELinux के लिए नीति को कॉन्फ़िगर करने के लिए, "semanage" आवश्यक है। "सेमेनेज" नीति स्रोतों को फिर से संकलित करने की आवश्यकता के बिना किसी भी कॉन्फ़िगरेशन की अनुमति देता है। अधिकांश Linux सिस्टम के लिए, यह उपकरण पहले से ही डिफ़ॉल्ट रूप से स्थापित है। हमारे मामले के लिए, यह पहले से ही निम्न संस्करण के साथ स्थापित है:
$ rpm -qa |grep semanage
python3-libsemanage-2.9-3.el8.x86_64
libsemanage-2.9-3.el8.x86_64
उस सिस्टम के लिए जिसने इसे इंस्टॉल नहीं किया है, निम्न कमांड आपको इसे स्थापित करने में मदद करेगा:
$ yum install -y policycoreutils-python-utils
अब, देखते हैं कि MySQL फ़ाइल संदर्भ क्या है:
$ semanage fcontext -l | grep -i mysql
जैसा कि आप देख सकते हैं, फाइलों का एक समूह है जो उपरोक्त आदेश के निष्पादित होने के बाद MySQL से जुड़ा है। यदि आप शुरुआत में याद करते हैं, तो हम एक डिफ़ॉल्ट "सर्वर डेटा निर्देशिका" का उपयोग कर रहे हैं। यदि आपकी स्थापना किसी भिन्न डेटा निर्देशिका स्थान का उपयोग कर रही है, तो आपको "mysql_db_t" के संदर्भ को अद्यतन करने की आवश्यकता है जो कि /var/lib/mysql/
को संदर्भित करता है।पहला कदम इन विकल्पों में से किसी का उपयोग करके SELinux संदर्भ को बदलना है:
$ semanage fcontext -a -t mysqld_db_t /var/lib/yourcustomdirectory
$ semanage fcontext -a -e /var/lib/mysql /var/lib/yourcustomdirectory
After the step above, run the following command:
$ restorecon -Rv /var/lib/yourcustomdirectory
और अंत में, सेवा को पुनरारंभ करें:
$ systemctl restart mysql
कुछ सेटअप में, संभवतः किसी भी उद्देश्य के लिए एक अलग लॉग स्थान की आवश्यकता होती है। इस स्थिति के लिए, "mysqld_log_t" को भी अद्यतन करने की आवश्यकता है। "mysqld_log_t" डिफ़ॉल्ट स्थान /var/log/mysqld.log के लिए एक संदर्भ है और इसे अद्यतन करने के लिए नीचे दिए गए चरणों को निष्पादित किया जा सकता है:
$ semanage fcontext -a -t mysqld_log_t "/your/custom/error.log"
$ restorecon -Rv /path/to/my/custom/error.log
$ systemctl restart mysql
ऐसी स्थिति होगी जब डिफ़ॉल्ट पोर्ट को 3306 के अलावा किसी अन्य पोर्ट का उपयोग करके कॉन्फ़िगर किया जाएगा। उदाहरण के लिए, यदि आप MySQL के लिए पोर्ट 3303 का उपयोग कर रहे हैं, तो आपको निम्न कमांड के साथ SELinux संदर्भ को परिभाषित करने की आवश्यकता है। :
$ semanage port -a -t mysqld_port_t -p tcp 3303
और यह सत्यापित करने के लिए कि पोर्ट अपडेट किया गया है, आप निम्न कमांड का उपयोग कर सकते हैं:
$ semanage port -l | grep mysqld
ऑडिट2का उपयोग करके नीति बनाने की अनुमति दें
नीति को कॉन्फ़िगर करने का एक अन्य तरीका "ऑडिट2अनुमति" का उपयोग करना है जो अभी "सेमेनेज" स्थापना के दौरान पहले से ही शामिल है। यह टूल ऑडिट.लॉग से लॉग इवेंट खींचकर और उस जानकारी का उपयोग नीति बनाने के लिए करता है। कभी-कभी, MySQL को एक गैर-मानक नीति की आवश्यकता हो सकती है, इसलिए इसे प्राप्त करने का यह सबसे अच्छा तरीका है।
सबसे पहले, MySQL डोमेन के लिए मोड को अनुमति पर सेट करते हैं और परिवर्तनों को सत्यापित करते हैं:
$ semanage permissive -a mysqld_t
$ semodule -l | grep permissive
permissive_mysqld_t
permissivedomains
अगला चरण नीचे दिए गए आदेश का उपयोग करके नीति तैयार करना है:
$ grep mysqld /var/log/audit/audit.log | audit2allow -M {yourpolicyname}
$ grep mysqld /var/log/audit/audit.log | audit2allow -M mysql_new
आपको निम्न जैसा आउटपुट दिखाई देना चाहिए (आपके द्वारा सेट किए गए नीति नाम के आधार पर भिन्न होगा):
******************** महत्वपूर्ण ********* **पी>
इस नीति पैकेज को सक्रिय बनाने के लिए, निष्पादित करें:
semodule -i mysql_new.pp
जैसा कि कहा गया है, हमें नीति को सक्रिय करने के लिए "सेमॉड्यूल -i mysql_new.pp" निष्पादित करने की आवश्यकता है। आगे बढ़ें और इसे निष्पादित करें:
$ semodule -i mysql_new.pp
अंतिम चरण में MySQL डोमेन को वापस "एनफोर्सिंग" मोड में लाना है:
$ semanage permissive -d mysqld_t
libsemanage.semanage_direct_remove_key:अंतिम permissive_mysqld_t मॉड्यूल को हटाना (कोई अन्य permissive_mysqld_t मॉड्यूल किसी अन्य प्राथमिकता पर मौजूद नहीं है)।
यदि SELinux काम नहीं कर रहा है तो आपको क्या करना चाहिए?
बहुत बार, SELinux कॉन्फ़िगरेशन के लिए बहुत अधिक परीक्षण की आवश्यकता होती है। कॉन्फ़िगरेशन का परीक्षण करने के सर्वोत्तम तरीकों में से एक मोड को "अनुमेय" में बदलना है। यदि आप इसे केवल MySQL डोमेन के लिए सेट करना चाहते हैं, तो आप निम्न कमांड का उपयोग कर सकते हैं। पूरे सिस्टम को "अनुमोदक" में कॉन्फ़िगर करने से बचने के लिए यह अच्छा अभ्यास है:
$ semanage permissive -a mysqld_t
एक बार सब कुछ हो जाने के बाद, आप मोड को वापस "एनफोर्सिंग" में बदल सकते हैं:
$ semanage permissive -d mysqld_t
इसके अलावा, /var/log/audit/audit.log SELinux से संबंधित सभी लॉग प्रदान करता है। यह लॉग आपको मूल कारण और कारण की पहचान करने में बहुत मदद करेगा। आपको बस इतना करना है कि "grep" का उपयोग करके "अस्वीकार" को फ़िल्टर करना है।
$ more /var/log/audit/audit.log |grep "denied"
अब हम MySQL आधारित सिस्टम के लिए SELinux नीति को कॉन्फ़िगर करने के साथ समाप्त कर चुके हैं। एक बात ध्यान देने योग्य है कि आपके क्लस्टर के सभी नोड्स पर एक ही कॉन्फ़िगरेशन करने की आवश्यकता है, आपको उनके लिए एक ही प्रक्रिया को दोहराने की आवश्यकता हो सकती है।