Назад | Перейти на главную страницу

SSH Двухфакторная аутентификация (2FA) с юбикеем

Итак, у меня есть этот симпатичный юбикей, и я хочу добавить дополнительный уровень безопасности при аутентификации сеансов ssh. На стороне сервера я уже отключил аутентификацию по паролю и разрешил использование ключей ssh ​​только при входе в систему.

Проблема в том, что после настройки sshd и PAM для yubikey auth sshd по-прежнему требует только ssh-ключ, меня никогда не просят предоставить ответ от yubikey.

Как мне потребовать обе и ключ ssh и юбикей?

(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

Хорошо, я продолжал и думаю, что нашел разумное решение. Первое, чего мне раньше не хватало, это sshd's AuthenticationMethods publickey,password. Это требует наличия открытого ключа и пароль - теперь "пароль" обрабатывается PAM->auth-yubi. Также потребовались дополнительные изменения, см. Ниже:

(ubuntu 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

/ и т.д. / 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:" вместо "password:" с удаленного ssh-сервера при аутентификации.

Что происходит, когда ssh-сервер не может связаться с системой проверки подлинности yubico? Идеальное решение было бы полностью автономным.

Комментарии и предложения приветствуются.

Настройка 2FA с помощью Yubikey может быть сложной задачей (думал, что есть openssh патч для U2F), но, вероятно, самый простой способ описан на Официальный сайт Yubico.

По сути, это способ хранения вашего закрытого ключа на Yubikey и его защиты с помощью PIN-кода. Это не совсем та двухфакторная аутентификация, которую вы описали (но это то, что вы иметь и что ты знать), но это еще больше увеличивает безопасность (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