PostgreSQL दुनिया के सबसे सुरक्षित डेटाबेस में से एक है। डेटाबेस सुरक्षा वास्तविक दुनिया के मिशन के महत्वपूर्ण वातावरण में एक अनिवार्य भूमिका निभाती है। डेटाबेस सुनिश्चित करना महत्वपूर्ण है और डेटा हमेशा सुरक्षित रहता है और अनधिकृत पहुंच के अधीन नहीं होता है जिससे डेटा सुरक्षा से समझौता होता है। जबकि PostgreSQL उपयोगकर्ताओं को सुरक्षित तरीके से डेटाबेस तक पहुंचने के लिए विभिन्न तंत्र और तरीके प्रदान करता है, इसे एंटरप्राइज़ मानक डेटाबेस सुरक्षा आवश्यकताओं को पूरा करने के लिए विभिन्न बाहरी प्रमाणीकरण प्रणालियों के साथ भी एकीकृत किया जा सकता है।
SSL, MD5, pgpass और pg_ident आदि के माध्यम से सुरक्षित प्रमाणीकरण तंत्र प्रदान करने के अलावा, PostgreSQL को विभिन्न अन्य लोकप्रिय एंटरप्राइज़ ग्रेड बाहरी प्रमाणीकरण प्रणालियों के साथ एकीकृत किया जा सकता है। इस ब्लॉग में मेरा ध्यान SSL और pg_ident के साथ LDAP, Kerberos और RADIUS पर होगा।
एलडीएपी
एलडीएपी लाइटवेट डायरेक्ट्री एक्सेस प्रोटोकॉल को संदर्भित करता है जो एक लोकप्रिय रूप से इस्तेमाल किया जाने वाला केंद्रीकृत प्रमाणीकरण प्रणाली है। यह एक डेटास्टोर है जो उपयोगकर्ता क्रेडेंशियल्स और विभिन्न अन्य उपयोगकर्ता से संबंधित विवरण जैसे नाम, डोमेन, व्यावसायिक इकाइयों आदि को एक तालिका प्रारूप में पदानुक्रम के रूप में संग्रहीत करता है। लक्ष्य सिस्टम (जैसे, एक डेटाबेस) से जुड़ने वाले अंतिम उपयोगकर्ताओं को एक सफल प्रमाणीकरण प्राप्त करने के लिए पहले LDAP सर्वर से कनेक्ट होना चाहिए। एलडीएपी लोकप्रिय प्रमाणीकरण प्रणालियों में से एक है जो वर्तमान में उच्च सुरक्षा मानकों की मांग करने वाले संगठनों में उपयोग की जाती है।
LDAP + PostgreSQL
PostgreSQL को LDAP के साथ एकीकृत किया जा सकता है। मेरे ग्राहक परामर्श अनुभव में, इसे PostgreSQL की प्रमुख क्षमताओं में से एक माना जाता है। चूंकि उपयोगकर्ता नाम और पासवर्ड का प्रमाणीकरण एलडीएपी सर्वर पर होता है, यह सुनिश्चित करने के लिए कि उपयोगकर्ता एलडीएपी के माध्यम से डेटाबेस से जुड़ सकते हैं, उपयोगकर्ता खाता डेटाबेस में मौजूद होना चाहिए। दूसरे शब्दों में, इसका अर्थ यह है कि जब उपयोगकर्ता PostgreSQL से कनेक्ट करने का प्रयास करते हैं तो उन्हें पहले LDAP सर्वर पर और फिर सफल प्रमाणीकरण के बाद Postgres डेटाबेस में भेजा जाता है। यह सुनिश्चित करने के लिए कि कनेक्शन LDAP सर्वर से रूट किए गए हैं, कॉन्फ़िगरेशन pg_hba.conf फ़ाइल में किया जा सकता है। नीचे एक नमूना pg_hba.conf प्रविष्टि है -
host all pguser 0.0.0.0/0 ldap ldapserver=ldapserver.example.com ldapprefix="cn=" ldapsuffix=", dc=example, dc=com"
नीचे pg_hba.conf में LDAP प्रविष्टि का एक उदाहरण दिया गया है:
host all pguser 0.0.0.0/0 ldap ldapserver=ldapserver.example.com ldapprefix="cn=" ldapsuffix=", ou=finance, dc=example, dc=com"
गैर-डिफ़ॉल्ट एलडीएपी पोर्ट और टीएलएस का उपयोग करते समय:
ldap ldapserver=ldapserver.example.com ldaptls=1 ldapport=5128 ldapprefix="uid=" ldapsuffix=",ou=finance,dc=apix,dc=com"
उपरोक्त LDAP प्रविष्टि को समझना
- एलडीएपी अपने डेटास्टोर में उपयोगकर्ता प्रविष्टि को स्टोर/खोज करने के लिए विभिन्न विशेषताओं और शब्दावली का उपयोग करता है। साथ ही, जैसा कि ऊपर बताया गया है, उपयोगकर्ता प्रविष्टियां पदानुक्रम में संग्रहीत की जाती हैं।
- उपरोक्त pg_hba.conf ldap प्रविष्टियों में CN (सामान्य नाम), OU (संगठन इकाई) और DC (डोमेन घटक) नामक विशेषताएँ शामिल हैं, जिन्हें सापेक्ष विशिष्ट नाम (RDN) कहा जाता है, RDN के ये क्रम मिलकर कुछ बन जाते हैं डीएन (प्रतिष्ठित नाम) कहा जाता है। डीएन एलडीएपी ऑब्जेक्ट आधारित है, जिसकी खोज एलडीएपी डेटा स्टोर में की जाती है।
- LDAP विशेषता मान जैसे CN, DC, OU आदि को LDAP के ऑब्जेक्ट क्लासेस में परिभाषित किया गया है, जो LDAP वातावरण बनाने वाले सिस्टम विशेषज्ञों द्वारा प्रदान किया जा सकता है।
क्या इससे LDAP पर्याप्त सुरक्षित हो जाएगा?
शायद नहीं। एलडीएपी वातावरण में नेटवर्क पर संप्रेषित पासवर्ड एन्क्रिप्टेड नहीं होते हैं, जो एक सुरक्षा जोखिम हो सकता है क्योंकि एन्क्रिप्टेड पासवर्ड को हैक किया जा सकता है। क्रेडेंशियल संचार को और अधिक सुरक्षित बनाने के विकल्प हैं।
- LDAP को TLS (ट्रांसपोर्ट लेयर सिक्योरिटी) पर कॉन्फ़िगर करने पर विचार करें
- एलडीएपी को एसएसएल के साथ कॉन्फ़िगर किया जा सकता है जो एक अन्य विकल्प है
PostgreSQL के साथ LDAP एकीकरण प्राप्त करने के लिए युक्तियाँ
(लिनक्स आधारित सिस्टम के लिए)
- ऑपरेटिंग सिस्टम संस्करण के आधार पर उपयुक्त ओपनएलडीएपी मॉड्यूल स्थापित करें
- सुनिश्चित करें कि PostgreSQL सॉफ़्टवेयर LDAP लाइब्रेरी के साथ इंस्टॉल किया गया है
- सुनिश्चित करें कि एलडीएपी सक्रिय निर्देशिका के साथ अच्छी तरह से एकीकृत है
- उपयोग किए जा रहे openLDAP मॉड्यूल में किसी भी मौजूदा बग से परिचित हों। यह विनाशकारी हो सकता है और सुरक्षा मानकों से समझौता कर सकता है।
- Windows सक्रिय निर्देशिका को LDAP के साथ भी एकीकृत किया जा सकता है
- एलडीएपी को एसएसएल के साथ कॉन्फ़िगर करने पर विचार करें जो अधिक सुरक्षित है। उपयुक्त ओपनएसएसएल मॉड्यूल स्थापित करें और हार्ट-ब्लीड जैसे बग से अवगत रहें जो नेटवर्क पर प्रसारित क्रेडेंशियल्स को उजागर कर सकते हैं।
केर्बरोस
Kerberos एक उद्योग-मानक केंद्रीकृत प्रमाणीकरण प्रणाली है जो संगठनों में लोकप्रिय रूप से उपयोग की जाती है और एन्क्रिप्शन-आधारित प्रमाणीकरण तंत्र प्रदान करती है। पासवर्ड एक तृतीय-पक्ष प्रमाणीकरण सर्वर द्वारा प्रमाणित किए जाते हैं जिसे KDC (कुंजी वितरण केंद्र) कहा जाता है। पासवर्ड को विभिन्न एल्गोरिदम के आधार पर एन्क्रिप्ट किया जा सकता है और केवल साझा निजी कुंजी की सहायता से ही डिक्रिप्ट किया जा सकता है। इसका अर्थ यह भी है कि, नेटवर्क पर संप्रेषित पासवर्ड एन्क्रिप्टेड होते हैं।
PostgreSQL + Kerberos
PostgreSQL Kerberos के साथ GSSAPI आधारित प्रमाणीकरण का समर्थन करता है। पोस्टग्रेज डेटाबेस से कनेक्ट करने का प्रयास करने वाले उपयोगकर्ताओं को प्रमाणीकरण के लिए केडीसी सर्वर पर भेजा जाएगा। क्लाइंट और KDC डेटाबेस के बीच यह प्रमाणीकरण साझा निजी कुंजियों के आधार पर किया जाता है और सफल प्रमाणीकरण के बाद, क्लाइंट अब Kerberos आधारित क्रेडेंशियल्स धारण करेंगे। वही क्रेडेंशियल पोस्टग्रेज सर्वर और केडीसी के बीच सत्यापन के अधीन हैं जो कि केर्बेरोज द्वारा उत्पन्न कीटैब फ़ाइल के आधार पर किया जाएगा। Postgres प्रक्रिया के स्वामी उपयोगकर्ता के लिए उपयुक्त अनुमतियों के साथ यह कीटैब फ़ाइल डेटाबेस सर्वर पर मौजूद होनी चाहिए।
Kerberos कॉन्फ़िगरेशन और कनेक्शन प्रक्रिया -
-
Kerberos आधारित उपयोगकर्ता खातों को "kinit" कमांड का उपयोग करके एक टिकट (एक कनेक्शन अनुरोध) उत्पन्न करना चाहिए।
-
पूरी तरह से योग्य Kerberos आधारित उपयोगकर्ता खाते (प्रिंसिपल) के लिए "kadmin" कमांड का उपयोग करके एक keytab फ़ाइल उत्पन्न की जानी चाहिए और फिर Postgres क्रेडेंशियल्स को मान्य करने के लिए उसी keytab फ़ाइल का उपयोग करेगा। प्रधानाचार्यों को एन्क्रिप्ट किया जा सकता है और "ktadd" कमांड का उपयोग करके मौजूदा कीटैब फ़ाइल में जोड़ा जा सकता है। Kerberos एन्क्रिप्शन विभिन्न उद्योग मानक एन्क्रिप्शन एल्गोरिदम का समर्थन करता है।
उत्पन्न कीटैब फ़ाइल को पोस्टग्रेज़ सर्वर पर कॉपी किया जाना चाहिए, इसे पोस्टग्रेज़ प्रक्रिया द्वारा पठनीय होना चाहिए। नीचे दिया गया postgresql.conf पैरामीटर कॉन्फ़िगर किया जाना चाहिए:
krb_server_keyfile = '/database/postgres/keytab.example.com'
यदि आप विशेष रूप से केस-सेंसिटिविटी के बारे में हैं, तो नीचे दिए गए पैरामीटर का उपयोग करें
krb_caseins_users which is by default “off” (case sensitive)
-
यह सुनिश्चित करने के लिए कि केडीसी सर्वर से कनेक्शन रूट किए गए हैं, pg_hba.conf में एक प्रविष्टि की जानी चाहिए
उदाहरण pg_hba.conf प्रविष्टि
# TYPE DATABASE USER CIDR-ADDRESS METHOD host all all 192.168.1.6/32 gss include_realm=1 krb_realm=EXAMPLE.COM
उदाहरण pg_hba.conf मानचित्र प्रविष्टि के साथ प्रविष्टि
# TYPE DATABASE USER CIDR-ADDRESS METHOD host all all 192.168.1.6/32 gss include_realm=1 krb_realm=EXAMPLE.COM map=krb
-
कनेक्ट करने का प्रयास करने वाले उपयोगकर्ता खाते को केडीसी डेटाबेस में जोड़ा जाना चाहिए जिसे प्रिंसिपल कहा जाता है और वही उपयोगकर्ता खाता या मैपिंग उपयोगकर्ता खाता डेटाबेस में भी मौजूद होना चाहिए
नीचे Kerberos प्रिंसिपल का एक उदाहरण है
pguser उपयोगकर्ता नाम है और "example.com" KDC सर्वर में Kerberos config (/etc/krb5.conf) में कॉन्फ़िगर किया गया क्षेत्र का नाम है।
केर्बेरोस दुनिया में, प्रिंसिपल प्रारूप ([email protected]) जैसे ईमेल में हैं और डेटाबेस उपयोगकर्ता उसी प्रारूप में नहीं बनाए जा सकते हैं। यह डीबीए को इसके बजाय डेटाबेस उपयोगकर्ता नामों की मैपिंग बनाने के बारे में सोचता है और यह सुनिश्चित करता है कि प्रिंसिपल pg_ident.conf का उपयोग करके मैप किए गए नामों से जुड़ें।
नीचे pg_ident.conf में मानचित्र नाम प्रविष्टि का एक उदाहरण है
# MAPNAME SYSTEM-USERNAME GP-USERNAME mapuser /^(.*)EXAMPLE\.DOMAIN$ admin
क्या इससे Kerberos पर्याप्त सुरक्षित हो जाएगा ?
शायद नहीं। नेटवर्क पर संप्रेषित उपयोगकर्ता क्रेडेंशियल्स को उजागर किया जा सकता है, हैक किया जा सकता है। हालांकि Kerberos प्रधानाध्यापकों को एन्क्रिप्ट करता है, उन्हें चुराया जा सकता है, हैक किया जा सकता है। यह नेटवर्क परत सुरक्षा को लागू करने की आवश्यकता में लाता है। हां, एसएसएल या टीएलएस जाने का रास्ता है। Kerberos प्रमाणीकरण प्रणाली को SSL या TLS के साथ एकीकृत किया जा सकता है। टीएलएस एसएसएल का उत्तराधिकारी है। Kerberos को SSL या TLS के साथ कॉन्फ़िगर करने की अनुशंसा की जाती है ताकि नेटवर्क पर संचार सुरक्षित रहे।
टिप्स
- सुनिश्चित करें कि krb* पुस्तकालय स्थापित हैं
- एसएसएल को कॉन्फ़िगर करने के लिए ओपनएसएसएल पुस्तकालयों को स्थापित किया जाना चाहिए
- सुनिश्चित करें कि Postgres निम्नलिखित विकल्पों के साथ स्थापित है
./configure --with-gssapi --with-krb-srvnam --with-openssl
RADIUS
RADIUS एक दूरस्थ प्रमाणीकरण सेवा नेटवर्क प्रोटोकॉल है जो केंद्रीकृत प्रदान करता है
प्रमाणीकरण, प्राधिकरण और लेखा (एएए)। उपयोगकर्ता नाम / पासवर्ड जोड़े RADIUS सर्वर पर प्रमाणित होते हैं। केंद्रीकृत प्रमाणीकरण का यह तरीका LDAP और Kerberos जैसे अन्य प्रमाणीकरण प्रणालियों की तुलना में बहुत सीधा और सरल है जिसमें थोड़ी जटिलता शामिल है।
RADIUS + PostgreSQL
PostgreSQL को RADIUS प्रमाणीकरण तंत्र के साथ एकीकृत किया जा सकता है। Postgres में अभी तक लेखांकन समर्थित नहीं है। इसके लिए डेटाबेस उपयोगकर्ता खातों का डेटाबेस में मौजूद होना आवश्यक है। डेटाबेस से कनेक्शन "त्रिज्या गुप्त" कहे जाने वाले साझा रहस्य के आधार पर अधिकृत हैं।
प्रमाणीकरण के लिए त्रिज्या सर्वर से कनेक्शन को रूट करने के लिए pg_hba.conf कॉन्फ़िगरेशन में एक प्रविष्टि आवश्यक है।
उदाहरण pg_hba.conf प्रविष्टि
hostssl all all 0.0.0.0/0 radius radiusserver=127.0.0.1 radiussecret=secretr radiusport=3128
उपरोक्त प्रविष्टि को समझने के लिए -
"radiusserver" RADIUS सर्वर का होस्ट IP पता है जहां उपयोगकर्ताओं को प्रमाणीकरण के लिए रूट किया जाता है। यह पैरामीटर RADIUS सर्वर में /etc/radiusd.conf में कॉन्फ़िगर किया गया है।
"radiussecret" मान client.conf से निकाला जाता है। यह गुप्त कोड है जो विशिष्ट रूप से त्रिज्या क्लाइंट कनेक्शन की पहचान करता है।
"त्रिज्या" /etc/radiusd.conf फ़ाइल में पाया जा सकता है। यह वह पोर्ट है जिस पर रेडियस कनेक्शन सुन रहे होंगे।
SSL का महत्व
एसएसएल (सिक्योर सॉकेट लेयर) बाहरी प्रमाणीकरण प्रणालियों के साथ एक अनिवार्य भूमिका निभाता है। एसएसएल को बाहरी प्रमाणीकरण प्रणाली के साथ कॉन्फ़िगर करने की अत्यधिक अनुशंसा की जाती है क्योंकि नेटवर्क पर क्लाइंट और सर्वर के बीच संवेदनशील जानकारी का संचार होगा और एसएसएल सुरक्षा को और कड़ा कर सकता है।
बाहरी प्रमाणीकरण सिस्टम के उपयोग का प्रदर्शन प्रभाव
एक प्रभावी और कुशल सुरक्षा प्रणाली प्रदर्शन की कीमत पर आती है। चूंकि क्लाइंट/उपयोगकर्ता डेटाबेस से कनेक्ट करने का प्रयास कर रहे हैं, उन्हें कनेक्शन स्थापित करने के लिए प्रमाणीकरण सिस्टम पर भेजा जाता है, इसलिए प्रदर्शन में गिरावट हो सकती है। प्रदर्शन बाधाओं को दूर करने के तरीके हैं।
- बाहरी प्रमाणीकरण तंत्र के साथ, डेटाबेस से कनेक्शन स्थापित करने में देरी हो सकती है। यह एक वास्तविक चिंता का विषय हो सकता है जब डेटाबेस में बड़ी संख्या में कनेक्शन स्थापित किए जा रहे हों।
- डेवलपर्स को यह सुनिश्चित करने की आवश्यकता है कि डेटाबेस में अनावश्यक रूप से उच्च संख्या में कनेक्शन नहीं बनाए गए हैं। एक कनेक्शन के माध्यम से एक से अधिक आवेदन अनुरोध प्रस्तुत करना लाभप्रद होगा।
- साथ ही, डेटाबेस के अंत में प्रत्येक अनुरोध में कितना समय लग रहा है, यह एक महत्वपूर्ण भूमिका निभाता है। यदि अनुरोध पूरा होने में अधिक समय लगता है, तो बाद के अनुरोध कतारबद्ध हो जाएंगे। प्रक्रियाओं का प्रदर्शन ट्यूनिंग और बुनियादी ढांचे को सावधानीपूर्वक तैयार करना महत्वपूर्ण होगा!
- अच्छे प्रदर्शन को सुनिश्चित करने के लिए डेटाबेस और बुनियादी ढांचे को कुशलता से तैयार किया जाना चाहिए और पर्याप्त रूप से सक्षम होना चाहिए।
- प्रदर्शन बेंचमार्किंग करते समय, सुनिश्चित करें कि एसएसएल सक्षम है और औसत कनेक्शन स्थापना समय का मूल्यांकन किया जाना चाहिए।
ClusterControl - PostgreSQL के साथ बाहरी प्रमाणीकरण सिस्टम को एकीकृत करना
PostgreSQL इंस्टेंस को ClusterControl GUI के माध्यम से स्वचालित रूप से बनाया और कॉन्फ़िगर किया जा सकता है। क्लस्टरकंट्रोल के माध्यम से तैनात पोस्टग्रेएसक्यूएल इंस्टेंस के साथ बाहरी प्रमाणीकरण सिस्टम को एकीकृत करना पारंपरिक पोस्टग्रेएसक्यूएल इंस्टेंस के साथ एकीकरण की तुलना में काफी समान है और वास्तव में थोड़ा आसान है। नीचे उसी का एक सिंहावलोकन है -
- ClusterControl LDAP, KRB, GSSAPI और OpenSSL क्षमताओं के साथ सक्षम PostgreSQL लाइब्रेरी स्थापित करता है
- बाहरी प्रमाणीकरण सिस्टम के साथ एकीकरण के लिए postgresql डेटाबेस सर्वर पर विभिन्न पैरामीटर कॉन्फ़िगरेशन परिवर्तनों की आवश्यकता होती है जो ClusterControl GUI का उपयोग करके किया जा सकता है।