このブログはURLが変更になりました

新しいブログはこちら→ https://matsuu.hatenablog.com/

Google Authenticatorを使ってLinuxのログイン(PAM)で二段階認証を試す

先月リリースされたGoogleの新しい認証機構をご存知だろうか。

これを使うと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

クライアントの準備

のクライアントが用意されているので各自用意。

WindowsMobile用は残念ながら無い。

アカウントの設定

LinuxGoogle Authenticatorを使いたいアカウントでログインし、google-authenticatorを実行。実行時にlibqrencodeがある場合は次のようにQRコードが表示される。

ここでyを押せば~/.google-authenticatorにsecretキーが保存されてアカウントの準備は完了。

iPhoneAndroidはこの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:紙の保管にはくれぐれもご注意を