यदि हम डेटाबेस के सख्त होने के बारे में बात कर रहे हैं तो सुरक्षा के कई खंड और परतें हैं। यह अंतर्निहित स्टोरेज डिस्क के एन्क्रिप्शन से शुरू होता है, डेटाबेस एक्सेस विशेषाधिकार, प्रमाणीकरण, नेटवर्क एक्सेस कंट्रोल, एसएसएल/टीएलएस का उपयोग करके ट्रांसमिट में डेटा और ऑपरेटिंग सिस्टम को सख्त भी करता है।
ऑपरेटिंग सिस्टम के सख्त होने से कई चेकलिस्ट भी हो सकती हैं, जैसे सर्वर सेवाओं को अक्षम करना या हटाना जिनका उपयोग और उपयोग नहीं किया जाएगा, SSH रूट लॉगिन को अक्षम करना, rsyslog को सक्षम करना, रूट खाते का उपयोग करके एक्सेस को प्रतिबंधित करना कंसोल, सिस्टम ऑडिटिंग को सक्षम करना, और SELinux को सक्षम करना।
सुरक्षा जांच सूची का एक अन्य भाग AppArmor सेवा है। Apparmor सुरक्षा उद्देश्यों के लिए एक अनिवार्य एक्सेस कंट्रोल (MAC) प्रणाली है जो डिफ़ॉल्ट रूप से Ubuntu और डेबियन आधारित ऑपरेटिंग सिस्टम पर शामिल है, यह Redhat या CentOS आधारित ऑपरेटिंग सिस्टम पर SELinux के समान है। AppArmor का उद्देश्य ऑपरेटिंग सिस्टम में कमजोर प्रक्रिया को बंद करना और सुरक्षा कमजोरियों के नुकसान को सीमित करना है।
उदाहरण के लिए, यदि MongoDB डेटाबेस गलती से इंटरनेट में प्रकाशित हो गया है और कुछ मैलवेयर हैं जो डेटाबेस सर्वर को संक्रमित करते हैं और कुछ दुर्भावनापूर्ण कोड ट्रिगर करते हैं जिसे MongoDB निष्पादित करने का इरादा रखता है, तो AppArmor इस तरह के निष्पादन को रोक देगा MongoDB प्रोफ़ाइल पहले से ही केवल विशिष्ट MongoDB फ़ाइलों को पढ़ने, निष्पादित करने और लिखने के लिए कॉन्फ़िगर की गई है।
इस ब्लॉग में, हम MongoDB प्रतिकृति सेट के लिए AppArmor कार्यान्वयन पर चर्चा करेंगे।
डेटाबेस परिनियोजन
यदि आप MongoDB प्रतिकृति सेट परिनियोजित कर रहे हैं, तो ClusterControl आपके जीवन को आसान बना सकता है। हमें केवल दो परिनियोजन पृष्ठों के माध्यम से जाने की आवश्यकता है और फिर ClusterControl MongoDB प्रतिकृति सेट को तैनात करने के लिए तैयार होगा। परिनियोजन के दौरान SELinux/AppArmor को अक्षम करने के विकल्प हैं जैसा कि आप नीचे देख सकते हैं:
हम AppArmor/SELinux के विकल्प को अक्षम कर सकते हैं। और फिर डेटाबेस नोड्स IP पता, व्यवस्थापक पासवर्ड, और MongoDB संस्करण भरें जिसे हम परिनियोजित करना चाहते हैं।
MongoDB रेप्लिका सेट के परिनियोजित होने के बाद, हम प्रत्येक नोड सर्वर में जा सकते हैं AppArmor के विन्यास के लिए।
AppArmor सेटिंग
AppArmor में प्रोफाइल द्वारा प्रत्येक प्रक्रिया प्रतिबंधित है। दो विकल्प हैं जहां प्रोफ़ाइल को चलाया जा सकता है, जो कि प्रवर्तन मोड और शिकायत मोड है। जब प्रवर्तन मोड उपयोग में होता है, तो यह एप्लिकेशन को प्रतिबंधित कार्रवाई करने से रोकता है, जबकि शिकायत मोड के लिए, यह एप्लिकेशन को प्रतिबंधित कार्रवाई करने और लॉग प्रविष्टि बनाने की अनुमति देता है। प्रत्येक प्रोफ़ाइल निर्देशिका /etc/apparmor.d
. में संग्रहीत हैहम निम्न आदेश चलाकर AppArmor सेवा की स्थिति की जांच कर सकते हैं:
[email protected]:/etc/apparmor.d# apparmor_status
apparmor module is loaded.
15 profiles are loaded.
15 profiles are in enforce mode.
/sbin/dhclient
/usr/bin/lxc-start
/usr/bin/man
/usr/lib/NetworkManager/nm-dhcp-client.action
/usr/lib/NetworkManager/nm-dhcp-helper
/usr/lib/connman/scripts/dhclient-script
/usr/lib/snapd/snap-confine
/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
/usr/sbin/tcpdump
lxc-container-default
lxc-container-default-cgns
lxc-container-default-with-mounting
lxc-container-default-with-nesting
man_filter
man_groff
0 profiles are in complain mode.
0 processes have profiles defined.
0 processes are in enforce mode.
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
यह आपको लोड की गई प्रोफाइल की सूची, शिकायत मोड और एनफोर्स मोड में कितने प्रोफाइल और प्रक्रियाओं के बारे में जानकारी देगा। प्रोफ़ाइल को कर्नेल में लोड करने के लिए हम apparmor_parser कमांड का उपयोग कर सकते हैं:
[email protected]: cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a
और प्रोफ़ाइल को अक्षम करने के लिए, हमें निर्देशिका /etc/apparmor.d/disable.
के लिए एक प्रतीकात्मक लिंक बनाने की आवश्यकता है।[email protected]: ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable
प्रोफ़ाइल को फिर से सक्षम करने के लिए, बस प्रतीकात्मक लिंक को हटा दें और प्रोफ़ाइल को फिर से लोड करें।
[email protected]: rm /etc/apparmor.d/disable/profile.name cat /etc/apparmor.d/profile.name | apparmor_parser -a
MongoDB रेप्लिका सेट के लिए AppArmor को सक्षम करना
अपने MongoDB प्रतिकृति सेट पर AppArmor का उपयोग करने से पहले, हमें MongoDB के लिए प्रोफ़ाइल को परिभाषित करने, mongodb बाइनरी सेवा, डेटा निर्देशिका और लॉग फ़ाइलों को पंजीकृत करने और कुछ नेटवर्क और ऑपरेटिंग सिस्टम एक्सेस की अनुमति देने की आवश्यकता है। हम प्रत्येक निर्देशिका, बाइनरी और फ़ाइलों के लिए अनुमति को भी परिभाषित कर सकते हैं। नीचे MongoDB सेवा का नमूना प्रोफ़ाइल है:
#include <tunables/global>
/usr/sbin/mongod {
#include <abstractions/base>
#include <abstractions/nameservice>
#include <abstractions/user-tmp>
#include <abstractions/winbind>
# Allow system resource access
/sys/devices/system/cpu/ r,
/sys/devices/system/node/ r,
/sys/devices/system/node/** r,
/proc/*/status r,
capability sys_resource,
capability dac_override,
capability setuid,
capability setgid,
capability sys_nice,
# Allow network access
network tcp,
/etc/hosts.allow r,
/etc/hosts.deny r,
# Allow config access
/etc/mongod.conf r,
# Allow pid, socket, socket lock file access
/var/run/mongod.pid rw,
# Allow systemd notify messages
/{,var/}run/systemd/notify w,
# Allow execution of server binary
/usr/sbin/mongo mr,
/usr/sbin/mongod mr,
/usr/sbin/mongos mr,
/usr/sbin/mongotop mr,
/usr/sbin/mongorestore mr,
/usr/sbin/mongoimport mr,
/usr/sbin/mongofiles mr,
/usr/sbin/mongodump mr,
# Allow data files dir access
/var/lib/mongodb/ r,
/var/lib/mongodb/** rwk,
# Allow log file access
/var/log/mongodb/ r,
/var/log/mongodb/** rw,
# Allow access to openssl config
/etc/mongo-cluster.key r,
# Site-specific additions and overrides. See local/README for details.
}
हम उपरोक्त MongoDB प्रोफ़ाइल को /etc/apparmor.d/usr.bin.mongod फ़ाइल में डाल सकते हैं और फिर प्रोफ़ाइल लोड करने के लिए apparmor_parser चला सकते हैं।
[email protected]: cat /etc/apparmor.d/usr.bin.mongod | sudo apparmor_parser -a
यदि हम apparmor_status का उपयोग करके जांच करते हैं, तो यह MongoDB प्रोफ़ाइल के बारे में जानकारी देगा जिसे लोड किया गया है:
[email protected]:/etc/apparmor.d# apparmor_status
apparmor module is loaded.
57 profiles are loaded.
19 profiles are in enforce mode.
/sbin/dhclient
/usr/bin/lxc-start
/usr/bin/man
/usr/lib/NetworkManager/nm-dhcp-client.action
/usr/lib/NetworkManager/nm-dhcp-helper
/usr/lib/chromium-browser/chromium-browser//browser_java
/usr/lib/chromium-browser/chromium-browser//browser_openjdk
/usr/lib/chromium-browser/chromium-browser//sanitized_helper
/usr/lib/connman/scripts/dhclient-script
/usr/lib/snapd/snap-confine
/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
/usr/sbin/mongod
/usr/sbin/tcpdump
lxc-container-default
lxc-container-default-cgns
lxc-container-default-with-mounting
lxc-container-default-with-nesting
man_filter
man_groff
38 profiles are in complain mode.
/usr/bin/mongod
/usr/lib/chromium-browser/chromium-browser
/usr/lib/chromium-browser/chromium-browser//chromium_browser_sandbox
/usr/lib/chromium-browser/chromium-browser//lsb_release
/usr/lib/chromium-browser/chromium-browser//xdgsettings
अब हम MongoDB प्रक्रिया को AppArmor द्वारा प्रतिबंधित और सुरक्षित बनाने के लिए अपने MongoDB प्रतिकृति सेट के प्रत्येक नोड पर ऊपर बताए गए चरणों को दोहरा सकते हैं।