ระบบมีขั้นตอนอะไรบ้างเมื่อจัดการการเชื่อมต่อ SSH


9

ระบบมีขั้นตอนอะไรบ้างเมื่อจัดการการเชื่อมต่อ SSH

  1. เราพยายามเข้าสู่ระบบผ่านทาง ssh
  2. sshd เริ่มโมดูล pam และ pam เพื่อตรวจสอบสิทธิ์เรา
  3. เราจำเป็นต้องระบุชื่อผู้ใช้และรหัสผ่าน (ตรวจสอบไฟล์passwdและshadowไฟล์)
  4. ตรวจสอบ pam สำหรับhosts.allow/deny, /etc/shellsและสิ่งอื่น ๆ
  5. หากทุกอย่างเป็นไปได้เราจะเข้าสู่ระบบ
  6. ???
  7. เชลล์เริ่มแล้ว

ดังนั้นคำถามของฉันคือกลไกใดที่รับผิดชอบในการตรวจสอบว่าเชลล์ใดที่กำหนดให้กับผู้ใช้ในpasswdไฟล์ (ในขั้นตอนที่ 6) มันคือตัวเอง, โมดูลแพsshdมบางอย่าง, หรืออย่างอื่น? ฉันรู้ว่าฉันสามารถแทนที่passwdไฟล์ (สำหรับการตรวจสอบชื่อผู้ใช้และรหัสผ่าน) โดยการเขียนโมดูลแพม แต่ฉันจะแทนที่passwdไฟล์สำหรับรายการเชลล์ได้อย่างไร

คำตอบ:


8

เท่าที่ฉันรู้ PAM ไม่ได้กำหนดเชลล์ของผู้ใช้นี่เป็นแอปพลิเคชันที่เหลือ โมดูลเซสชั่นของ PAM ดำเนินการทั่วไปและตรวจสอบว่าจะต้องทำในทุกการเข้าสู่ระบบโดยใช้บริการนั้น หากแอปพลิเคชันต้องการเริ่มเชลล์คุณสามารถดำเนินการได้ฟรีและโดยทั่วไปจะค้นหาเชลล์ในฐานข้อมูลผู้ใช้

สมมติว่าคำถามของคุณเกี่ยวกับOpenSSHนั่นคือสิ่งที่มันทำ: เมื่อผู้ใช้รับรองความถูกต้องและสิ่งเซสชัน PAM เสร็จเรียบร้อยแล้ว (หากกำหนดค่าให้ใช้PAM¹) เซิร์ฟเวอร์ ssh จะค้นหาเชลล์ในฐานข้อมูลผู้ใช้ (โดยตรงไม่ใช่ ผ่านห้องสมุด PAM)

ฐานข้อมูลผู้ใช้ไม่ จำกัด/usr/passwdและเพื่อน บน Linux (ซึ่งผมถือว่าคุณกำลังใช้ตั้งแต่คุณพูดถึงshadow) สิ่งที่ทำให้ฐานข้อมูลผู้ใช้จะถูกกำหนดโดยการตั้งค่าในpasswd /etc/nsswitch.confในการตั้งค่าคอมพิวเตอร์หลายเพิ่มเติมเรื่องธรรมดาที่จะฐานข้อมูลท้องถิ่นที่มีNISและLDAP หากคุณต้องการใช้เชลล์ที่ไม่ได้เป็นหนึ่งใน/etc/passwdนี้อาจเป็นสิ่งที่จะกำหนดค่า (แม้ว่ามันจะเป็นบิตแปลกและบางทีผู้คนสามารถให้คำแนะนำที่ดีกว่าถ้าคุณบอกเราว่าคุณกำลังพยายามที่จะบรรลุ)

หากคุณต้องการให้ผู้ใช้ที่ไม่มีการเข้าถึงแบบเต็มเชลล์โซลูชันแบบธรรมชาติคือการเปลี่ยน/etc/passwdเพื่อ จำกัด เชลล์ - บางทีrsshเพื่ออนุญาตแอปพลิเคชันประเภทการคัดลอกไฟล์เพียงไม่กี่อย่างเช่น scp, rsync และ cvs นอกจากนี้คุณยังสามารถใช้คำสั่งบังคับของผู้ใช้ไฟล์~/.ssh/authorized_keys

หากคุณต้องการที่จะเห็นร่องรอยของสิ่งที่เซิร์ฟเวอร์ SSH ssh -dddจะทำเริ่มภูตเป็น นอกจากนี้คุณยังสามารถรับมุมมองของลูกค้าได้ด้วยssh -vvvที่นี่มุมมองของเซิร์ฟเวอร์คือสิ่งที่คุณสนใจมากที่สุด

¹ OpenSSH เพียงใช้ PAM ถ้ามีการกำหนดค่าด้วยการสนับสนุน PAM และUsePAMสั่งมีการตั้งค่าในyes sshd_configแม้ว่าจะใช้ PAM แต่ก็มีวิธีการรับรองความถูกต้องอื่น ๆ นอกเหนือจาก PAM ในการตรวจสอบคีย์สาธารณะโดยเฉพาะอย่างยิ่งไม่ผ่าน PAM


ฉันต้องการอนุญาตให้ผู้ใช้งานแอปพลิเคชันของฉันลงชื่อเข้าใช้เชลล์เป็นผู้ใช้ปกติโดยไม่ต้องสร้างบัญชีในระบบ ข้อมูลผู้ใช้ (ชื่อผู้ใช้พาสและเชลล์) จะถูกเก็บไว้ใน sqlite db ขั้นตอนแรกคือโมดูล sqlite pam ที่รับรองความถูกต้องของผู้ใช้ที่ได้รับ ขั้นตอนที่สองคือจัดเตรียมเชลล์ที่อ่านจากฐานข้อมูล ดังนั้นฉันคิดว่ามันสามารถทำได้โดยการเขียนโมดูลที่เหมาะสม หาคำตอบแล้ว ...
pbm

@pbm: ฉันไม่คิดว่าคุณต้องการnisมากกว่าdb(หรืออาจจะโมดูลที่กำหนดเอง)
Gilles 'หยุดความชั่วร้าย'

เป็น typo .. ฉันหมายถึง "โดยการเขียนที่เหมาะสม (กำหนดเอง) โมดูล nss" ...
pbm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.