PAM - แฟล็กการควบคุมที่จำเป็นและเพียงพอ


14

ฉันกำลังศึกษา PAM และฉันค่อนข้างสับสนเกี่ยวกับความหมายของการรวมกันของธงควบคุม จากเอกสารของ Red Hat เรามี:


  • ความล้มเหลวที่จำเป็นของ PAM ดังกล่าวในที่สุดจะนำไปสู่ความล้มเหลวในการส่งคืน PAM-API แต่หลังจากโมดูลที่เหลืออยู่ (สำหรับบริการและประเภทนี้) ได้ถูกเรียกใช้

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


  • ความสำเร็จที่เพียงพอของโมดูลดังกล่าวเพียงพอที่จะตอบสนองความต้องการการรับรองความถูกต้องของสแต็คของโมดูล (หากโมดูลที่จำเป็นก่อนหน้านี้ล้มเหลวความสำเร็จของโมดูลนี้จะถูกละเว้น) ความล้มเหลวของโมดูลนี้ไม่ถือว่าร้ายแรงถึงความพึงพอใจกับแอปพลิเคชันที่ประสบความสำเร็จในประเภทนี้ หากโมดูลสำเร็จเฟรมเวิร์ก PAM จะส่งคืนความสำเร็จให้กับแอ็พพลิเคชันทันทีโดยไม่ต้องลองโมดูลอื่น ๆ

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

ตอนนี้ฉันไม่สามารถเข้าใจสิ่งที่จะเป็นพฤติกรรมเมื่อโมดูลบางอย่างrequiredล้มเหลวและโมดูลอื่นsufficientประสบความสำเร็จ

คำตอบ:


11

PAM ดำเนินการผ่านรายการต่างๆในสแต็กตามลำดับ มันเก็บความทรงจำของสิ่งที่อยู่ในสถานะเท่านั้น (ความสำเร็จหรือถูกปฏิเสธด้วยความสำเร็จหมายถึงความสำเร็จจนถึงตอนนี้) ไม่ใช่วิธีที่มันมาถึงสถานะนั้น

หากรายการที่ทำเครื่องหมายsufficientสำเร็จแล้วไลบรารี PAM จะหยุดการประมวลผลสแต็ก สิ่งนี้เกิดขึ้นไม่ว่าจะมีrequiredรายการก่อนหน้าหรือไม่ ณ จุดนี้ PAM จะส่งคืนสถานะปัจจุบัน: สำเร็จหากไม่มีrequiredรายการก่อนหน้านี้ล้มเหลวหรือถูกปฏิเสธ

หากรายการที่ทำเครื่องหมายว่าrequisiteล้มเหลวไลบรารี PAM จะหยุดการประมวลผลและส่งคืนความล้มเหลว ณ จุดนั้นมันไม่เกี่ยวข้องว่าrequiredรายการก่อนหน้าล้มเหลว

กล่าวอีกนัยหนึ่งrequiredไม่จำเป็นว่าจะต้องประมวลผลสแต็กทั้งหมด มันหมายถึงการไปต่อ


แต่ถ้ามีrequiredรายการใดล้มเหลวทำไมถึงPAMต้องผ่านกองไปเรื่อย ๆ ? ถ้ามันจะล้มเหลวในที่สุด?
Mohammed Noureldin

1
@MohammedNoureldin แม้ว่าความพยายามในการลงชื่อเข้าใช้จะล้มเหลวต้องทำบางสิ่งเช่นการบันทึกการเพิ่มการหมดเวลาจากความพยายามแบบ brute-force เป็นต้นโดยปกติแล้วระบบจะไม่เปิดเผยสาเหตุที่แท้จริงของความล้มเหลวเช่นหากค้นหา ชื่อผู้ใช้ล้มเหลวจากนั้นผู้ใช้ยังคงได้รับแจ้งให้ใส่รหัสผ่าน
Gilles 'หยุดความชั่วร้าย' ใน

คำสั่งซื้อคือลำดับที่แสดงอยู่ในการกำหนดค่า
OrangeDog

@OrangeDog ใช่ โมดูลที่แสดงในบรรทัดแรกจะถูกดำเนินการจากนั้นบรรทัดที่สองจะถูกดำเนินการ (หรือข้ามไปตามผลลัพธ์ของบรรทัดแรก) ฯลฯ
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

1

ในความคิดของฉันrequiredธงควบคุมต้องประสบความสำเร็จเสมอเพื่อให้โมดูลประสบความสำเร็จ

sufficientโมดูลถูกตั้งค่าสถานะจะถูกละเว้นถ้ามันล้มเหลว หากสำเร็จและไม่มีrequiredโมดูลที่ถูกตั้งค่าสถานะด้านบนล้มเหลวจะไม่มีการตรวจสอบโมดูลประเภทเดียวกันอื่น ๆ และถือว่าโมดูลประสบความสำเร็จ โดยทั่วไปแล้วrequiredธงมีลำดับความสำคัญสูงกว่าsufficientธง แต่คนหลังมีความสามารถในการหยุดการตรวจสอบส่วนที่เหลือของพวกเขาหากrequiredคนก่อนหน้าประสบความสำเร็จ

ตัวอย่าง:

1 auth       required     /lib/security/pam_nologin.so
2 auth       required     /lib/security/pam_securetty.so
3 auth       required     /lib/security/pam_env.so
4 auth       sufficient   /lib/security/pam_rhosts_auth.so
5 auth       required     /lib/security/pam_stack.so service=system-auth

หากบรรทัดที่ 1, 2, 3 และ 4 นั้นสำเร็จจะสามารถข้ามบรรทัด 5 และโมดูลauthได้สำเร็จ หากบรรทัดที่ 4 ไม่สำเร็จจะถูกละเว้นและตรวจสอบบรรทัดที่ 5 หากบรรทัดใดบรรทัดหนึ่ง 1, 2, 3 ล้มเหลวบรรทัดที่ 4 จะไม่นำมาพิจารณา


1
ฉันคิดว่าคำถามของเขาคือสิ่งที่เกิดขึ้นถ้า 1 ล้มเหลวและ 2-4 สำเร็จ 5 วิ่งหรือเปล่า หาก 1 ประสบความสำเร็จ 5 จะไม่ถูกเรียกใช้ หรือกล่าวอีกนัยหนึ่งว่า "หยุดหลังจากเพียงพอที่จะประสบความสำเร็จ" ใช้ถ้าโมดูลที่ต้องการก่อนหน้านี้ล้มเหลว?
cjm

ไม่โมดูลรับรองความถูกต้องจะล้มเหลวด้วยการรวมกันดังกล่าว
dsmsk80

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