डेटा एक कंपनी में सबसे महत्वपूर्ण संपत्ति है, इसलिए आपको इसे यथासंभव सुरक्षित रखने के लिए अपने डेटाबेस में सभी सुरक्षा विचारों को ध्यान में रखना चाहिए। RedHat-आधारित ऑपरेटिंग सिस्टम पर एक महत्वपूर्ण सुरक्षा विशेषता SELinux है। इस ब्लॉग में, हम देखेंगे कि यह सुविधा क्या है और इसे PostgreSQL और TimescaleDB डेटाबेस के लिए कैसे कॉन्फ़िगर किया जाए।
SELinux क्या है?
Security-Enhanced Linux (SELinux) Linux सिस्टम के लिए एक सुरक्षा आर्किटेक्चर है जो प्रशासकों को इस पर अधिक नियंत्रण रखने की अनुमति देता है कि कौन सिस्टम तक पहुंच सकता है। यह सुरक्षा नीतियों का उपयोग करते हुए सिस्टम पर एप्लिकेशन, प्रक्रियाओं और फाइलों के लिए एक्सेस कंट्रोल को परिभाषित करता है, जो नियमों का एक सेट है जो SELinux को बताता है कि क्या एक्सेस किया जा सकता है।
जब कोई एप्लिकेशन या प्रक्रिया, जिसे किसी विषय के रूप में जाना जाता है, किसी ऑब्जेक्ट तक पहुंचने का अनुरोध करता है, जैसे फ़ाइल, SELinux एक्सेस वेक्टर कैश (AVC) के साथ जांच करता है, जहां विषयों और वस्तुओं के लिए अनुमतियां कैश की जाती हैं। . यदि SELinux कैश्ड अनुमतियों के आधार पर पहुँच के बारे में निर्णय लेने में असमर्थ है, तो यह सुरक्षा सर्वर को अनुरोध भेजता है। सुरक्षा सर्वर ऐप या प्रक्रिया और फ़ाइल के सुरक्षा संदर्भ की जांच करता है। सुरक्षा संदर्भ SELinux नीति डेटाबेस से लागू किया जाता है और अनुमति दी या अस्वीकार की जाती है।
इसे कॉन्फ़िगर करने के विभिन्न तरीके हैं। आप मुख्य SELinux कॉन्फ़िगरेशन फ़ाइल को /etc/selinux/config में देख सकते हैं कि यह वर्तमान में कैसे कॉन्फ़िगर किया गया है।
$ cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
इस फाइल में दो निर्देश हैं। SELINUX निर्देश SELinux मोड को निर्दिष्ट करता है और इसके तीन संभावित मान हो सकते हैं:लागू करना, अनुमति देना या अक्षम करना।
-
प्रवर्तन (डिफ़ॉल्ट):यह सिस्टम पर SELinux सुरक्षा नीति को सक्षम और लागू करेगा, अनधिकृत पहुंच प्रयासों को नकार देगा। उपयोगकर्ताओं और प्रक्रियाओं द्वारा।
-
अनुमोदक:इसका उपयोग करते हुए, SELinux सक्षम है लेकिन सुरक्षा नीति को लागू नहीं करेगा। सभी नीति उल्लंघनों को ऑडिट लॉग में लॉग किया जाता है। SELinux को लागू करने से पहले उसका परीक्षण करना एक अच्छा तरीका है।
-
अक्षम:SELinux बंद है।
SELINUXTYPE निर्देश उपयोग की जाने वाली नीति को निर्दिष्ट करता है। डिफ़ॉल्ट मान लक्षित है और इस नीति के साथ, SELinux आपको अभिगम नियंत्रण अनुमतियों को अनुकूलित और परिष्कृत करने की अनुमति देता है।
यहां तक कि जब लागू करने वाला मोड डिफ़ॉल्ट होता है, तब भी SELinux को अक्षम करना एक सामान्य अभ्यास बन गया है क्योंकि इससे निपटने की तुलना में यह आसान है। बेशक, यह अनुशंसित नहीं है और आपको इसे कम से कम अनुमति मोड में कॉन्फ़िगर करना चाहिए और असामान्य व्यवहार की तलाश में समय-समय पर लॉग की जांच करनी चाहिए।
SELinux को कैसे कॉन्फ़िगर करें
यदि आपके परिवेश में SELinux अक्षम है, तो आप /etc/selinux/config कॉन्फ़िगरेशन फ़ाइल को संपादित करके और SELINUX=permissive या SELINUX=enforceing सेट करके इसे सक्षम कर सकते हैं।
यदि आपने कभी SELinux का उपयोग नहीं किया है, तो इसे कॉन्फ़िगर करने का सबसे अच्छा तरीका पहले अनुमति मोड का उपयोग करना है, संदेश लॉग फ़ाइल में अस्वीकृत संदेशों की तलाश में लॉग की जांच करना और यदि आवश्यक हो तो इसे ठीक करें:पी>
$ grep "SELinux" /var/log/messages
सब कुछ की समीक्षा के बाद और आगे बढ़ना सुरक्षित है, आप SELinux को पिछली विधि का उपयोग करके या निम्नलिखित कमांड का उपयोग करके पुनरारंभ किए बिना लागू करने के लिए कॉन्फ़िगर कर सकते हैं:
$ setenforce 1
यदि आप रोलबैक करना चाहते हैं, तो दौड़ें:
$ setenforce 0
इस कमांड का उपयोग फ़्लाई पर लागू करने और अनुमति देने वाले मोड के बीच स्विच करने के लिए किया जा सकता है लेकिन यदि आप सिस्टम को रीबूट करते हैं तो ये परिवर्तन जारी नहीं रहते हैं। कॉन्फ़िगरेशन फ़ाइल में मान को स्थिर बनाने के लिए आपको उसे कॉन्फ़िगर करने की आवश्यकता होगी।
आप getenforce कमांड का उपयोग करके वर्तमान SELinux स्थिति की जांच कर सकते हैं:
$ getenforce
Enforcing
या अधिक विस्तृत जानकारी के लिए, आप इसके बजाय सेस्टैटस का उपयोग कर सकते हैं:
$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 33
SELinux को PostgreSQL और TimescaleDB के लिए कैसे कॉन्फ़िगर करें
यदि आप डिफ़ॉल्ट कॉन्फ़िगरेशन और डिफ़ॉल्ट डेटा निर्देशिका का उपयोग करके PostgreSQL/TimescaleDB स्थापित कर रहे हैं, और SELinux भी डिफ़ॉल्ट रूप से कॉन्फ़िगर किया गया है, तो शायद आपको कोई समस्या नहीं होगी, लेकिन समस्या यह है कि यदि आप चाहते हैं उदाहरण के लिए, अपने डेटाबेस को स्टोर करने के लिए एक विशिष्ट स्थान का उपयोग करें, तो आइए देखें कि SELinux को काम करने के लिए कैसे कॉन्फ़िगर किया जाए। इस उदाहरण के लिए, हम CentOS 8 पर PostgreSQL 13 स्थापित करेंगे, और डेटा निर्देशिका के रूप में /pgsql/data/ का उपयोग करेंगे।
सबसे पहले, postgresql मॉड्यूल को सक्षम करें:
$ dnf module enable postgresql:13
संबंधित PostgreSQL 13 पैकेज स्थापित करें:
$ dnf -y install postgresql-server postgresql-contrib postgresql-libs
सेवा सक्षम करें:
$ systemctl enable postgresql.service
अपना PostgreSQL डेटाबेस प्रारंभ करें:
$ postgresql-setup --initdb
अब, यदि आप बिना कुछ बदले सेवा शुरू करते हैं, जैसे डेटा निर्देशिका, तो यह ठीक शुरू हो जाएगी, अन्यथा, आपको एक त्रुटि दिखाई देगी जैसे:
Jun 15 19:41:40 ip-172-31-24-90.us-east-2.compute.internal postmaster[29116]: postmaster: could not access the server configuration file "/pgsql/data/postgresql.conf": Permission denied
Jun 15 19:41:40 ip-172-31-24-90.us-east-2.compute.internal systemd[1]: postgresql.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
Jun 15 19:41:40 ip-172-31-24-90.us-east-2.compute.internal systemd[1]: postgresql.service: Failed with result 'exit-code'.
तो, आइए देखें कि इसे कैसे ठीक किया जाए। सबसे पहले, अपनी डेटा निर्देशिका को अपनी PostgreSQL कॉन्फ़िगरेशन फ़ाइल और सेवा में बदलें। इसके लिए, PostgreSQL सेवा फ़ाइल को संपादित करें और PGDATA स्थान बदलें:
$ vi /etc/systemd/system/multi-user.target.wants/postgresql.service
Environment=PGDATA=/pgsql/data
PostgreSQL बैश प्रोफ़ाइल फ़ाइल संपादित करें और PGDATA स्थान बदलें:
$ vi /var/lib/pgsql/.bash_profile
PGDATA=/pgsql/data
परिवर्तन पढ़ें:
$ systemctl daemon-reload
नए PostgreSQL डेटाबेस को प्रारंभ करें:
$ postgresql-setup --initdb
* Initializing database in '/pgsql/data'
* Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
नया डेटा निर्देशिका स्थान निर्दिष्ट करना आवश्यक नहीं है जैसा कि आपने पहले कॉन्फ़िगरेशन फ़ाइलों में किया था। अब, इसे शुरू करने से पहले, आपको SELinux लेबल बदलना होगा:
$ chcon -Rt postgresql_db_t /pgsql/data
यह आदेश SELinux सुरक्षा संदर्भ को बदल देगा, और झंडे हैं:
-
-R, --recursive:फ़ाइलों और निर्देशिकाओं पर पुनरावर्ती रूप से संचालन करें
-
-t, --type=TYPE:लक्ष्य सुरक्षा संदर्भ में प्रकार सेट करें
फिर, PostgreSQL सेवा प्रारंभ करें:
$ systemctl start postgresql.service
और आपका डेटाबेस अभी चल रहा है:
$ ps aux |grep postgres |head -1
postgres 28566 0.0 3.0 497152 25312 ? Ss 21:16 0:00 /usr/bin/postmaster -D /pgsql/data
यह सिर्फ एक बुनियादी उदाहरण है कि कैसे PostgreSQL/TimescaleDB के लिए SELinux को कॉन्फ़िगर किया जाए। विभिन्न प्रतिबंधों या उपकरणों के साथ ऐसा करने के विभिन्न तरीके हैं। सर्वोत्तम SELinux कार्यान्वयन या कॉन्फ़िगरेशन व्यावसायिक आवश्यकताओं पर निर्भर करता है।
ClusterControl और SELinux के साथ PostgreSQL और TimescaleDB का उपयोग कैसे करें
ClusterControl SELinux जैसे किसी भी Linux कर्नेल सुरक्षा मॉड्यूल का प्रबंधन नहीं करता है। ClusterControl का उपयोग करके PostgreSQL या TimescaleDB क्लस्टर को परिनियोजित करते समय, आप यह निर्दिष्ट कर सकते हैं कि क्या आप त्रुटियों के जोखिम को कम करने के लिए परिनियोजन प्रक्रिया के दौरान क्लस्टरकंट्रोल को आपके लिए SELinux को अक्षम करना चाहते हैं:
यदि आप इसे अक्षम नहीं करना चाहते हैं, तो आप अनुमेय का उपयोग कर सकते हैं यह सुनिश्चित करने के लिए कि आपके पास सही SELinux कॉन्फ़िगरेशन है, मोड और अपने सर्वर में लॉग की निगरानी करें। उसके बाद, आप ऊपर बताए गए निर्देशों का पालन करते हुए इसे Enforceing में बदल सकते हैं।
आप RedHat या CentOS आधिकारिक साइटों पर SELinux कॉन्फ़िगरेशन के बारे में अधिक जानकारी प्राप्त कर सकते हैं।