今回は2段階認証をSSHで利用してみましょう。
・そもそも2段階認証とは
今までの認証方法ですと、パスワードの認証というのが一般的でした。
しかし、昨今のパスワード流出事件によって、流出したパスワードを使い、アカウント乗っ取りなどが多くなっています。
根本的なところでは、パスワードを1つ1つ使うサービスごとに分けるのが理想的ですが、1つ1つ覚えるのは大変ですし、パスワード管理ソフトを使うにしても、出先で手軽に使えるかという点では難しいかと思います。
そこで、通常のパスワードのほかにワンタイムパスワードを使った認証を行うのが2段階認証という考え方です。
2段階認証のワンタイムパスワードについては、携帯電話を使ってSMSで通知する方法や、ハードウェアトークンを使う方法、ワンタイムパスワード発行用アプリを使う方法があります。
今回は、TOTP対応のワンタイムパスワード発行アプリであるGoogle Authenticatorを使ってSSHの2段階認証を導入します。
・Google Authenticatorを使う訳
Google AuthenticatorはGoogleが提供している2段階認証機能です。既にGoogleのサービスではTOTPを使った2段階認証に対応しており、その為に作られました。
また、この2段階認証技術はオープンソース化されており、PAMモジュールとして、手軽にSSHサーバーへ導入する事ができます。
さらには、Androidはもちろん、iPhone向けのアプリケーションが用意されているため、ほとんどのスマートフォン環境で利用が出来ます。
・実際に導入してみる
今回はUbuntu12.04LTS環境で利用していますが、Ubuntu 10.04LTS以降の環境であれば、パッケージが用意されているため、簡単に利用できます。
まずは Google Authenticator のPAMモジュールパッケージを導入します
sudo apt-get install libpam-google-authenticator
そうすると、依存関係のlibqrencodeまで入りますが、これは2段階認証コード生成時にQRコードを読み取る事で設定できるようにする為です。
つぎに、2段階認証を設定する為のシークレットキー(QRコード)を生成します。
2段階認証を利用したいユーザーで
google-authenticator
を実行します。
そうすると、画面上に大きくQRコードが発行されるので、スマホにインストールしたGoogle Authenticatorを起動し、QRコードを読み込んで設定します。
さらに、SSHで2段階認証を利用できるよう設定変更をします。
sudo vi /etc/pam.d/sshd
SSHデーモンで利用する為のモジュールを組み込みます。
@include common-authとなっている下の行辺りに以下を追記
auth required pam_google_authenticator.so
もう一つ、設定ファイルを書き換えます。
sudo vi /etc/ssh/sshd_config
PasswordAuthentication no
↑コメントアウトし。yesをnoへ
ChallengeResponseAuthentication yes
↑デフォルトのnoからyesへ
これで準備はできました。後はsshdを再起動すると下記のように利用できるようになります。
ちなみに、すでに公開鍵認証を利用してる場合、公開鍵認証が優先されます。なので、自宅では公開鍵認証を利用し、出先では2段階認証という使い分けができます。
enjoy!
0件のコメント