SSH Two-Factor auth (2FA) พร้อม yubikey


12

ดังนั้นฉันจึงได้ yubikey เล็กน้อยที่ลื่นไหลนี้และฉันต้องการเพิ่มระดับความปลอดภัยเพิ่มเติมเมื่อทำการพิสูจน์ตัวตนเซสชัน ssh ในฝั่งเซิร์ฟเวอร์ฉันได้ปิดการใช้งานการตรวจสอบรหัสผ่านแล้วและอนุญาตให้ใช้คีย์ ssh เมื่อลงชื่อเข้าใช้เท่านั้น

ปัญหาคือหลังจากกำหนดค่า sshd และ PAM สำหรับ yubikey auth แล้ว sshd ยังต้องการเพียงคีย์ ssh ฉันไม่เคยขอให้ตอบกลับจาก yubikey

ฉันจะต้องการทั้งคีย์และ ssh และ yubikey ได้อย่างไร

(ubuntu 14.04 - trusty)

/etc/pam.d/common-auth:

auth    required    pam_yubico.so mode=client try_first_pass id=<id> key=<secret>
auth    [success=1 default=ignore]  pam_unix.so nullok_secure try_first_pass
# here's the fallback if no module succeeds
auth    requisite           pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth    required            pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth    optional            pam_cap.so
# end of pam-auth-update config

/etc/ssh/sshd_config:

...

PasswordAuthentication no
ChallengeResponseAuthentication yes
UsePAM yes

BTW ถ้าคุณไม่ได้รับคำตอบที่น่าพอใจภายในสองสามวันส่ง Ping มาให้ฉันและฉันจะทำให้คำถามนั้นดีขึ้น ฉันมีตัวแทนที่จะเผาไหม้และฉันก็สนใจในคำตอบนี้เช่นกัน :)
EEAA

คำตอบ:


4

ตกลงฉันเก็บมันไว้และฉันคิดว่าฉันคิดวิธีแก้ปัญหาที่สมเหตุสมผล สิ่งหลักผมก็หายไปก่อนหน้านี้เป็นของ AuthenticationMethods publickey,passwordsshd นี้บังคับใช้ที่จำเป็นสำหรับทั้ง publickey และรหัสผ่าน - "รหัสผ่าน" S PAM->auth-yubiตอนนี้ถูกจัดการโดย จำเป็นต้องมีการเปลี่ยนแปลงเพิ่มเติมด้วยดูด้านล่าง:

(อูบุนตู 14.04 - เชื่อถือได้):

/etc/pam.d/yubi-auth

auth    required pam_yubico.so mode=client try_first_pass id=<id> key=<key>

หมายเหตุ: คุณสามารถรับรหัสการเข้าถึงและรหัสลับได้ที่นี่

/etc/pam.d/sshd

# Standard Un*x authentication.
#@include common-auth

# Yubikey auth
@include yubi-auth

/ etc / SSH / sshd_config

UsePAM yes
ChallengeResponseAuthentication no
AuthenticationMethods publickey,password
PasswordAuthentication yes

service ssh restart

การตรวจสอบ

SSH จากโฮสต์ระยะไกลที่ไม่มีกุญแจสาธารณะ

root@0a6442bcb21c:/# ssh ben@192.168.1.20
The authenticity of host '192.168.1.20 (192.168.1.20)' can't be established.
ECDSA key fingerprint is ea:2a:e3:98:35:72:66:b1:e0:65:6b:3f:60:8a:af:ab.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.20' (ECDSA) to the list of known hosts.
Permission denied (publickey).

SSH จากโฮสต์ระยะไกลที่มีกุญแจสาธารณะ

$ ssh ben@192.168.1.20
Authenticated with partial success.
ben@192.168.1.20's password:
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-33-generic x86_64)

การปรับปรุง

มันจะเป็นการดีถ้าได้เห็น "Yubikey Auth:" แทนที่จะเป็น "รหัสผ่าน:" จากเซิร์ฟเวอร์ ssh ระยะไกลเมื่อตรวจสอบสิทธิ์

จะเกิดอะไรขึ้นเมื่อเซิร์ฟเวอร์ ssh ไม่สามารถติดต่อระบบตรวจสอบรับรองความถูกต้องของ yubico ได้ ทางออกที่ดีจะเป็นตัวเองทั้งหมด

ความคิดเห็นและข้อเสนอแนะชื่นชม


2

การตั้งค่า 2FA กับ Yubikey สามารถหากิน (คิดว่ามี openssh แพทช์สำหรับ U2F ) แต่วิธีที่ง่ายที่สุดน่าจะเป็นหนึ่งที่อธิบายไว้ในเว็บไซต์อย่างเป็นทางการ Yubico

เป็นวิธีการจัดเก็บคีย์ส่วนตัวของคุณบน Yubikey และปกป้องด้วย PIN มันไม่ตรงกับที่คุณอธิบายไว้ 2FA (แต่เป็นสิ่งที่คุณมีและสิ่งที่คุณรู้ ) แต่มันเพิ่มความปลอดภัยมากขึ้น (Yubikey ล็อคหลังจากพยายามไม่สำเร็จบางครั้ง)

TL: DR;

OPENSC_LIBS=`locate opensc-pkcs11.so`
yubico-piv-tool -s 9a -a generate -o public.pem
yubico-piv-tool -a verify-pin -P 123456 -a selfsign-certificate -s 9a \
  -S "/CN=SSH key/" -i public.pem -o cert.pem
yubico-piv-tool -a import-certificate -s 9a -i cert.pem
ssh-keygen -D $OPENSC_LIBS/opensc-pkcs11.so -e
ssh -I $OPENSC_LIBS/opensc-pkcs11.so user@remote.example.com

" ฉันเชื่อว่าโมดูล pam สามารถตรวจสอบความถูกต้องของ Yubikeys เฉพาะที่ไม่ใช่ Ssh " - ฉันไม่แน่ใจว่าคุณหมายถึงอะไร คุณหมายความว่าไม่สามารถใช้ Yubikey เพื่อตรวจสอบสิทธิ์เซิร์ฟเวอร์ระยะไกลผ่าน PAM ได้หรือไม่
MadHatter

ใช่. เพราะมันต้องการวิธีในการสื่อสารกับ yubikey และอาจใช้ห้องสมุดท้องถิ่นบางแห่ง ไม่มีรหัสสำหรับสิ่งนี้ใน ssh
Jakuje

มันผิดอย่างแน่นอน ผมได้กำหนดค่าเซิร์ฟเวอร์ระยะไกลของฉันที่จะยอมรับการตรวจสอบ Yubikey ตามทั้งในโหมด Yubikey พื้นเมืองและสาบานโหมด จุดรวมของ yubikey คือการให้สตริงสั้น (ish) เพื่อส่งผ่านช่องทางที่อาจไม่ปลอดภัยเพื่อทำหน้าที่เป็นรหัสผ่านครั้งเดียว ถ้า yubikey ต้องเชื่อมต่อทางกายภาพกับระบบที่ตรวจสอบแล้วจะมีประโยชน์น้อยกว่ามาก ฉันคิดว่าคุณผิดเกี่ยวกับการล็อค yubikey ในโหมด PKCS เช่นกัน
MadHatter

ตกลงคุณพูดถูก สำหรับโหมด OTP มันเป็นไปได้ แต่การล็อคเป็นส่วนหนึ่งของมาตรฐาน PKCS11
Jakuje

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