SSH Hai yếu tố auth (2FA) với một yubikey


12

Vì vậy, tôi đã nhận được một chút yubikey và tôi muốn thêm một lớp bảo mật bổ sung khi xác thực các phiên ssh. Về phía máy chủ, tôi đã vô hiệu hóa xác thực mật khẩu và chỉ cho phép sử dụng các khóa ssh khi đăng nhập.

Vấn đề là, sau khi định cấu hình sshd và PAM cho yubikey auth, sshd vẫn chỉ yêu cầu khóa ssh, tôi không bao giờ được yêu cầu cung cấp phản hồi từ yubikey.

Làm thế nào để tôi yêu cầu cả hai và khóa ssh một 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

BTW, nếu bạn không nhận được câu trả lời thỏa đáng trong một vài ngày, hãy ping tôi và tôi sẽ đặt tiền thưởng lành mạnh cho câu hỏi. Tôi có rep để ghi, và tôi cũng thích câu trả lời này. :)
EEAA

Câu trả lời:


4

Ok, tôi đã giữ nó và tôi nghĩ rằng tôi đã đưa ra một giải pháp hợp lý. Điều chính tôi đã thiếu trước đây là sshd's AuthenticationMethods publickey,password. Điều này thực thi yêu cầu cho cả khóa công khai mật khẩu - "mật khẩu" hiện đang được xử lý bởi PAM->auth-yubi. Những thay đổi bổ sung cũng cần thiết, xem bên dưới:

(Ubuntu 14.04 - đáng tin cậy):

/etc/pam.d/yubi-auth

auth    required pam_yubico.so mode=client try_first_pass id=<id> key=<key>

Lưu ý: bạn có thể lấy ID truy cập và khóa bí mật của mình tại đây

/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

xác minh

SSH từ máy chủ từ xa không có khóa công khai

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 từ máy chủ từ xa khóa công khai

$ 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)

Cải thiện

Sẽ thật tuyệt khi thấy "Yubikey Auth:" thay vì "password:" từ máy chủ ssh từ xa khi xác thực.

Điều gì xảy ra khi máy chủ ssh không thể liên hệ với hệ thống xác minh xác thực của yubico? Một giải pháp lý tưởng sẽ hoàn toàn khép kín.

Nhận xét và đề xuất đánh giá cao.


2

Thiết lập 2FA với Yubikey có thể khó khăn (nghĩ rằng có bản vá mở cho U2F ), nhưng cách dễ nhất có lẽ là cách được mô tả trên trang web chính thức của Yubico .

Về cơ bản, đây là cách lưu trữ khóa riêng của bạn trên Yubikey và bảo vệ nó bằng mã PIN. Nó không chính xác là 2FA bạn được mô tả (nhưng đó là thứ bạn và những gì bạn biết ), nhưng nó tăng tính bảo mật hơn nữa (khóa Yubikey sau một số lần thử không thành công).

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

" Tôi tin rằng mô-đun pam chỉ có thể xác thực Yubikeys cục bộ, không phải mô-đun trên ssh " - Tôi không hoàn toàn chắc chắn ý của bạn là gì. Bạn có nghĩa là không thể sử dụng Yubikey để xác thực với máy chủ ssh từ xa thông qua PAM?
MadHatter

Đúng. Bởi vì nó cần cách để giao tiếp với yubikey và có lẽ nó được thực hiện bằng cách sử dụng một số thư viện địa phương. Không có mã cho điều này trong ssh.
Jakuje

Điều đó chắc chắn là sai. Tôi đã cấu hình các máy chủ từ xa của mình để chấp nhận xác thực dựa trên yubikey ở cả chế độ yubikey gốcchế độ OATH . Toàn bộ quan điểm của một yubikey là cung cấp một chuỗi (ish) ngắn để truyền qua kênh có khả năng không an toàn, để hoạt động như một mật khẩu một lần. Nếu yubikey phải được gắn vật lý vào hệ thống mà nó đang xác thực, nó sẽ ít hữu ích hơn nhiều. Tôi nghĩ bạn cũng đã sai về việc khóa yubikey trong chế độ PKCS.
MadHatter

OK bạn đúng rồi. Đối với chế độ OTP thì có thể. Nhưng khóa là một phần của tiêu chuẩn PKCS11.
Jakuje

1
Cảm ơn bạn vì điều đó - Tôi cảm thấy câu trả lời của bạn tốt hơn nhiều cho những cải tiến và sẽ loại bỏ downvote của tôi.
MadHatter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.