yubikey가 포함 된 SSH 2 단계 인증 (2FA)


12

그래서 나는이 매끄러운 작은 yubikey를 얻었고 ssh 세션을 인증 할 때 추가 보안 계층을 추가하고 싶습니다. 서버 측에서 이미 비밀번호 인증을 비활성화했으며 로그인 할 때 ssh 키 사용 만 허용합니다.

문제는 yubikey 인증을 위해 sshd 및 PAM을 구성한 후에도 sshd에는 여전히 ssh 키만 필요하다는 것입니다.

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

BTW, 며칠 만에 만족스러운 답변을 얻지 못하면 핑 (Ping)하면 건강한 현상금을 물을 것입니다. 화상을 입을 담당자가 있으며이 답변에 관심이 있습니다. :)
EEAA

답변:


4

좋아, 나는 그것을 유지했고 나는 합리적인 해결책을 생각해 냈다고 생각한다. 내가 이전에 놓친 주요한 것은 sshd 's AuthenticationMethods publickey,password입니다. 이로 인해 공개 키 암호 ( "암호")가 요구됩니다 PAM->auth-yubi. 추가 변경도 필요했습니다 (아래 참조).

(우분투 14.04-신뢰할 수있는) :

/etc/pam.d/yubi-auth

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

참고 : 여기에서 액세스 ID와 비밀 키를 얻을 수 있습니다

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

개량

인증시 원격 ssh 서버에서 "password :"대신 "Yubikey Auth :"가 표시되는 것이 좋습니다.

ssh 서버가 yubico의 인증 확인 시스템에 접속할 수없는 경우 어떻게됩니까? 이상적인 솔루션은 완전히 독립적입니다.

의견과 제안에 감사드립니다.


2

Yubikey로 2FA를 설정하는 것은 까다로울 수 있지만 ( U2F 용 openssh 패치 가 있다고 생각 ) 가장 쉬운 방법은 Yubico 공식 웹 사이트 에 설명 된 방법 일 것입니다 .

기본적으로 Yubikey에 개인 키를 저장하고 PIN으로 보호하는 방법입니다. 그것은 당신이 묘사 한 2FA가 아니지만 (그러나 당신 이 가지고 있고 알고있는 것입니다 ) 보안을 훨씬 향상시킵니다 (실패 시도 후 유비 키 잠금).

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가 아닌 로컬 Yubikeys 만 인증 할 수 있다고 생각합니다. "-그 의미가 무엇인지는 확실하지 않습니다. Yubikey를 사용하여 PAM을 통해 원격 ssh 서버를 인증 할 수 없습니까?
MadHatter

예. 그것은 yubikey와 통신하는 방법이 필요하기 때문에 아마도 로컬 라이브러리를 사용하여 수행 될 것입니다. ssh에는 이에 대한 코드가 없습니다.
Jakuje

분명히 틀 렸습니다. 네이티브 yubikey 모드OATH 모드 모두에서 yubikey 기반 인증을 받도록 원격 서버를 구성했습니다 . yubikey의 요점은 잠재적으로 안전하지 않은 채널을 통해 전송되는 짧은 (ish) 문자열을 제공하여 일회용 암호 역할을하는 것입니다. yubikey가 인증하는 시스템에 물리적으로 연결되어 있어야한다면 훨씬 덜 유용 할 것입니다. 나는 생각 뿐만 아니라, 당신 PKCS 모드에서 yubikey 잠금하려고합니다 잘못된.
MadHatter

그래, 네 말이 맞아 OTP 모드의 경우 가능합니다. 그러나 잠금은 PKCS11 표준의 일부입니다.
Jakuje

1
감사합니다-귀하의 답변이 개선을 위해 훨씬 낫다고 생각하고 내 downvote를 제거합니다.
MadHatter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.