88171.net

Google Authenticatorで2段階PAM認証

久しぶりに日記かと思えば、ヲタい話題。 Debian (squeeze) で pam_google_authenticator.so を使って2段階認証をやる手順。

インストール

$ sudo apt-get install mercurial libqrencode3 libpam0g-dev
$ hg clone https://google-authenticator.googlecode.com/hg/ google-authenticator
$ cd google-authenticator
$ make && sudo make install

ユーザ個別の認証設定

$ google-authenticator

あとはよしなに。

secret key を端末に入力。emergency scratch codes はメモって安全な場所に保管。ここで出てくる verification code は何だろう‥‥。

#光の速さで端末を設定すれば、一致するか確認できるとか?

PAMの設定

手で /etc/pam.d/* をいじってもいいけど、"O Nuno": Use Google Authenticator to login to a Linux PC を参考に、スマートに。

Name: Google Authenticator (all)
Default: yes
Priority: 900
Auth-Type: Primary
Auth:
required pam_google_authenticator.so
EOF
Name: Google Authenticator (enough)
Default: yes
Priority: 900
Auth-Type: Primary
Auth:
sufficient pam_google_authenticator.so
EOF

#参考のページ、最後の EOF がないね。

PAM設定を更新。パスワードとOTPで2段階認証するなら↓のように選択。

*snip*
      [ ] Google Authenticator (enough)
      [*] Google Authenticator (all)
      [*] Unix authentication

sshd の設定

[2] - This will work fine for Gnome login or sudo authentication, both of them will prompt for both codes. On the other hand it will not work for authentication on sshd or Synaptic Package Manager.

"O Nuno": Use Google Authenticator to login to a Linux PC

とあるけど、少なくとも sshd は設定をゴニョればいける。

*snip*
ChallengeResponseAuthentication yes
:wq

no だと verification code のプロンプトが出ず、勝手に認証失敗になる。 ChallengeResponseAuthentication は公開鍵認証に限定したい場合の有名なハマりポイントだけど、まさかここでもハマるとは‥‥。

で、

SSHでログインしようとすると、こうなる。

login as: ohkawa
Using keyboard-interactive authentication.
Verification code:             ← verification code を入力
Using keyboard-interactive authentication.
Password:                      ← パスワードを入力
$                              ← ログインできた!