PAM और NSS को समझें


21

आखिरी दिनों में मैंने LDAP प्रमाणीकरण के साथ कुछ लिनक्स सिस्टम स्थापित किया है और सब कुछ ठीक काम करता है, लेकिन अभी भी कुछ ऐसा है जिसे मैं वास्तव में एनएसएस और पीएएम के बारे में नहीं समझ सकता हूं, वह भी बहुत शोध के बाद।

हवाला देते हुए:

एनएसएस प्रशासकों को उन स्रोतों की एक सूची निर्दिष्ट करने की अनुमति देता है जहां प्रमाणीकरण फाइलें, होस्ट नाम और अन्य जानकारी संग्रहीत और खोजी जाएंगी

तथा

पीएएम पुस्तकालयों का एक समूह है जो अनुप्रयोगों और अंतर्निहित ऑपरेटिंग सिस्टम के लिए एक विन्यास योग्य प्रमाणीकरण मंच प्रदान करता है

मुझे समझ में नहीं आता कि PAM और NSS कैसे काम करते हैं और आपस में बातचीत करते हैं। में इस पुस्तक वास्तुकला बहुत अच्छी तरह से समझाया गया है: उपयोग करने के लिए मैं कॉन्फ़िगर पीएएम pam_ldapLDAP खातों के लिए और pam_unixस्थानीय खातों के लिए, तो मैं कॉन्फ़िगर nsswitch.confस्थानीय फ़ाइलों और एलडीएपी से जानकारी लाने के लिए।

अगर मैं सही तरीके से समझ गया हूं कि LDAP का उपयोग दो बार किया जाता है: पहले pam_ldapNSS द्वारा और फिर खुद से कहा जाता है pam_unix। क्या वह सही है? क्या LDAP का उपयोग वास्तव में दो बार किया गया है? लेकिन मुझे एनएसएस और पीएएम दोनों को कॉन्फ़िगर करने की आवश्यकता क्यों है? मेरी व्याख्या यह है कि पीएएम एनएसएस की तुलना में अलग-अलग कार्य करता है और इसका उपयोग अन्य कार्यक्रमों द्वारा किया जाता है। लेकिन, फिर, केवल एनएसएस या केवल पीएएम का उपयोग करना संभव होना चाहिए, जैसा कि मैंने इस पृष्ठ में पढ़ा है ।

इसलिए मैंने थोड़ा प्रयोग किया और मैंने सबसे पहले LDAP को हटाने की कोशिश की nsswitch.conf(और प्रमाणीकरण काम करना बंद कर दिया जैसे कि केवल pam_ldap काम करने के लिए पर्याप्त नहीं है )। फिर मैंने एनएसएस में एलडीएपी को फिर से सक्षम किया और मैंने इसे पीएएम कॉन्फ़िगरेशन से हटा दिया (इस बार सब कुछ ठीक काम किया, जैसे कि pam_ldapबेकार है और एनएसएस एक उपयोगकर्ता को प्रमाणित करने के लिए पर्याप्त है)।

क्या कोई है जो मुझे यह स्पष्ट करने में मदद कर सकता है? अग्रिम में बहुत धन्यवाद।

अपडेट करें

मैंने अभी कुछ कोशिश की है। मैंने pam_ldapसभी पैम कॉन्फ़िगरेशन फ़ील्ड में सभी प्रविष्टियों को फिर से हटा दिया और मुझे भी हटा दिया shadow: ldapहै nsswitch.conf। जैसा कि अब सभी प्रणाली में हैं केवल लाइनें हैं: passwd: ldap filesऔर group: ldap filesअंदर nsswitch.conf। ठीक है ... LDAP उपयोगकर्ताओं के साथ लॉगिन पूरी तरह से काम करता है, वे दो लाइनें (प्लस /etc/ldap.conf) LDAP ऑर्कुट को कॉन्फ़िगर करने के लिए पर्याप्त हैं।

मेरे ज्ञान PAM से NSS से स्वतंत्र में, लेकिन मेरे परीक्षणों से पता चला कि यह नहीं है। इसलिए मैं खुद से पूछता हूं कि क्या एनएसएस को पूरी तरह से अक्षम करना और केवल पीएएम का उपयोग करना संभव है?


मैंने आपका अपडेट नहीं देखा। कृपया निम्न कमांड चलाएं और अपने निष्कर्षों की रिपोर्ट करें, LDAPUSER को उस उपयोगकर्ता के साथ प्रतिस्थापित करें जो आपको लगता है कि केवल LDAP में कॉन्फ़िगर किया गया है। getent shadow | grep LDAPUSER grep LDAPUSER /etc/shadow
एंड्रयू बी

जवाबों:


25

यह आपके सिर में इस तरह से चीजों को तोड़ने में मदद करता है:

  • एनएसएस - यह नियंत्रित करने के लिए एक मॉड्यूल आधारित प्रणाली कि विभिन्न ओएस-स्तरीय डेटाबेस को मेमोरी में कैसे इकट्ठा किया जाता है। इसमें शामिल हैं (लेकिन सीमित नहीं है) passwd, group, shadow(इस नोट के लिए महत्वपूर्ण है), और hosts। UID लुकअप passwdडेटाबेस का उपयोग करते हैं, और GID लुकअप groupडेटाबेस का उपयोग करते हैं।

  • PAM - सेवा आधारित प्रमाणीकरण और लेखांकन की अनुमति के लिए एक मॉड्यूल आधारित प्रणाली। एनएसएस के विपरीत, आप मौजूदा डेटाबेस का विस्तार नहीं कर रहे हैं; पीएएम मॉड्यूल जो भी तर्क पसंद करते हैं उनका उपयोग कर सकते हैं, हालांकि शेल लॉगिन अभी भी एनएसएस के डेटाबेस passwdऔर groupडेटाबेस पर निर्भर करते हैं । (आपको हमेशा UID / GID लुक्स चाहिए)

महत्वपूर्ण अंतर यह है कि PAM स्वयं कुछ नहीं करता है। यदि कोई एप्लिकेशन PAM लाइब्रेरी के विरुद्ध लिंक नहीं करता है और उसे कॉल करता है, तो PAM का उपयोग कभी नहीं किया जाएगा। एनएसएस ऑपरेटिंग सिस्टम के लिए मुख्य है, और ओएस के सामान्य संचालन के लिए डेटाबेस काफी सर्वव्यापी हैं।

अब जबकि हमारे पास यह तरीका है, यहाँ कर्व बॉल: जबकि pam_ldap LDAP के खिलाफ प्रमाणित करने का लोकप्रिय तरीका है, यह एकमात्र तरीका नहीं है।

  • अगर shadowldap सेवा की ओर इशारा किया जाता है /etc/nsswitch.conf, तो कोई भी प्रमाणीकरण जो कि छाया डेटाबेस के विरुद्ध चलता है, सफल होगा यदि उन छाया फ़ील्ड मैपिंग (विशेष रूप से एन्क्रिप्टेड पासवर्ड फ़ील्ड) के लिए विशेषताएँ LDAP में मौजूद हैं और लॉगिन की अनुमति देगा।
    • यह बदले में इसका मतलब है कि pam_unix.soसंभावित रूप से एलडीएपी के खिलाफ प्रमाणीकरण में परिणाम हो सकता है, क्योंकि यह छाया डेटाबेस के खिलाफ प्रमाणीकरण करता है। (जो NSS द्वारा प्रबंधित है, और LDAP पर इंगित हो सकता है)
  • यदि कोई PAM मॉड्यूल डेमॉन के विरुद्ध कॉल करता है जो कि LDAP डेटाबेस (जैसे pam_sss.so, जो हुक करता है sssd) को प्रश्नांकित करता है , तो संभव है कि LDAP को संदर्भित किया जाएगा।

बहुत धन्यवाद, मुझे पता है कि nsswitch.conf + pam_unix खुद से सभी काम कर सकता है। लेकिन पीएएम को भी ऐसा करने में सक्षम होना चाहिए, क्योंकि यह स्वतंत्र है, जैसा कि आपने भी लिखा था। मेरी समझ यह है कि मॉड्यूल pam_ldap एक ldap सर्वर के खिलाफ उपयोगकर्ता को प्रमाणित करने के लिए पर्याप्त होना चाहिए। है ना?
ColOfAbRiX

6
हां प्रमाणित करें, लेकिन जब तक आपके पास उपयोगकर्ता जानकारी (स्थानीय / आदि / पासवार्ड या जो कुछ भी हो) प्राप्त करने का दूसरा तरीका नहीं है, तब भी आपको समूह सदस्यता, गृह निर्देशिका आदि का पता लगाने के लिए एक तरीका चाहिए। आप अभी भी प्रमाणीकरण और प्राधिकरण / विशेषता गणना को भ्रमित कर रहे हैं।
theFiddlerWins

1
@ColOfAbRiX TheFIddlerWins सही है। यह प्रमाणित करने के लिए पर्याप्त है , लेकिन आपको अभी भी UIDs + GID सदस्यता देखने का एक तरीका चाहिए, जैसा कि मैंने उल्लेख किया है। ये passwdऔर groupडेटाबेस (एनएसएस) से प्राप्त किए जाते हैं , जिसका अर्थ है कि वे स्थानीय प्रणाली ( /etc/passwd+ /etc/group) पर होना चाहिए , या ldapएनएसएस मॉड्यूल के माध्यम से प्राप्त किया जाना चाहिए ।
एंड्रयू बी

3
यहाँ आपको समझने में मदद करने का एक तरीका है: भागो getent passwdऔर getent groupLDAP के साथ दोनों डेटाबेस के लिए सक्षम होना चाहिए /etc/nsswitch.conf। फिर उस फ़ाइल में LDAP को अक्षम करें, और फिर से दोनों कमांड चलाएं। getentएनएसएस डेटाबेस को डंप करने के लिए एक कमांड है।
एंड्रयू बी

अंत में, मैं काम के एक बिट के साथ सब कुछ समझने में सक्षम था। आप लोगों को धन्यवाद!
ColOfAbRiX

1

एनएसएस सेवाओं / उपयोगकर्ताओं (आप किस समूह से संबंधित हैं, जहां आपके घर की निर्देशिका आदि है) के बारे में जानकारी प्राप्त करना है। PAM निर्धारित करता है कि उस जानकारी के बारे में क्या करना है।

आप के लिए एलडीएपी उपयोग करना चाहते हैं प्रमाणीकरण आप की जरूरत pam_ldap। यदि आप कुछ और उपयोग कर रहे हैं (स्थानीय खाते, केर्बरोस आदि) तो आप नहीं कर सकते।

इसलिए वे अलग चीजें करते हैं। एनएसएस से जानकारी मिलती है, पीएएम निर्धारित करता है कि उस जानकारी को प्राप्त करने के बाद उसे क्या करने की अनुमति है।


धन्यवाद, लेकिन समस्या यह है कि यह उस तरह से काम नहीं करता है, मेरे सिस्टम में कम से कम :) शुरुआत में मुझे वही समझ में आया लेकिन फिर मैंने PAM और LDAP प्रमाणीकरण में सभी pam_ldap प्रविष्टियों को हटाने की कोशिश की है (अभी भी) अक्षम कैशे)। इससे मेरा भ्रम बढ़ गया :)
ColOfAbRiX

आप यह कैसे सत्यापित कर रहे हैं कि आप इसे हटाने के बाद pam_ldap के माध्यम से प्रमाणित कर रहे हैं? कृपया अपनी सामान्य-सामग्री की सामग्री पोस्ट करें। मुझे SUSE में रास्तों के बारे में निश्चित नहीं है, लेकिन आपके तीसरे प्रश्न के पहले भाग के उत्तर में, यहां तक ​​कि pam_ldap के साथ काम करने के लिए आपको सिस्टम के लिए कुछ तरीके की आवश्यकता है ताकि आप जान सकें कि यह क्या है - यह NSS द्वारा प्रदान किया गया है
TheFiddlerWeb

मुझे खेद है, मेरा मतलब है कि pam_ldap को हटाने के बाद, LDAP ने इसके बिना काम किया, मुझे लगता है कि यह NSS के माध्यम से काम करता है। फ़ाइल common-authमें केवल pam_env, pam_unix और pam_deny थे।
ColOfAbRiX

इसका कोई मतलब नहीं है, आपने LDAP के काम करने की पुष्टि कैसे की?
theFiddlerWins

LDAP खाते का उपयोग कर लॉग इन करना और ldap सर्वर के लॉग की निगरानी करना। nscd (कैशिंग) अक्षम है
ColOfAbRiX
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.