เป็นไปได้ที่จะทำเช่นนี้โดยการผูกมัดโมดูล PAM เข้าด้วยกัน แต่ก่อนที่ฉันจะได้รับรายละเอียดใด ๆ :
การกำหนดค่า PAM ไม่ถูกต้องและ WILL จะป้องกันไม่ให้คุณเข้าสู่ระบบของคุณ
โชคดีที่คุณสามารถบูทเข้าสู่โหมดผู้ใช้คนเดียวและแก้ไขปัญหาได้เสมอ แต่ขอเตือนว่า PAM ไม่ใช่สิ่งที่คุณต้องการยุ่งเกินกว่าที่จำเป็น
อย่างไรก็ตามความคิดที่อยู่เบื้องหลังนี้คือว่ามันเป็นไปได้ที่จะใช้ประโยชน์จากการซ้อนโมดูล PAM เพื่อให้แน่ใจว่าpam-google-authenticator
, pam_unix
(การตรวจสอบนี้รหัสผ่านของคุณ) และโมดูลใบรับรองทุกคนจะต้องประสบความสำเร็จในการช่วยให้คุณเข้าถึง ตามค่าเริ่มต้น PAM ได้รับการกำหนดค่าให้อนุญาตโมดูลการตรวจสอบความถูกต้องใด ๆ เพื่อรับรองความถูกต้องของคุณ
ใน /etc/pam.d/common-auth คุณจะเห็นบรรทัดด้านบนที่มีลักษณะคล้ายกับด้านล่าง:
auth [success=2 default=ignore] pam_unix.so nullok_secure try_first_pass
สิ่งนี้จะบอก PAM ว่าควรจะpam_unix.so
ประสบความสำเร็จโดยจะข้ามกฎสองข้อถัดไป (ซึ่งมักจะเป็นโมดูลการตรวจสอบความถูกต้องอื่นไปpam_deny.so
) และดำเนินการต่อไปยังโมดูลทางเลือก อย่างไรก็ตามหากโมดูลล้มเหลวก็จะถูกละเว้นและการควบคุมจะส่งผ่านไปยังโมดูลถัดไปในห่วงโซ่ สิ่งนี้จะดำเนินต่อไปตามแต่ละโมดูลการตรวจสอบจนกว่าตัวควบคุมจะข้ามไปที่บล็อกเสริมหรือ PAM จะเข้าชม pam_deny.so และล้มเหลวทันที
นี้สามารถยกระดับเพื่อให้มั่นใจว่าpam-google-authenticator
, pam_unix.so
และโมดูล PAM ใบรับรองของคุณทุกคนจะต้องประสบความสำเร็จในการช่วยให้คุณเข้าถึง ฉันไม่ทราบชื่อของโมดูลตัวตรวจสอบความถูกต้องของ Google หรือโมดูลใบรับรองที่คุณใช้ แต่คุณควรจะสามารถค้นหาได้ในไฟล์รหัสรับรองความถูกต้องของคุณ ดังนั้นโดยใส่อะไรแบบนี้ไว้ที่ด้านบน:
auth requisite pam_unix.so nullok_secure
auth requisite pam_google_authenticator.so
auth requisite pam_certificate_auth.so
auth [success=<n>] pam_permit.so
การแทนที่<n>
ด้วยจำนวนโมดูลระหว่างโมดูล pam_permit.so ที่นี่และpam_permit.so
โมดูลถัดไป- กล่าวอีกอย่างนี้ควรตั้งเป็นรหัส auth สุดยอด [สำเร็จ = n ค่าเริ่มต้น = ละเว้น] + 1 ไวยากรณ์นี้เป็นบิตขี้ขลาด แต่เป็นหลักข้ามโมดูลรับรองความถูกต้องหลังจากโมดูลดังกล่าวได้ประสบความสำเร็จ
แน่นอนคุณอาจสงสัยว่าจะ จำกัด การรับรองความถูกต้องสามขั้นตอนนี้เพียงบัญชีผู้ใช้ของคุณได้อย่างไร สามารถทำได้ด้วยpam_succeed_if.so
โมดูลและควรแทรกไว้เหนือบล็อก auth สามขั้นตอนที่อธิบายไว้ข้างต้น:
auth [success=ignore default=4] pam_succeed_if.so user = <username>
ไหน<username>
จะถูกแทนที่ด้วยชื่อผู้ใช้ของคุณ บรรทัดนี้บอกว่าควรจะ pam_succeed_if.so สำเร็จ (ชื่อผู้ใช้ของคุณตรงกับชื่อผู้ใช้ในบรรทัดนั้น) จากนั้น PAM ควรดำเนินการกับโมดูลถัดไปซึ่งเป็นโมดูลรับรองความถูกต้องสามขั้นตอน มิฉะนั้น PAM ควรข้ามไปยังโมดูลจริงซึ่งอยู่ห่างจากโมดูลนี้ 4 โมดูล
ในการจับคู่หลายสิ่งตัวอย่างเช่นการเป็นสมาชิกของกลุ่มพร้อมกับชื่อผู้ใช้ที่แน่นอนต้องใช้หลายบรรทัดตัวอย่างเช่น:
auth [success=1 default=ignore] pam_succeed_if.so user = <username>
auth [success=ignore default=4] pam_succeed_if.so user ingroup <group>
ก่อนที่จะทำสิ่งนี้ฉันจะสำรองไฟล์รับรองความถูกต้องและทำความคุ้นเคยกับโหมดผู้ใช้คนเดียวและวิธีการกู้คืนไฟล์เก่าในกรณีฉุกเฉิน ฉันกำหนดค่านี้ไม่ได้ทดสอบ แต่ควรใช้งานได้
สำหรับการทดสอบในครั้งแรกให้เปิดรูทเชลล์หรือสองอันแล้วปล่อยทิ้งไว้ตามลำพัง สิ่งเหล่านี้ทำหน้าที่เป็นทางเลือกในกรณีที่มีสิ่งผิดปกติเนื่องจากคุณสามารถแทนที่การตรวจสอบสิทธิ์ด้วยการสำรองข้อมูลได้อย่างง่ายดาย จากนั้นทำการเปลี่ยนแปลงเหล่านี้ จากนั้นลองใช้su
เพื่อลงชื่อเข้าใช้บัญชีผู้ใช้ของคุณ - คุณต้องผ่านกระบวนการตรวจสอบสามขั้นตอน
เอกสารฉบับเต็มสำหรับpam_succeed_if.so
โมดูลสามารถดูได้ที่http://linux.die.net/man/8/pam_succeed_if