SSHの接続は鍵認証にしてはいるんだが、さらにセキュアにしたくGoogle Authenticator をいれてみたログ
今回すること
- サーバーへのSSHログイン時に認証鍵とスマフォアプリによるワンタイムパスワードにする
事前準備
- クライアントの公開鍵を用意しておく
- macの場合ターミナルから ssh_keygenでもしてid_rsa.pubをつくっておけばOK
- スマフォにワンタイムパスワードを扱えるアプリをいれておく
- iijのSmartKeyが複数サーバーやサービスを管理もしやすくおすすめ
設定
CentOS7にGoogle Authenticatorをインストール
※ SSHでサーバーに接続しrootになっている状態とする
- pamをbuildできるようにpam-develをインストール
- Google AuthenticatorをGitHubからもってくる
- GitHubからもってきたソースでコンパイルしてインストール
- /usr/local/lib/securityに配置されるので、/usr/lib64/security/にもシンボリックリンクをおいておく
# ln -s /usr/local/lib/security/pam_google_authenticator.so /usr/lib64/security/pam_google_authenticator.so
sshログインするユーザーに公開鍵を登録しておく
予め作成したログイン用の公開鍵(id_rsa.pub)をログインするユーザーに登録しておく
以下はmacのターミナルで鍵を作成して登録した手順。すでに鍵認証でログインできているなら省略してよし
mac> ssh-keygen
なにやらでてくるけどすべてエンター
mac> scp ~/.ssh/id_rsa.pub LOGIN_USER@HOSTNAME:
mac> ssh LOGIN_USER@HOSTNAME;
server$ cat id_rsa.pub >> ~/.ssh/authorized_keys
server$ chmod 600 ~/.ssh/authorized_keys
sshdの設定を修正し認証キーとGoogleAuthenticatorで認証されるようにする
※ 再度サーバーにrootログインしているものとする
- sshd_configの修正
# vi /etc/ssh/sshd_config
以下を追記
-----
Protocol 2 ← SSH2のみとする
PermitRootLogin no # Rootログインを禁止
PubkeyAuthentication yes # 公開鍵認証を許可
PasswordAuthentication no # パスワード認証を禁止
ChallengeResponseAuthentication yes # チャレンジレスポンス認証(ワンタイムパスワードとか用)を許可
AuthenticationMethods publickey,keyboard-interactive # 2要素認証として認証キー、チャレンジレスポンスを利用する
----
- Google Authenticator用のPAMファイルの作成
# vi /etc/pam.d/google-auth
---
#%PAM-1.0
auth required pam_env.so
auth sufficient pam_google_authenticator.so try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so
----
- sshdのPAMファイルの設定を変更してパスワードからGoogleAuthenticatorに切り替える
# vi /etc/pam.d/sshd
---
#%PAM-1.0
auth required pam_sepermit.so
#auth substack password-auth # コメントアウト
auth substack google-auth # 追加
----
- sshdのリスタート
ログイン用ユーザーでGoogleAuthenticatorの設定
※SSHでサーバーにログインするユーザーに切り替えておく
QRコードが表示されるので、SmartKey などの対応アプリでQRコードを撮影すれば登録ができる
他にもごちゃごちゃでてくるがyを押していけばOK
※ 最後に非常時用パスワード(6桁)が5つ表示されるのでこれはどこかにメモしておく。アプリが使えなくなった時などの緊急時に利用する。
ログインテスト
※ 新たにSSH接続を試す
※ テストする前にSSHを完全に切ってしまうと、上手くできていなかった場合、SSH接続が一切できなくなってしまうので注意
このVerification code:がでてきたら、アプリに表示されている6桁の数字を入力する。
ログインができたら成功。
感想
自分用のメモとして冗長にはなったが、これで2要素認証ができた。
今回は鍵認証とワンタイムパスワードでやっているが、パスワードとワンタイムパスワードなどの使い方もできる。
Amazon Linuxならyum だけでGoogle Autenticatorがいれられるし、2要素のログインは当たり前とおもったほうがいいんだろうな。