SSH Two-Factor auth (2FA) dengan yubikey

12

Jadi saya punya sedikit yubikey yang apik ini dan saya ingin menambahkan lapisan keamanan tambahan saat mengotentikasi sesi ssh. Di sisi server saya sudah menonaktifkan otentikasi kata sandi dan hanya mengizinkan penggunaan kunci ssh saat masuk.

Masalahnya adalah, setelah mengkonfigurasi sshd dan PAM untuk yubikey auth, sshd masih hanya memerlukan kunci ssh, saya tidak pernah diminta untuk memberikan respons dari yubikey.

Bagaimana cara membutuhkan baik dan kunci ssh dan Yubikey sebuah?

(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
ben lemasurier
sumber
BTW, jika Anda tidak mendapatkan jawaban yang memuaskan dalam beberapa hari, ping saya dan saya akan memberikan hadiah yang sehat pada pertanyaan. Saya punya perwakilan untuk dibakar, dan saya juga tertarik dengan jawaban ini. :)
EEAA

Jawaban:

4

Ok, saya terus melakukannya dan saya pikir saya telah menemukan solusi yang masuk akal. Hal utama yang sebelumnya hilang adalah sshd AuthenticationMethods publickey,password. Ini memberlakukan persyaratan untuk publickey dan kata sandi - "kata sandi" yang sekarang ditangani oleh PAM->auth-yubi. Perubahan tambahan juga diperlukan, lihat di bawah:

(ubuntu 14.04 - tepercaya):

/etc/pam.d/yubi-auth

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

Catatan: Anda dapat memperoleh ID akses dan kunci rahasia di sini

/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

Verifikasi

SSH dari host jarak jauh tanpa kunci publik

root@0a6442bcb21c:/# ssh [email protected]
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 dari host jarak jauh dengan kunci publik

$ ssh [email protected]
Authenticated with partial success.
[email protected]'s password:
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-33-generic x86_64)

Perbaikan

Akan menyenangkan untuk melihat "Yubikey Auth:" daripada "password:" dari server ssh jarak jauh ketika mengotentikasi.

Apa yang terjadi ketika server ssh tidak dapat menghubungi sistem verifikasi auth yubico? Solusi ideal akan sepenuhnya mandiri.

Komentar dan saran sangat kami hargai.

ben lemasurier
sumber
2

Menyiapkan 2FA dengan Yubikey bisa rumit (berpikir ada patch openssh untuk U2F ), tetapi cara termudah mungkin adalah yang dijelaskan di situs resmi Yubico .

Ini pada dasarnya adalah cara menyimpan kunci pribadi Anda di Yubikey dan melindunginya dengan PIN. Ini bukan persis 2FA yang Anda gambarkan (tetapi itu adalah sesuatu yang Anda miliki dan dan apa yang Anda ketahui ), tetapi itu meningkatkan keamanan lebih lagi (Yubikey mengunci setelah beberapa percobaan yang gagal).

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 [email protected]
Jakuje
sumber
" Saya percaya modul pam hanya dapat mengotentikasi Yubikeys lokal, bukan yang lebih dari ssh " - Saya tidak sepenuhnya yakin apa yang Anda maksud dengan itu. Maksud Anda Yubikey tidak dapat digunakan untuk mengautentikasi ke server ssh jarak jauh melalui PAM?
MadHatter
Iya. Karena itu perlu cara untuk berkomunikasi dengan yubikey dan mungkin dilakukan menggunakan beberapa perpustakaan lokal. Tidak ada kode untuk ini di ssh.
Jakuje
Itu pasti salah. Saya telah mengonfigurasi server jarak jauh saya untuk menerima otentikasi berbasis yubikey dalam mode asli yubikey dan mode OATH . Inti dari yubikey adalah untuk menyediakan string pendek (ish) untuk ditransmisikan melalui saluran yang berpotensi tidak aman, untuk bertindak sebagai kata sandi satu kali. Jika yubikey harus secara fisik melekat pada sistem yang diautentikasi, itu akan jauh lebih bermanfaat. Saya pikir Anda salah tentang penguncian yubikey dalam mode PKCS, juga.
MadHatter
Baik, kamu benar. Untuk mode OTP dimungkinkan. Tetapi penguncian adalah bagian dari standar PKCS11.
Jakuje
1
Terima kasih untuk itu - saya merasa jawaban Anda jauh lebih baik untuk perbaikan, dan akan menghapus downvote saya.
MadHatter