Google Authenticatorを使ってLinuxのログイン(PAM)で二段階認証を試す
先月リリースされたGoogleの新しい認証機構をご存知だろうか。
- より高いセキュリティを: 二段階認証システムの提供開始 - Google Apps チームからの公式アップデート情報
- Google、Google Appsの二段階認証システムを発表 - ITmedia エンタープライズ
- Google、スマートフォン利用の2段階認証システムを公開―セキュリティーが飛躍的に強化 - TechCrunch JAPAN
これを使うとGoogle Appsのログイン時、パスワードの後でGoogle Authenticatorで生成されたワンタイムパスワードの入力を求められ、両方が正しい場合のみログインできる、いわゆる二段階認証を実現するためのもの。
で、実はこれ、Google Codeで実装が公開されていて、PAM認証も用意されているので、Linuxのログイン認証などにも応用可能。
これは試してみるしかないでしょう。ということで試してみた。
pam_google_authenticatorのインストールと設定
ログイン対象となるLinuxにpam_google_authenticatorをインストールする。
tarballは用意されていないのでMercurialリポジトリから取得する必要がある。make && make installでok。
libqrencodeがある場合はQRコードを表示できるのでインストールしておくべし。
hg clone https://google-authenticator.googlecode.com/hg/ google-authenticator
cd google-authenticator/libpam
make && make install
Gentoo用のebuildはこちらに用意した。emerge pam_google_authenticatorでインストールできる。
次にPAMを設定する。Linuxディストリビューションによって構成は異なるが、例えばGentooであれば全ての認証に対して適用するなら/etc/pam.d/system-auth、GDMのログインでのみ適用するのであれば/etc/pam.d/gdmに記載すればいい。
--- system-auth.orig 2010-11-01 12:00:30.000000000 +0900 +++ system-auth 2010-11-24 13:25:56.000000000 +0900 @@ -1,6 +1,7 @@ auth required pam_env.so auth [success=1 default=ignore] pam_krb5.so ignore_root try_first_pass auth required pam_unix.so try_first_pass likeauth nullok +auth required pam_google_authenticator.so auth optional pam_permit.so
クライアントの準備
のクライアントが用意されているので各自用意。
- Android
- QRコードを利用する場合はQRコードスキャナーもインストール
- iPhone
- BlackBerry
WindowsMobile用は残念ながら無い。
アカウントの設定
LinuxにGoogle Authenticatorを使いたいアカウントでログインし、google-authenticatorを実行。実行時にlibqrencodeがある場合は次のようにQRコードが表示される。
ここでyを押せば~/.google-authenticatorにsecretキーが保存されてアカウントの準備は完了。
iPhoneとAndroidはこのQRコードをGoogle Authenticatorで読み取れば、下に記載されているsecret keyが取り込まれる。
BlackBerryもしくはカメラが使えない端末の場合は、secret keyを手入力することで対応可能。
emergency scratch codesは端末をなくした場合など、いざというときに使える緊急用スクラッチコード。5つ表示されているが、それぞれ最大1回までしか使えない。別途紙などに記録して大切に保管しておけば万が一の時に役に立つかも*1。
リセットしたい場合はgoogle-authenticatorを再度実行することで上書きが可能。
ログインしてみる
lets login: hoge Password: ******** Verification code:
Verification code:と表示されたらGoogle Authenticator上に表示されている6桁の数字を入力。パスワードとVerification codeが正しい場合のみログインできる。
注意点
前回のMobile-OTPはパスワードの代替だったが、このGoogle Authenticatorはパスワードの代替にはならないので注意。パスワード等と一緒に使って認証強化を図るためにある。
Google Authenticatorで表示されるワンタイムパスワードだけでサーバにログイン出来るわけではないため、覗き見られたりスマートフォンが盗まれてもすぐに被害を受けるわけではない。
スマートフォンを盗まれた/紛失した場合はgoogle-authenticatorコマンドで~/.google_authenticatorを更新すれば、そのスマートフォンに記録されているワンタイムパスワードは使えなくなるので安心。スマートフォンが出てきたら新しいgoogle-authenticatorの結果にクライアント側も更新すればok。あーいいですね。
今後の展開とか
おそらくGoogleの通常アカウントでも使用できるようになるだろう。またGoogle以外の様々なサービスに展開される可能性も大いにある。
とても簡単な実装なので日本のガラケーでも動作するようになればシアワセになれるかも。どなたか移植しませんか?
*1:紙の保管にはくれぐれもご注意を