ทำความเข้าใจกับ PAM และ NSS


21

ในวันสุดท้ายฉันได้ติดตั้งระบบ Linux ด้วยการรับรองความถูกต้องของ LDAP และทุกอย่างทำงานได้ดี แต่ยังมีบางสิ่งที่ฉันไม่สามารถเข้าใจเกี่ยวกับ NSS และ PAM ได้อย่างแท้จริงหลังจากการวิจัยมากมาย

อ้างอิง:

NSS ช่วยให้ผู้ดูแลระบบสามารถระบุรายการของแหล่งข้อมูลที่ไฟล์รับรองความถูกต้องชื่อโฮสต์และข้อมูลอื่น ๆ จะถูกจัดเก็บและค้นหา

และ

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

สิ่งที่ฉันไม่เข้าใจคือ PAM และ NSS ทำงานอย่างไรและโต้ตอบกัน ในหนังสือเล่มนี้มีการอธิบายสถาปัตยกรรมที่ค่อนข้างดี: ฉันกำหนดค่า PAM เพื่อใช้pam_ldapสำหรับบัญชี LDAP และpam_unixสำหรับบัญชีท้องถิ่นจากนั้นฉันกำหนดค่าnsswitch.confเพื่อดึงข้อมูลจากไฟล์ในเครื่องและ LDAP

หากฉันเข้าใจว่าใช้ LDAP อย่างถูกต้องสองครั้งให้ทำก่อนpam_ldapโดย NSS ซึ่งเรียกตัวเองมาpam_unixก่อน นั่นถูกต้องใช่ไหม? LDAP ใช้สองครั้งจริง ๆ หรือไม่ แต่ทำไมฉันต้องกำหนดค่าทั้ง NSS และ PAM คำอธิบายของฉันคือ PAM ทำงานแตกต่างจาก NSS และใช้โดยโปรแกรมอื่น แต่ก็ควรจะใช้เฉพาะ NSS หรือ PAM เท่านั้นอย่างที่ฉันได้อ่านในหน้านี้

ดังนั้นฉันจึงทดลองสักหน่อยและฉันได้พยายามลบ LDAP ออกจากnsswitch.conf(และการตรวจสอบสิทธิ์หยุดทำงานราวกับว่ามีเพียง pam_ldap เท่านั้นที่ไม่เพียงพอที่จะทำงาน) จากนั้นฉันเปิดใช้งาน LDAP ใน NSS อีกครั้งและฉันลบออกจากการกำหนดค่า PAM (ครั้งนี้ทุกอย่างทำงานได้ดีราวกับว่าpam_ldapไม่มีประโยชน์และ NSS ก็เพียงพอที่จะรับรองความถูกต้องของผู้ใช้)

มีใครบ้างที่สามารถช่วยฉันอธิบายสิ่งนี้ได้ ขอบคุณมากล่วงหน้า

UPDATE

ฉันเพิ่งลองทำอะไรซักอย่างตอนนี้ ฉันออกอีกครั้งทุกpam_ldapรายการในฟิลด์การกำหนดค่า pam ทั้งหมดและฉันได้นำออกจากshadow: ldap nsswitch.confขณะนี้ในทุกระบบมีเพียงเส้น: passwd: ldap filesและในgroup: ldap files nsswitch.confดี ... การเข้าสู่ระบบด้วยผู้ใช้ LDAP ทำงานได้อย่างสมบูรณ์ทั้งสองบรรทัด (บวก/etc/ldap.conf) เพียงพอที่จะกำหนดค่าการรับรองความถูกต้องของ LDAP

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


ฉันไม่เห็นการอัปเดตของคุณ โปรดรันคำสั่งต่อไปนี้และรายงานสิ่งที่คุณพบแทนที่ LDAPUSER ด้วยผู้ใช้ที่คุณคิดว่าได้รับการกำหนดค่าใน LDAP เท่านั้น getent shadow | grep LDAPUSER grep LDAPUSER /etc/shadow
Andrew B

คำตอบ:


25

มันช่วยแยกสิ่งแบบนี้ในหัวของคุณ:

  • NSS - ระบบที่ใช้โมดูลสำหรับการควบคุมวิธีการประกอบฐานข้อมูลระดับ OS ต่างๆในหน่วยความจำ ซึ่งรวมถึง ( แต่ไม่ จำกัด เฉพาะ) passwd, group, shadow(นี้เป็นสิ่งสำคัญที่จะต้องทราบ) hostsและ การค้นหา UID ใช้passwdฐานข้อมูลและการค้นหา GID ใช้groupฐานข้อมูล

  • PAM - ระบบที่ใช้โมดูลสำหรับการตรวจสอบความถูกต้องของบริการและการบัญชี ไม่เหมือนกับ NSS คุณไม่ได้ขยายฐานข้อมูลที่มีอยู่ โมดูล PAM สามารถใช้ตรรกะใดก็ได้ที่พวกเขาต้องการแม้ว่าการล็อกอินเชลล์ยังคงขึ้นอยู่กับpasswdและgroupฐานข้อมูลของ NSS (คุณต้องค้นหา UID / GID เสมอ)

ความแตกต่างที่สำคัญคือ PAM ไม่ได้ทำอะไรด้วยตัวเอง หากแอปพลิเคชันไม่เชื่อมโยงกับไลบรารี PAM และโทรออกไป PAM จะไม่ถูกใช้งาน NSS เป็นแกนหลักของระบบปฏิบัติการและฐานข้อมูลนั้นค่อนข้างแพร่หลายไปถึงการทำงานปกติของระบบปฏิบัติการ

ตอนนี้เรามีออกจากทางที่นี่เป็นลูกโค้งขณะ pam_ldap เป็นที่นิยมวิธีการตรวจสอบกับ LDAP มันไม่ได้เป็นเพียงวิธี

  • หากshadowชี้ไปที่บริการ ldap ภายใน/etc/nsswitch.confการตรวจสอบความถูกต้องใด ๆ ที่ทำงานกับฐานข้อมูลเงาจะประสบความสำเร็จหากมีแอตทริบิวต์สำหรับการแมปฟิลด์เงาเหล่านั้น (โดยเฉพาะอย่างยิ่งฟิลด์รหัสผ่านที่เข้ารหัส) อยู่ใน LDAP
    • นี่หมายความว่าpam_unix.soอาจส่งผลให้เกิดการตรวจสอบสิทธิ์กับ LDAP เนื่องจากเป็นการพิสูจน์ตัวตนกับฐานข้อมูลเงา (ซึ่งจัดการโดย NSS และอาจชี้ไปที่ LDAP)
  • หากโมดูล PAM ทำการโทรกับ daemon ซึ่งในทางกลับกันจะสอบถามฐานข้อมูล LDAP (พูดว่าpam_sss.soตะขอใดsssd) อาจเป็นไปได้ที่จะมีการอ้างอิง LDAP

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

6
รับรองความถูกต้องใช่ แต่ถ้าคุณไม่มีวิธีอื่นในการรับข้อมูลผู้ใช้ (local / etc / passwd หรืออะไรก็ตาม) คุณยังต้องการวิธีหาสมาชิกกลุ่ม, โฮมไดเร็กตอรี่ ฯลฯ คุณยังสับสนการพิสูจน์ตัวตนและการอนุญาต
TheFiddlerWins

1
@ColOfAbRiX TheFIddlerWins ถูกต้อง มันเพียงพอที่จะรับรองความถูกต้องแต่คุณยังคงต้องการวิธีการค้นหาสมาชิก UIDs + GID ตามที่ฉันบันทึกไว้ สิ่งเหล่านี้ได้มาจากpasswdและgroupฐานข้อมูล (NSS) ซึ่งหมายความว่าจะต้องอยู่ในระบบโลคัล ( /etc/passwd+ /etc/group) หรือได้มาจากldapโมดูล NSS
Andrew B

3
นี่คือวิธีการที่จะช่วยให้คุณเข้าใจ: การทำงานgetent passwdและgetent groupมี LDAP /etc/nsswitch.confเปิดใช้งานสำหรับฐานข้อมูลทั้งใน จากนั้นปิดใช้งาน LDAP ในไฟล์นั้นและเรียกใช้คำสั่งทั้งสองอีกครั้ง getentเป็นคำสั่งสำหรับดัมพ์ฐานข้อมูล NSS
Andrew B

ในที่สุดฉันก็สามารถเข้าใจทุกอย่างด้วยการทำงานอีกเล็กน้อย ขอบคุณทุกคน!
ColOfAbRiX

1

NSS อยู่ที่นั่นเพื่อแจกแจงข้อมูลเกี่ยวกับบริการ / ผู้ใช้ (กลุ่มที่คุณเป็นเจ้าของโดยที่โฮมไดเร็กตอรี่ของคุณเป็นต้น) PAM กำหนดสิ่งที่ต้องทำเกี่ยวกับข้อมูลนั้น

หากคุณต้องการใช้ LDAP สำหรับการตรวจสอบสิทธิ์คุณต้องมี pam_ldap หากคุณกำลังใช้งานอย่างอื่น (บัญชีท้องถิ่น Kerberos ฯลฯ ) คุณก็อาจจะไม่ได้

ดังนั้นพวกเขาจึงทำสิ่งต่าง ๆ NSS ได้รับข้อมูล PAM พิจารณาว่าใครได้รับอนุญาตให้ทำอะไรเมื่อได้รับข้อมูลแล้ว


ขอบคุณ แต่ปัญหาคือว่ามันไม่ทำงานอย่างนั้นในระบบของฉันอย่างน้อย :) ที่ startnin ฉันเข้าใจเหมือนกัน แต่แล้วฉันได้พยายามลบรายการ pam_ldap ทั้งหมดในการรับรองความถูกต้อง PAM และ LDAP ยังคงทำงานอยู่ (และ ปิดการใช้งานแคช) นี้เพิ่มความสับสนของฉัน :)
ColOfAbRiX

คุณจะตรวจสอบว่าคุณตรวจสอบผ่าน pam_ldap อย่างไรหลังจากลบมัน กรุณาโพสต์เนื้อหาของการตรวจสอบสิทธิ์ของคุณ ฉันไม่แน่ใจเกี่ยวกับเส้นทางใน SUSE แต่เพื่อตอบคำถามแรกของคำถามที่สามของคุณแม้ว่า pam_ldap จะทำงานคุณต้องมีวิธีที่ระบบจะรู้ว่าคุณเป็นใคร - มีให้โดย NSS
TheFiddlerWins

ฉันขอโทษฉันหมายความว่าหลังจากลบ pam_ldap แล้ว LDAP auth ทำงานโดยที่ไม่มีฉันเดาว่ามันทำงานผ่าน NSS ไฟล์common-authมีเฉพาะ pam_env, pam_unix และ pam_deny
ColOfAbRiX

ไม่สมเหตุสมผลคุณยืนยันได้อย่างไรว่า LDAP auth ทำงานอย่างไร
TheFiddlerWins

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