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.