Yubikey ile SSH İki Faktörlü kimlik doğrulaması (2FA)


12

Bu küçük kaygan yubikey var ve ssh oturumları kimlik doğrulaması yaparken ek bir güvenlik katmanı eklemek istiyorum. Sunucu tarafında şifre kimlik doğrulamasını zaten devre dışı bıraktım ve giriş yaparken sadece ssh tuşlarının kullanılmasına izin verdim.

Sorun, sshd ve PAM'yi yubikey yetkilendirmesi için yapılandırdıktan sonra, sshd hala sadece bir ssh anahtarı gerektiriyor, yubikey'den yanıt vermem istenmiyor.

Nasıl hem ssh anahtarı ve bir yubikey gerektirir?

(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, birkaç gün içinde tatmin edici bir cevap alamazsanız, bana ping atın ve soruya sağlıklı bir ödül koyacağım. Yakmak için temsilcim var ve ben de bu cevapla ilgileniyorum. :)
EEAA

Yanıtlar:


4

Tamam, tuttum ve sanırım makul bir çözüm buldum. Daha önce özlediğim temel şey sshd's AuthenticationMethods publickey,password. Bu, artık bir publickey ve bir parola - "parola" tarafından yönetilmesi gereksinimini zorlar PAM->auth-yubi. Ek değişiklikler de gerekiyordu, aşağıya bakın:

(Ubuntu 14.04 - güvenilir):

/etc/pam.d/yubi-auth

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

Not: Erişim kimliğinizi ve gizli anahtarınızı buradan alabilirsiniz

/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

Doğrulama

Ortak anahtar olmadan uzak bir ana bilgisayardan 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).

Uzak bir ana bilgisayardan SSH ile genel bir anahtar

$ 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)

Gelişme

Kimlik doğrulaması yapılırken uzak ssh sunucusundan "password:" yerine "Yubikey Auth:" ifadesini görmek güzel olurdu.

Ssh sunucusu yubico'nun kimlik doğrulama sistemiyle bağlantı kuramazsa ne olur? İdeal bir çözüm tamamen bağımsız olacaktır.

Görüş ve önerilerinizi takdir edin.


2

2FA'yı Yubikey ile kurmak zor olabilir ( U2F için opensh yamasının olduğu düşünülür ), ancak en kolay yol muhtemelen Yubico resmi web sitesinde açıklanan yöntemdir .

Temel olarak özel anahtarınızı Yubikey'de saklamanın ve PIN ile korumanın yoludur. Tam olarak tarif ettiğiniz 2FA değil (ama sahip olduğunuz ve bildiğiniz bir şey ), ancak güvenliği daha da arttırıyor (bazı başarısız denemelerden sonra Yubikey kilitleniyor).

TP: 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

" Ben pam modül ssh üzerinde olanlar değil, sadece yerel Yubikeys doğrulamak mümkün olduğuna inanıyorum " - Bununla ne demek istediğinden tamamen emin değilim. Peki Yubikey'nin uzak bir ssh sunucusuna PAM üzerinden kimlik doğrulaması yapmak için kullanılamayacağını mı söylüyorsunuz?
MadHatter

Evet. Çünkü yubikey ile iletişim kurma yoluna ihtiyaç duyuyor ve muhtemelen bazı yerel kütüphane kullanılarak yapılıyor. Ssh içinde bunun için bir kod yok.
Jakuje

Bu kesinlikle yanlış. Ben hem yubikey tabanlı kimlik doğrulamasını kabul etmek benim uzak sunucularını yapılandırmış yerli yubikey modu ve OATH modu . Bir yubikey'in tüm amacı, potansiyel olarak güvensiz bir kanal üzerinden iletim yapmak, bir defalık şifre gibi davranmak için kısa (ish) bir dize sağlamaktır. Yubikey, kimlik doğrulaması yaptığı sisteme fiziksel olarak bağlı olsaydı, çok daha az kullanışlı olurdu. Ben düşünüyorum , hem de sen PKCS modunda yubikey kilitleme üzereyiz yanlış.
MadHatter

Tamam sen haklısın. OTP modu için mümkündür. Ancak kilitleme PKCS11 standardının bir parçasıdır.
Jakuje

1
Bunun için teşekkür ederim - Cevabınızın iyileştirmeler için çok daha iyi olduğunu düşünüyorum ve downvote'umu kaldıracağım.
MadHatter
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.