आपके डेटा को यथासंभव सुरक्षित रखने के लिए सभी प्रणालियों के लिए सुरक्षा आवश्यक है। यहां तक कि जब हमेशा हैक होने का जोखिम होता है, तो सुरक्षा जांच सूची का पालन करने से यह जोखिम काफी कम हो जाएगा। एक बुनियादी सुरक्षा चेकलिस्ट में फ़ायरवॉल कॉन्फ़िगरेशन, डेटा एन्क्रिप्शन, प्रमाणीकरण नीति आदि शामिल हैं। डेबियन-आधारित ऑपरेटिंग सिस्टम पर आपके डेटा की सुरक्षा के लिए एक अन्य महत्वपूर्ण उपकरण AppArmor है। इस ब्लॉग में, हम देखेंगे कि PostgreSQL और TimescaleDB डेटाबेस के लिए इसे क्या और कैसे कॉन्फ़िगर करना है।
AppArmor क्या है?
AppArmor, उबंटू और डेबियन (अन्य के बीच) ऑपरेटिंग सिस्टम में डिफ़ॉल्ट रूप से शामिल है, कार्यक्रमों को सीमित संसाधनों तक सीमित रखने के लिए एक अनिवार्य एक्सेस कंट्रोल (मैक) सिस्टम है। यह कर्नेल में लोड किए गए प्रोफाइल का उपयोग करके काम करता है। इन प्रोफाइल को दो मोड में कॉन्फ़िगर किया जा सकता है:
-
प्रवर्तन:इस मोड में लोड की गई प्रोफ़ाइल प्रोफ़ाइल में परिभाषित नीति के साथ-साथ नीति उल्लंघन की रिपोर्ट करने पर लागू होगी प्रयास।
-
शिकायत:इस मोड में प्रोफाइल नीति को लागू नहीं करेंगे बल्कि इसके बजाय नीति उल्लंघन के प्रयासों की रिपोर्ट करेंगे।
साथ ही, AppArmor प्रवर्तन और शिकायत मोड प्रोफाइल के मिश्रण की अनुमति देता है।
AppArmor कैसे कॉन्फ़िगर करें
AppArmor प्रोफाइल /etc/apparmor.d/ में हैं। आप अपनी खुद की प्रोफाइल बना सकते हैं और उन्हें वहां ले जा सकते हैं या AppArmor रिपॉजिटरी की जांच कर सकते हैं। आइए देखें कि एक नया AppArmor प्रोफ़ाइल कैसे बनाया जाए।
सबसे पहले, आइए इसे संभालने के लिए आवश्यक पैकेज स्थापित करें:
$ apt install apparmor-profiles apparmor-utils
और देखें कि क्या AppArmor सक्षम है:
$ systemctl status apparmor.service
या
$ aa-status
apparmor module is loaded.
31 profiles are loaded.
29 profiles are in enforce mode.
/snap/snapd/11588/usr/lib/snapd/snap-confine
/snap/snapd/11588/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
...
यदि आप उल्लिखित पथ /etc/apparmor.d/ की जांच करते हैं, तो आप कुछ बुनियादी प्रोफाइल जैसे usr.sbin.tcpdump, या usr.sbin.traceroute देखेंगे। अब, PostgreSQL या TimescaleDB के लिए एक नया प्रोफ़ाइल बनाते हैं। इसके लिए आप इस प्रोफाइल को उदाहरण के तौर पर इस्तेमाल कर सकते हैं। उस प्रोफ़ाइल के आधार पर, हम अधिक विशिष्ट होने के लिए PostgreSQL संस्करण को बदल देंगे। इस मामले में, हम PostgreSQL 13 का उपयोग करेंगे।
# Author: Felix Geyer <[email protected]>
#include <tunables/global>
/usr/lib/postgresql/13/bin/postgres {
#include <abstractions/base>
#include <abstractions/nameservice>
#include <abstractions/ssl_keys>
/etc/postgresql/** r,
/usr/share/postgresql/** r,
/var/lib/postgresql/** rwl,
/{,var/}run/postgresql/** rw,
owner @{PROC}/13/oom_adj rw,
}
इसे /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres में स्टोर करें। फिर, apparmor_parser -a:
. का उपयोग करके नई प्रोफ़ाइल लोड करें$ cat /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres | sudo apparmor_parser -a
यदि आप इस प्रोफ़ाइल में कुछ बदलना चाहते हैं, तो आपको इसे पुनः लोड करना होगा:
$ apparmor_parser -r /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres
आप निम्न आदेश का उपयोग करके प्रोफ़ाइल को शिकायत मोड निर्दिष्ट कर सकते हैं:
$ aa-complain /usr/lib/postgresql/13/bin/postgres
फिर, आप यह देखने के लिए /var/log में syslog फ़ाइल की जांच कर सकते हैं कि AppArmor कॉन्फ़िगरेशन सही है या आपको कुछ संशोधित करने की आवश्यकता है। जब यह सुरक्षित हो, तो आप चलाकर मोड को Enforce में बदल सकते हैं:
$ aa-enforce /usr/lib/postgresql/13/bin/postgres
आप स्वीकृत या अस्वीकृत कार्रवाइयों की तलाश में लॉग को फ़िल्टर कर सकते हैं:
Jun 25 19:48:02 ip-172-31-18-94 kernel: [ 5160.111028] audit: type=1400 audit(1624650482.537:103): apparmor="ALLOWED" operation="open" profile="/usr/lib/postgresql/13/bin/postgres" name="/proc/17405/oom_score_adj" pid=17405 comm="postgres" requested_mask="w" denied_mask="w" fsuid=113 ouid=113
Jun 25 19:48:02 ip-172-31-18-94 kernel: [ 5160.112524] audit: type=1400 audit(1624650482.541:104): apparmor="ALLOWED" operation="open" profile="/usr/lib/postgresql/13/bin/postgres" name="/proc/17404/oom_score_adj" pid=17404 comm="postgres" requested_mask="w" denied_mask="w" fsuid=113 ouid=113
Jun 25 19:50:02 ip-172-31-18-94 kernel: [ 5280.141262] audit: type=1400 audit(1624650602.569:112): apparmor="DENIED" operation="open" profile="/usr/lib/postgresql/13/bin/postgres" name="/proc/17518/oom_score_adj" pid=17518 comm="postgres" requested_mask="w" denied_mask="w" fsuid=113 ouid=113
आप इस तरह से प्रोफ़ाइल को अक्षम भी कर सकते हैं:
$ aa-disable /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres
और आपको सेवा को फिर से लोड करना होगा:
$ systemctl reload apparmor.service
यदि आप AppArmor को अक्षम करना पसंद करते हैं, तो आप चला सकते हैं:
$ systemctl stop apparmor
$ systemctl disable apparmor
बेशक, उत्पादन वातावरण के लिए इसकी अनुशंसा नहीं की जाती है, और आपको कम से कम सभी प्रोफाइल में शिकायत मोड का उपयोग करके इसे चालू रखना चाहिए, ताकि आप अप्रत्याशित व्यवहार की तलाश में लॉग की जांच कर सकें।पी>
ClusterControl और AppArmor के साथ PostgreSQL और TimescaleDB का उपयोग कैसे करें
ClusterControl AppArmor जैसे किसी भी Linux कर्नेल सुरक्षा मॉड्यूल का प्रबंधन नहीं करता है। ClusterControl का उपयोग करके PostgreSQL या TimescaleDB क्लस्टर को परिनियोजित करते समय, आप निर्दिष्ट कर सकते हैं कि क्या आप त्रुटियों के जोखिम को कम करने के लिए परिनियोजन प्रक्रिया के दौरान ClusterControl को AppArmor को अक्षम करना चाहते हैं:
यदि आप इसे अक्षम नहीं करना चाहते हैं, जो उत्पादन के लिए अनुशंसित है वातावरण, आप शिकायत मोड का उपयोग कर सकते हैं और यह सुनिश्चित करने के लिए अपने सर्वर में लॉग की निगरानी कर सकते हैं कि आपके पास सही AppArmor कॉन्फ़िगरेशन है। उसके बाद, आप ऊपर बताए गए निर्देशों का पालन करते हुए इसे Enforce में बदल सकते हैं।
आप उबंटू की आधिकारिक साइट पर AppArmor कॉन्फ़िगरेशन के बारे में अधिक जानकारी प्राप्त कर सकते हैं।