RHEL 6.3に搭載されているOpenSSHで利用可能になった、2段階認証の設定方法をまとめます。
#バージョン注意
- 古いOpenSSHのバージョンの設定になります
- OpenSSH-5.3p1で有効なRequiredAuthentications2を使っていますが、OpenSSH-6.2でAuthenticationMethodsに置き換えられています。
-
AuthenticationMethodsを使った2段階認証は、
検証に成功していないので、設定方法がわかりません。2014/09/15追記: Linuxサーバにインストールされたsshコマンドでは2段階認証できることを確認しています - 2014/09/15追記: しかし、Tera TermではAuthenticationMethodsをつかった複数認証要求に対応していないため、ログインすることができません(http://sourceforge.jp/ticket/browse.php?group_id=1412&tid=31493)
- 2015/02/13追記: OpenSSH[実践]入門でTera TermからAuthenticationMethods利用可能の記載あり(https://books.google.co.jp/books?id=iUcoBQAAQBAJ&pg=PA254&lpg=PA254&dq=teraterm+AuthenticationMethods&source=bl&ots=MO3qgxyOdB&sig=q0x3lSR7pDV03X83JwYT0jI_HoA&hl=ja&sa=X&ei=-lfdVOeIIsHlmAWxiICQCQ&ved=0CDgQ6AEwBA#v=onepage&q=teraterm%20AuthenticationMethods&f=false)要検証
#要件
- sshログイン時、公開鍵認証と、パスワード認証の両方を突破しないとログインできないようにすること
#設定
以下の設定ファイルを編集します
/etc/ssh/sshd_config
対象の設定は RequiredAuthentications2 です。
manページ
RequiredAuthentications[12]
Specifies required methods of authentications that has to succeed before authorizing the connection. (RequiredAuthentication1 for Protocol version 1, and RequiredAuthentication2 for v2)
RequiredAuthentications1 method[,method...]
RequiredAuthentications2 method[,method...]
Example 1:
RequiredAuthentications2 password,hostbased
Example 2:
RequiredAuthentications2 publickey,password
Available methods:
password, keyboard-interactive, publickey, hostbased, gssapi-keyex, gssapi-with-mic
RequiredAuthentications2を有効化するためには以降の設定が必要となります
##チャレンジレスポンス認証の許可
チャレンジレスポンス認証とは
ChallengeResponseAuthentication yes
上記設定のみでは、チャレンジレスポンス認証を行うことはできませんでした。
おそらくですが、/etc/login.confが存在しないためだと思います
ChallengeResponseAuthentication
Specifies whether challenge-response authentication is allowed (e.g. via PAM or though >authentication styles supported in login.conf(5)) The default is ''yes''.
チャレンジレスポンス認証はPAMを使うことで利用できるようになります
UsePAM yes
##パスワード認証の許可
2段階認証にパスワード認証を利用する場合は、以下の設定が必要です
PasswordAuthentication yes
##2段階認証設定
RequiredAuthentications2 の設定をします
###鍵認証+パスワード認証
RequiredAuthentications2 publickey,password
###鍵認証+チャレンジレスポンス認証
RequiredAuthentications2 publickey,keyboard-interactive
##設定反映
# /etc/init.d/sshd restart
※設定に不備があるとログインできなくなります。最終的に動作確認がとれるまで、セッションを切らないように気を付けてください
#Tera Termでログインしてみる
##パスワード認証の場合
- Tera Termを立ち上げ、接続先を入力し、「OK」押下
- ユーザ名、鍵のパスフレーズ、鍵の指定をして「OK」押下
- ウィンドウのタイトルが「SSH認証を再試行中」になる
- 「プレインテキストを使う」を選択し、パスワードを入力「OK」押下
- ログインできたことを確認する
##パスワード認証の場合
- Tera Termを立ち上げ、接続先を入力し、「OK」押下
- ユーザ名、鍵のパスフレーズ、鍵の指定をして「OK」押下
- ウィンドウのタイトルが「SSH認証を再試行中」になる
- パスワード認証の場合は、「プレインテキストを使う」を選択し、パスワードを入力「OK」押下
- チャレンジレスポンス認証の場合は「チャレンジレスポンス認証を使う」にチェックを入れ「OK」押下
- 「SSH認証チャレンジ」ウィンドウにパスワードを入力し「OK」押下
- ログインできたことを確認する
#Tips
- 認証の順番までは制御することはできないので、先にパスワード認証してから鍵認証でログインすることもできる
- 全ユーザに2段階認証させたくない場合は、Matchを使って対象だけRequiredAuthentications2を設定できる
- ただし、以下の設定でためしてみたところ、パスワード認証を行うことができなかった
PasswordAuthentication no
Match User username
PasswordAuthentication yes
RequiredAuthentications2 publickey,password
全体ではパスワードログインを禁止して、特定ユーザだけ2段階認証したかったが、ログインできなかった
#イケてない部分
##問題点
2段階認証を実現させるだけであれば、上記設定で完了だが、以下の問題が発生してしまう
- 全ユーザ2段階認証にすると、リモートシェル実行が難しくなる
- 特定ユーザだけ2段階認証にすると、他のユーザのログインを鍵認証に絞れない。
##解決策
- ログイン用sshdをつくる
操作ユーザログイン専用のsshdを、別IPか別ポートで起動させることで、設定ファイルを分離させる。
AllowUserとかでログインできるユーザをしぼったりするとよりセキュアかも
→作り方は後日まとめる - 2段階認証したくないユーザの設定を入れる
スクリプト実行ユーザのMatch設定で認証方法を1つに絞る(未検証)
RequiredAuthentications2 publickey,password
Match User scriptuser
RequiredAuthentications2 publickey
設定もれするユーザも出てくるかもしれないので、運用が大変かもしれない
#残課題
- WinSCPとかの挙動を検証。場合によってはsftpだけ回避とかしないといけないかもしれない
- TeraTarmマクロでログインできるか検証
- パスワードを設定していないユーザーでログインできないことを確認する
#参考