SSH Two-Factor auth (2FA) с юбикеем

12

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

Проблема в том, что после настройки sshd и PAM для аутентификации yubikey для 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
Бен Лемасурье
источник
Кстати, если вы не получите удовлетворительный ответ через пару дней, пингуйте меня, и я возьму здоровую награду за этот вопрос. У меня есть репутация, и я тоже заинтересован в этом ответе. :)
EEAA

Ответы:

4

Хорошо, я продолжил и думаю, что нашел разумное решение. Первой вещью, которую я ранее пропустил, был sshd 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? Идеальное решение было бы полностью автономным.

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

Бен Лемасурье
источник
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
Jakuje
источник
« Я считаю, что модуль pam может аутентифицировать только локальные Yubikeys, а не те, которые используют ssh » - я не совсем уверен, что вы имеете в виду под этим. Вы имеете в виду, что Yubikey нельзя использовать для аутентификации на удаленном ssh-сервере через PAM?
MadHatter
Да. Потому что для этого нужен способ связи с yubikey, и, вероятно, это делается с помощью какой-то локальной библиотеки. В ssh нет кода для этого.
Jakuje
Это определенно неправильно. Я настроил мои удаленные сервера принимать аутентификацию YubiKey на основе и в режиме Yubikey родным и OATH режиме . Весь смысл yubikey в том, чтобы предоставить короткую (ish) строку для передачи по потенциально небезопасному каналу, чтобы действовать как одноразовый пароль. Если бы yubikey должен был быть физически подключен к системе, в которой он проходил аутентификацию, это было бы намного менее полезно. Я думаю, что вы не правы по поводу блокировки yubikey в режиме PKCS.
MadHatter
Хорошо вы правы Для режима OTP это возможно. Но блокировка является частью стандарта PKCS11.
Jakuje
1
Спасибо за это - я чувствую, что ваш ответ намного лучше для улучшений, и уберет мое понижение.
MadHatter