Итак, у меня есть этот симпатичный юбикей, и я хочу добавить дополнительный уровень безопасности при аутентификации сеансов 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 - верный):
auth required pam_yubico.so mode=client try_first_pass id=<id> key=<key>
Примечание: вы можете получить свой идентификатор доступа и секретный ключ Вот
# Standard Un*x authentication.
#@include common-auth
# Yubikey auth
@include yubi-auth
UsePAM yes
ChallengeResponseAuthentication no
AuthenticationMethods publickey,password
PasswordAuthentication yes
service ssh restart
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 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 блокируется после нескольких неудачных попыток).
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