Google Authenticatorで2段階認証を行う [Debian]

Pocket

Google AuthenticatorとはよくVPNつなぐときとかに使うRSAトークンをiPhoneやAndroid, BlackBerryで実装してしまおうというプロジェクト。


[Untitled by UUMickey, on Flickr under licensed Creative Commons Attribution, Noncommercial, Share Alike]
↑こんなやつ。

もともとは、Googleの2段階認証の為に実装されたものなのだけど、Unixでユーザ認証に使うPamモジュールも公開されているのでコンパイルすれば使える。そこで、Debian Squeezeにインストールしました。

ちなみに元々のGoogleで2段階認証を使ってみたのですが、2段階認証に対応しているサービス・クライアントが少なくApplication Passwordを乱発することになり結果的に非常に使い勝手が悪くなってしまったので、結局パスワード認証に戻しました。

だいたいの手順は、

PamModuleInstructions – google-authenticator
http://code.google.com/p/google-authenticator/wiki/PamModuleInstructions

こちらに書いてありますが、自分でもセットアップした方法忘れそうなのでメモ。

Google Authenticatorを取得する

ソースから取得するしかないみたいなので、
http://code.google.com/p/google-authenticator/source/checkout
ここからソースを取得します。

$ hg clone https://google-authenticator.googlecode.com/hg/ google-authenticator

ソースを取得したら、makeします。libpamなどのパッケージが必要な場合があるのでそうしたらaptでインストールします。

$ cd google-authenticator/libpam/
~/src/google-authenticator/libpam$ make

正しく make されていたら make install します。

PAMの設定をする

Debian SqueezeはPAMは pam-auth-update というコマンドを使ってPAMをアップデートするので、pam-configs 用のファイルを準備します。

“O Nuno”: Use Google Authenticator to login to a Linux PC
http://nunoassimassim.blogspot.com/2011/01/use-google-authenticator-to-login-to.html

ここから、google-enough と google-all を取得して /usr/share/pam-configs/ に置きます。

おいたら pam-auth-update を実行して google-all か google-enough にチェックを入れます。(enoughはpam的にはsufficientなので、あんまり意味ないので個人的にはallにしています。)

注意: google-all を選択して、ここでログアウトするとログインできなくなります。(SSHでPubkey認証とかなら平気ですがパスワード認証とかだと死にます)

SSHのチャレンジレスポンス認証をオンにする

これをオンにしないとSSHでは使えません。 /etc/ssh/sshd_config に

ChallengeResponseAuthentication yes

を記述します

Google Authenticatorをセットアップする

ドングルとなるデバイスにGoogle Authenticatorをインストールします。

ここまで終えたら、Google Authenticatorを使用したいアカウントで

$ google-authenticator

と実行します。実行すると、

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/administrator@aquila%3Fsecret%3DKHTY47WLAJDGMUXT
Your new secret key is: KHTY47WLAJDGMUXT
Your verification code is 472653
Your emergency scratch codes are:
18356824
29003846
55379944
61293021
32637075
Do you want me to update your "~/.google_authenticator" file (y/n)

こんな感じで出てきますので、URLをブラウザに貼り付けるなりsecret keyを端末に入れるなりします。

入力が完了したら、こんな画面になります。

ログインを試してみる

鍵なしのクライアントからログインを試みる(もしくはsudoとかでもいいです)と、

hiro@aquila:~$ sudo su -l root
Verification code:
[sudo] password for hiro: 

こんな感じで2段階認証を求められます。

ちゃんちゃん。NFSでホームディレクトリを共有してたりすると1回設定すれば他のマシンでも同じトークンを使用できるので便利です。 

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Leave a Reply