SSH कनेक्शन को हैंडल करते समय सिस्टम किन चरणों से गुजरता है?


9

SSH कनेक्शन को हैंडल करते समय सिस्टम किन चरणों से गुजरता है?

  1. हम ssh के द्वारा लॉग इन करने का प्रयास करते हैं
  2. sshd हमें प्रमाणित करने के लिए pam और pam मॉड्यूल शुरू करता है
  3. Pam कॉन्फ़िगरेशन के आधार पर, हमें उपयोगकर्ता नाम और पासवर्ड (pam check passwdऔर shadowfiles) प्रदान करना होगा
  4. के लिए PAM चेकों hosts.allow/deny, /etc/shells, और अन्य चीजें
  5. अगर सब कुछ ठीक रहा तो हम लॉग इन हो गए हैं
  6. ???
  7. खोल शुरू कर दिया है

तो मेरा सवाल यह है कि कौन सा तंत्र अपनी passwdफ़ाइल में उपयोगकर्ता को कौन सा शेल सौंपा है (चरण 6 में) की जाँच के लिए जिम्मेदार है ? क्या यह स्वयं पेम, कुछ विशिष्ट पाम मॉड्यूल sshd, या कुछ और है? मुझे पता है कि मैं passwdएक pam मॉड्यूल लिखकर फ़ाइल (उपयोगकर्ता नाम और पासवर्ड की जांच के लिए) को बदल सकता हूं, लेकिन मैं passwdशेल प्रविष्टि के लिए फ़ाइल को कैसे बदल सकता हूं ?

जवाबों:


8

जहां तक ​​मुझे पता है, PAM उपयोगकर्ता के शेल का निर्धारण नहीं करता है, यह एप्लिकेशन पर छोड़ दिया जाता है। PAM के सत्र मॉड्यूल सामान्य कार्य और जाँच करते हैं जो उस विशेष सेवा का उपयोग करके हर लॉगिन पर किया जाना चाहिए। यदि एप्लिकेशन फिर एक शेल शुरू करना चाहता है, तो वह ऐसा करने के लिए स्वतंत्र है, और आमतौर पर उपयोगकर्ता डेटाबेस में शेल को देखेगा।

अपने प्रश्न को OpenSSH के बारे में मानते हुए , यह ठीक यही है कि यह क्या करता है: एक बार उपयोगकर्ता प्रमाणित होने के बाद, और PAM सत्र सामान हो गया है (यदि PAM¹ का उपयोग करने के लिए कॉन्फ़िगर किया गया है), ssh सर्वर उपयोगकर्ता डेटाबेस में शेल को देखता है (सीधे, नहीं PAM पुस्तकालय के माध्यम से)।

उपयोगकर्ता डेटाबेस /usr/passwdऔर दोस्तों तक सीमित नहीं है । लिनक्स पर (जो मुझे लगता है कि आप उल्लेख के बाद से आप का उपयोग कर रहे हैं shadow), जो उपयोगकर्ता डेटाबेस बनाता है वह passwdसेटिंग में निर्धारित होता है /etc/nsswitch.conf। मल्टी-कंप्यूटर सेटअप में, स्थानीय डेटाबेस के लिए सामान्य जोड़ NIS और LDAP हैं । यदि आप किसी ऐसे शेल का उपयोग करना चाहते हैं जो इसमें नहीं है /etc/passwd, तो यह कॉन्फ़िगर करने के लिए क्या हो सकता है (हालांकि यह थोड़ा अजीब होगा, और हो सकता है कि लोग बेहतर सुझाव दे सकें यदि आप हमें बताएं कि आप क्या हासिल करना चाहते हैं)।

यदि आप पूर्ण शेल एक्सेस के बिना उपयोगकर्ता चाहते हैं, तो प्राकृतिक समाधान /etc/passwdप्रतिबंधित शेल को बदलने के लिए है - शायद केवल कुछ फ़ाइल-कॉपी-टाइप एप्लिकेशन जैसे कि स्कैप, rsync और cvs को अनुमति देने के लिए rssh । आप उपयोगकर्ता की ~/.ssh/authorized_keysफ़ाइल में मजबूर कमांड का उपयोग कर सकते हैं ।

यदि आप ssh सर्वर क्या कर रहे हैं, का एक ट्रेस देखना चाहते हैं, तो डेमन को प्रारंभ करें ssh -ddd। आप ग्राहक के विचार भी प्राप्त कर सकते हैं ssh -vvv, हालांकि यहां सर्वर का दृष्टिकोण वही है जो आपको सबसे अधिक रूचि देगा।

¹ अगर यह पीएएम समर्थन के साथ कॉन्फ़िगर किया गया है और OpenSSH केवल पीएएम का उपयोग करता है UsePAMके निर्देश पर सेट है yesमें sshd_config। जब यह PAM का उपयोग करता है, तब भी यह PAM के अलावा अन्य प्रमाणीकरण विधियों की पेशकश करता है; विशेष रूप से सार्वजनिक कुंजी प्रमाणीकरण PAM के माध्यम से नहीं जाता है।


मैं सिस्टम में खाता बनाए बिना अपने उपयोगकर्ता के उपयोगकर्ताओं को सामान्य उपयोगकर्ता के रूप में शेल में लॉग इन करने की अनुमति देना चाहता हूं। उपयोगकर्ता डेटा (उपयोगकर्ता नाम, पास और शेल) को sqlite db में संग्रहीत किया जाएगा। पहला चरण sqlite pam मॉड्यूल है जो उपयोगकर्ताओं को फिर से डीबी प्रमाणित करता है। दूसरा चरण डेटाबेस से पढ़े गए शेल प्रदान करना है। इसलिए मुझे लगता है कि उचित एनआईएस मॉड्यूल लिखकर इसे पूरा किया जा सकता है। उत्तर के लिए
धन्यवाद

@ पीपीएम: मुझे नहीं लगता कि आप चाहते हैं nis, बल्कि db(या शायद एक कस्टम मॉड्यूल)।
गिल्स एसओ- बुराई को रोकना '

यह टाइपो है .. मेरा मतलब है "उचित (कस्टम) nss मॉड्यूल लिखकर ..."
pbm
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.