SSH Двофакторний auth (2FA) з юбікієм


12

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

Проблема полягає в тому, що після налаштування sshd та PAM для auth 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

/ etc / 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 може бути складним (вважається, що існує відкритий патч для 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

" Я вважаю, що модуль pam здатний аутентифікувати лише місцеві юбікеї, а не ті, що над ssh " - я не зовсім впевнений, що ви маєте на увазі під цим. Ви маєте на увазі, що Yubikey не можна використовувати для автентифікації на віддаленому сервері ssh через PAM?
MadHatter

Так. Тому що йому потрібен спосіб спілкування з юбікеєм, і це, мабуть, робиться за допомогою місцевої бібліотеки. Код для цього в ssh не існує.
Jakuje

Це, безумовно, неправильно. Я налаштував свої віддалені сервери на прийняття аутентифікації на основі юбікі як у рідному, так і в режимі OATH . Вся суть юбікею полягає в наданні короткої (іш) рядки для передачі по потенційно незахищеному каналу, щоб діяти як разовий пароль. Якби юбікею довелося фізично приєднатися до системи, на яку він був автентичною, це було б набагато менш корисно. Я думаю, що ви помиляєтесь і щодо блокування юбікі в режимі PKCS.
MadHatter

Гаразд, ви праві. Для режиму OTP це можливо. Але замок є частиною стандарту PKCS11.
Jakuje

1
Дякую за це - я вважаю, що ваша відповідь набагато краща за вдосконалення, і вона видалить свою позицію.
MadHatter
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.