Score:4

การตรวจสอบสิทธิ์คีย์สาธารณะ SSH ด้วย Google Authenticator ยังคงขอรหัสผ่าน

ธง de

ฉันกำลังพยายามเปิดใช้งาน 2FA ด้วย ssh โดยใช้ libpam-google-authenticator ผู้ใช้บางรายไม่จำเป็นต้องเปิดใช้งานตัวตรวจสอบความถูกต้อง ทุกคนใช้กุญแจสาธารณะ ssh และไม่มีใครมีรหัสผ่าน ฉันใช้ Debian buster และฉันได้ลองใช้ libpam-google-authenticator จาก bullseye แล้ว

ปัญหาของฉันคือไม่ว่าฉันจะใส่อะไรในการกำหนดค่า PAM ผู้ใช้ที่ไม่ได้เปิดใช้งานตัวตรวจสอบความถูกต้องจะไม่เข้าสู่ระบบโดยตรง แต่จะถามรหัสผ่านเสมอ.

ฉันได้ติดตั้ง libpam-google-authenticator และกำหนดค่า /etc/ssh/sshd_config ด้วย:

เลขที่ยืนยันรหัสผ่าน
ChallengeResponseAuthentication ใช่
AuthenticationMethods คีย์สาธารณะ แป้นพิมพ์แบบโต้ตอบ
เลขที่ยืนยันรหัสผ่าน
หมายเลขใบอนุญาตว่างรหัสผ่าน

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

ใน /etc/pam.d/sshd ฉันได้ลองแล้ว (เช่นนี้ พยายามรับ SSH ด้วยรหัสสาธารณะ (ไม่มีรหัสผ่าน) + ตัวตรวจสอบความถูกต้องของ Google ทำงานบน Ubuntu 14.04.1):

#@include การตรวจสอบสิทธิ์ทั่วไป
จำเป็นต้องมีการตรวจสอบสิทธิ์ pam_google_authenticator ดังนั้นดีบัก nullok

ในกรณีนี้ ผู้ใช้ที่ไม่มีการตั้งค่าตัวรับรองความถูกต้องจะถูกปฏิเสธด้วยการแก้ไขจุดบกพร่องต่อไปนี้

5 ส.ค. 15:11:18 น. <host> sshd(pam_google_authenticator)[746624]: debug: start of google_authenticator for "<user>"
05 ส.ค. 15:11:18 น. <host> sshd(pam_google_authenticator)[746624]: debug: end of google_authenticator for "<user>" ผลลัพธ์: ค่าที่ส่งคืนควรถูกละเว้นโดย PAM dispatch
05 ส.ค. 15:11:18 น. <host> sshd[746620]: ข้อผิดพลาด: PAM: การอนุญาตถูกปฏิเสธสำหรับ <user> จาก <IP>

เป็น pam_permit จำเป็นต้องตั้งค่ากรณีทางเลือกหรือไม่

ฉันได้ลองชุดค่าผสมต่างๆ ต้องมีการตรวจสอบสิทธิ์ และ รับรองความถูกต้องเพียงพอ ก่อนและหลัง @รวมการตรวจสอบสิทธิ์ทั่วไป แต่ทั้งหมดนี้ส่งผลให้ผู้ใช้ที่ไม่มีตัวตรวจสอบความถูกต้องถูกถามรหัสผ่าน และบางครั้งผู้ใช้ที่มีตัวตรวจสอบความถูกต้องก็ถูกถามรหัสผ่านด้วย

ใครบ้างมีสูตรที่จะทำให้งานนี้?

in flag
ตกลง ฉันคิดว่าในที่สุดฉันก็เข้าใจปัญหาของคุณดีขึ้น ฉันอ่านมาบ้างแล้ว และตอนนี้ฉันมีคำถาม ผู้ใช้ทั้งหมดที่ต้องการ pubkey+totp อยู่ในกลุ่มเฉพาะหรืออาจอยู่ในกลุ่ม? หรืออาจจะตรงกันข้ามผู้ใช้ทั้งหมดที่เป็น pubkey อยู่ในกลุ่มเท่านั้นหรือไม่? คุณสามารถตั้งค่าคำสั่ง 'AuthenticationMethod' ที่แตกต่างกันในส่วน 'match' ใน sshd_config ของคุณ
Hamish Moffatt avatar
de flag
ฉันสามารถทำงานนั้นได้ เพื่อทำให้สิ่งต่าง ๆ ซับซ้อนขึ้น เมื่อฉันทำงานนี้แล้ว ฉันต้องการพยายามทำให้ข้อกำหนด TOTP ขึ้นอยู่กับว่าฉันเชื่อมต่อจากที่ใดโดยใช้ `pam_access` - ถ้าฉันเชื่อมต่อจาก VPN IP ฉันต้องการข้าม TOTP แม้ว่าดูเหมือนว่าฉันจะตรวจสอบ IP ได้โดยใช้ `match` แทนที่จะเป็น `pam_access` ดังนั้นอาจจะใช้งานได้ในภายหลัง
Score:2
ธง de

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

ใน /etc/ssh/sshd_config

ใช้ PAM ใช่
เลขที่ยืนยันรหัสผ่าน
ChallengeResponseAuthentication ใช่
AuthenticationMethods คีย์สาธารณะ แป้นพิมพ์แบบโต้ตอบ
หมายเลขใบอนุญาตว่างรหัสผ่าน

ใน /etc/pam.d/sshd

# การรับรองมาตรฐาน Un*x
#@include การตรวจสอบสิทธิ์ทั่วไป

# ต้องใช้ตัวตรวจสอบความถูกต้องหากไม่ได้กำหนดค่าให้อนุญาต
จำเป็นต้องมีการตรวจสอบสิทธิ์ pam_google_authenticator ดังนั้นดีบัก nullok
จำเป็นต้องมีการตรวจสอบสิทธิ์ pam_permit.so

@รวม comon-auth ต้องปิดการใช้งานเพราะมี pam_unix ซึ่งฉันไม่ต้องการใช้ ถ้าอย่างนั้นคุณต้อง pam_permit เพื่อให้การรับรองความถูกต้องสำเร็จสำหรับผู้ใช้ที่ไม่มีตัวตรวจสอบความถูกต้อง (ซึ่ง pam_google_authenticator ส่งคืนการเพิกเฉยแทนที่จะผ่าน)

สิ่งนี้ยังไม่อนุญาตให้รูทเข้าสู่ระบบด้วยคีย์ ssh บันทึก sshd

sshd[1244501]: ร้ายแรง: ข้อผิดพลาดภายใน: PAM รับรองความถูกต้องสำเร็จทั้งที่ควรจะล้มเหลว

นี้มีการหารือที่ Google Authenticator PAM บน SSH บล็อกการเข้าสู่ระบบรูทโดยไม่มี 2FA .

หลังจากได้รับสิ่งนี้แล้วฉันคิดว่ามันดีกว่าที่จะบังคับใช้ 2FA สำหรับบางกลุ่มโดยใช้การกำหนดค่า SSH ตามที่ @zoredache แนะนำ สิ่งนี้ทำให้คุณสามารถอนุญาต IP บางตัวได้อย่างง่ายดายเนื่องจากไม่ต้องการ 2FA ด้วย ในกรณีนี้ sshd_config พูดเช่น

ใช้ PAM ใช่
เลขที่ยืนยันรหัสผ่าน
ChallengeResponseAuthentication ใช่
#AuthenticationMethods # เริ่มต้นใดๆ
หมายเลขใบอนุญาตว่างรหัสผ่าน

ที่อยู่กลุ่มจับคู่ *,!172.16.1.0/24
    AuthenticationMethods คีย์สาธารณะ แป้นพิมพ์แบบโต้ตอบ

และ /etc/pam.d/ssh พูดว่า

 การตรวจสอบมาตรฐาน Un*x
#@include การตรวจสอบสิทธิ์ทั่วไป

# ต้องการผู้ตรวจสอบสิทธิ์ SSH ไม่ควรอนุญาตให้ผู้ใช้ที่ไม่มี
รับรองความถูกต้องเพียงพอ pam_google_authenticator.so ดีบัก nullok
การตรวจสอบสิทธิ์ที่จำเป็น pam_deny.so
NeverEndingQueue avatar
cn flag
ขอบคุณ ไม่มีคำแนะนำใดที่ฉันพบว่ากล่าวถึง: การตั้งค่า `pam_permit` เพื่อทำให้ 2FA เป็นตัวเลือกสำหรับผู้ใช้
Score:0
ธง in

ฉันไม่คิดว่าคุณต้องการหรือต้องการแสดงความคิดเห็นเกี่ยวกับ @รวมการตรวจสอบสิทธิ์ทั่วไป. หรืออย่างน้อยฉันก็ไม่ได้และดูเหมือนว่าจะทำงานได้อย่างถูกต้อง แต่ฉันยังคงทดสอบสิ่งนี้เป็นส่วนใหญ่

ใครบ้างมีสูตรที่จะทำให้งานนี้?

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

- โฮสต์: linux_systems
  งาน:

  - ชื่อ: เพิ่มกลุ่ม 'totp'
    กลุ่ม:
      ชื่อ: ท็อป
      สถานะ: ปัจจุบัน
      ระบบ: ใช่

  - ชื่อ: สร้างไดเร็กทอรีสำหรับความลับสุดยอด
    ไฟล์:
      สถานะ: ไดเร็กทอรี
      เส้นทาง: /var/lib/google-authenticator
      เจ้าของ: "0"
      กลุ่ม: "0"
      โหมด: "0700"

  - ชื่อ: ติดตั้ง libpam-google-authenticator
    ถนัด:
      update_cache: ใช่
      cache_valid_time: '{{ apt_cache_valid_time | ค่าเริ่มต้น (7200) }}'
      สถานะ: ปัจจุบัน
      ชื่อ:
      - libpam-google-authenticator

  - ชื่อ: สร้างความลับสำหรับ 'ผู้ใช้ตัวอย่าง'
    หาเรื่อง:
      สร้าง: /var/lib/google-authenticator/example-user
    เปลือก: |
      TOTP_USER=ตัวอย่างผู้ใช้; \
      google-authenticator \
        --บังคับ --เงียบ \
        --รหัสฉุกเฉิน=10 \
        --ตามเวลา \
        --qr-mode=ไม่มี \
        --allow-reuse \
        --ขนาดหน้าต่าง=3 \
        --rate-limit=4 --rate-time=30 \
        --secret=/var/lib/google-authenticator/${TOTP_USER}

  - ชื่อ: อัพเดทแพม
    บรรทัดในไฟล์:
      แทรกหลังจาก: '^@include รหัสผ่านทั่วไป'
      เส้นทาง: /etc/pam.d/login
      บรรทัด: 'ต้องมีการตรวจสอบสิทธิ์ pam_google_authenticator.so nullok user=root secret=/var/lib/google-authenticator/${USER}'

  - ชื่อ: อัพเดทแพม
    บรรทัดในไฟล์:
      แทรกหลังจาก: '^@include รหัสผ่านทั่วไป'
      เส้นทาง: /etc/pam.d/sshd
      บรรทัด: 'ต้องมีการตรวจสอบสิทธิ์ pam_google_authenticator.so nullok user=root secret=/var/lib/google-authenticator/${USER}'

  - ชื่อ: อัปเดต sshd ChallengeResponseAuthentication
    แจ้งเตือน: รีสตาร์ท sshd
    บรรทัดในไฟล์:
      เส้นทาง: /etc/ssh/sshd_config
      regexp: '^ChallengeResponseAuthentication .*'
      บรรทัด: 'ChallengeResponseAuthentication ใช่'

  ตัวจัดการ:

  - ชื่อ: รีสตาร์ท sshd
    บริการ:
      ชื่อ: sshd
      สถานะ: รีสตาร์ท
Hamish Moffatt avatar
de flag
ขอบคุณ. ดูเหมือนว่าฉันมี ยกเว้นว่าคุณได้เพิ่มโมดูลในภายหลังในไฟล์ - อย่างมีประสิทธิภาพในตอนท้าย คุณเปลี่ยน AuthenticationMethods ใน sshd_config เพื่อเพิ่มคีย์บอร์ดแบบโต้ตอบหรือไม่ ฉันไม่เคยได้รับข้อความแจ้งสำหรับรหัสยืนยันหากไม่มีรหัสนี้ แต่ด้วยโมดูลนี้และโมดูลตัวตรวจสอบความถูกต้องในตอนท้าย ฉันจึงถูกถามรหัสผ่าน การรับรองความถูกต้องทั่วไปของคุณไม่มีการแก้ไขหรือไม่
in flag
เท่าที่จำได้ การเปลี่ยนแปลงเหล่านั้นคือทุกสิ่งที่ฉันต้องการจากการติดตั้ง Debian buster ที่มีอยู่ในปัจจุบัน
Hamish Moffatt avatar
de flag
ฉันไม่ได้พยายามตรวจสอบ TOTP โดยไม่แก้ไข AuthenticationMethods ใน sshd_config เอกสารอื่น ๆ ที่ฉันเคยเห็นเช่น https://blog.geoghegan.me/linux/setting-up-google-auth-2fa-on-debian รวมถึงขั้นตอนนี้ด้วย
in flag
คุณพูดถูกเอกสารพูดอย่างนั้นสำหรับ ssh การทดสอบส่วนใหญ่ของฉันคือการทดสอบการเข้าสู่ระบบในเครื่อง ตอนนี้ฉันไม่แน่ใจว่าฉันเคยทดสอบ SSH หรือไม่ SSH ของฉันใช้คีย์เป็นหลักเท่านั้น และฉันไม่ได้กังวลเกี่ยวกับ ssh สำหรับบัญชีทดสอบของฉัน เนื่องจากไม่มีคีย์ใดๆ เลย
Hamish Moffatt avatar
de flag
ตกลง ขอบคุณสำหรับการตอบกลับ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา