yubikeyを使用したSSH Two-Factor認証(2FA)


12

だから私はこの滑らかで少しゆったりとしたものを手に入れたので、sshセッションを認証するときにセキュリティの層を追加したいと思います。サーバー側では、パスワード認証をすでに無効にしており、ログイン時にのみsshキーの使用を許可しています。

問題は、sshdとPAMを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

ところで、もしあなたが数日で満足のいく答えを得られないなら、私にpingを送ってください、そして、私は質問に健康的な賞金をかけます。私は燃える担当者がいます、そして、この答えにも興味があります。:)
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>

注:ここでアクセス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の公式Webサイトで説明されている方法です。

基本的には、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経由ではなく、ローカルのYubikeysのみを認証できると信じています」-それが何を意味するのか完全にはわかりません。Yubikeyを使用してPAM経由でリモートsshサーバーを認証できないということですか?
MadHatter

はい。yubikeyと通信する方法が必要であり、おそらくローカルライブラリを使用して行われるためです。sshにはこのためのコードはありません。
Jakuje

それは間違いです。ネイティブyubikeyモードOATHモードの両方でyubikeyベースの認証を受け入れるようにリモートサーバーを構成しました。yubikeyの重要な点は、安全でない可能性のあるチャネルを介して送信するための短い(ish)文字列を提供し、ワンタイムパスワードとして機能させることです。yubikeyを認証対象のシステムに物理的に接続する必要がある場合、それはあまり役に立ちません。私は考えるだけでなく、あなたPKCSモードでyubikeyロックについてだが間違っ。
MadHatter

はい、あなたは正しいです。OTPモードでは可能です。ただし、ロックはPKCS11標準の一部です。
Jakuje

1
それに感謝します-あなたの答えは改善のためにはるかに優れていると思います、そして私のダウン票を削除します。
MadHatter
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.