การรับรองความถูกต้องสามขั้นตอน?


9

ฉันใช้ Ubuntu

ฉันแค่สงสัยว่าเป็นไปได้หรือไม่ที่จะมี libpam-google-authenticator (ซึ่งให้คุณเข้าสู่ระบบโดยใช้รหัสที่สร้างขึ้นโดยโทรศัพท์ของคุณ) และการตรวจสอบใบรับรองตั้งค่าให้ทำงานร่วมกันและถ้าเป็นไปได้ฉันจะทำอย่างไร การตั้งค่า ดังนั้น - ในการเข้าสู่บัญชีของฉันคุณต้องมีรหัสผ่านโทรศัพท์ของฉัน (และรหัสผ่าน) และใบรับรอง / รหัสส่วนตัวและรหัสผ่าน

ฉันทั้งคู่ได้ทำงานอย่างอิสระ แต่ก็ไม่เคยทำให้พวกเขาทำงานร่วมกันได้ ฉันแน่ใจว่าเป็นไปได้

ขอบคุณ


โดยปกติคุณจะไม่ได้รับผลตอบแทนมากนักจากปัจจัยที่ซ้ำซ้อน ใบรับรองและตัวสร้างโค้ดตรงกับปัจจัย 'สิ่งที่คุณมี' รหัสผ่านเหมาะกับ 'สิ่งที่คุณรู้' ปัจจัยร่วมอื่น ๆ คือ 'สิ่งที่คุณเป็น' (ชีวภาพ)
Zoredache

คำตอบ:


8

เป็นไปได้ที่จะทำเช่นนี้โดยการผูกมัดโมดูล 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


คำตอบที่ยอดเยี่ยม! ถ้าฉันสามารถลงคะแนนมากกว่าหนึ่งครั้งนี้ฉันจะ
Aaron Miller

ขอบคุณ! แม้ว่า - สำหรับการเข้าสู่ระบบใบรับรองฉันเพิ่มคีย์สาธารณะของฉันเป็น .ssh / authorized_keys (โดยใช้ RSAAuthentication และการตั้งค่า PubkeyAuthentication ใน sshd_config) และสำหรับรหัส OTP ฉันใช้ pam_google_authenticator - google-authenticator.googlecode.com/hg แล้วมันจะทำงานอย่างไร
Jesse W

@JesseW เพื่อการทำงานคุณต้องตั้งค่า SSHD ให้ใช้ PAM เช่นเดียวกับพับลิกคีย์ แม้ว่าฉันจะไม่แน่ใจในรายละเอียดที่เฉพาะเจาะจงคุณจะต้องตั้งค่าChallengeResponseAuthenticationและUsePAM'ใช่' จากนั้นตั้งค่าบรรทัดรายละเอียดในคำตอบของฉันข้างต้นเป็น /etc/pam.d/sshd หรือ /etc/pam.d/common - อัตโนมัติขึ้นอยู่กับว่าคุณต้องการดำเนินการนี้สำหรับการเข้าสู่ระบบทั้งหมดหรือเพียงแค่ SSH อย่าลืมลบบรรทัด 'pam_certificate_auth.so' ตัวกรองและแก้ไขบรรทัด [success = <n> เป็นผลลัพธ์
Xenopathic

2

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

โดยพื้นฐานแล้วฉันตั้งค่า Google Authenticator และรหัสผ่านใน PAM จากนั้นตั้งค่าการรับรองความถูกต้องของรหัสสาธารณะใน OpenSSH (ข้ามสองคนนี้) และในที่สุดก็ต้องใช้ OpenSSH เพื่อรับรองความถูกต้องผ่าน PAM (บรรทัดสุดท้าย)

จาก / etc / ssh / sshd_conf

PubkeyAuthentication yes
ChallengeResponseAuthentication yes
PasswordAuthentication no
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive

1

เฉพาะ Pubkey + GoogleAuth คุณต้องเพิ่มที่ด้านบนของ /etc/pam.d/sshd ของคุณ

#auth    requisite    pam_unix.so nullok_secure #if you want password, too :)
auth    requisite    pam_google_authenticator.so
auth    [success=2]  pam_permit.so

ฉันคิดว่าคุณมี OpenSSH> = 6.2 และ sshd_config แก้ไขแล้ว

สำหรับการรักษาความปลอดภัยหวาดระแวงเพิ่มเติมให้เพิ่มการกำหนดค่าพิเศษบางอย่าง: D

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