続きです。毎度のごとく間違っていたら指摘お願いします。
追記: タイトルが釣り気味だったので直しました
この記事は真似て失敗するとログイン全体がお亡くなりになることがあります。ごちゅーいください。
# なお、今回は Debian 7.2 です。わぁ
- http://qiita.com/amedama/items/c0ae17a5bc33657e492d
- http://spod.cx/blog/two-factor-ssh-auth-with-pam_oath-google-authenticator.shtml
前回と途中まで同じです。 /etc/users.oath を用意してパーミッションを正しく設定し、Google AuthenticatorもしくはOATHのトークン発行するものに登録します。なんならもういっかい ssh で有効にしてみてもいいと思います。
で、前回は /etc/pam.d/sshd に編集を加えましたが、今回は /usr/share/pam-configs/oath-test を追加します。
/usr/share/pam-configs/ 配下にファイルを追加しておくと、pam-auth-update コマンドが /usr/share/pam-configs/ 配下の設定を一つのモジュールのように認識してくれます。
つまり上記の画像に一つ自分のモジュールが追加されます。一つ一つのモジュールをオンオフを指定して、PAMを使う全てのプロセスに影響を及ぼすようです。こわい
有効になっているモジュールは /etc/pam.d/common-(pam設定の4種類のどれか) の一部として、「コンパイル」されます。単なる平文のpam.conf/pam.dの設定ファイルになるだけです。 (man pam.conf, man pam.d は優秀です)
今回、迂回策としてrootについてはOTPは許します。/etc/security/access-oath.conf を作って以下を記述しました
+ : root : LOCAL
- : ALL : ALL
「本当に安全か」を考える場合にはこの辺りは色々考える余地はあります (一応 ssh で root login は出来ないようにしてあります)。
/usr/share/pam-configs/oath-test を作成して以下のように記述しました
Name: OATH authentication
Default: yes
Priority: 16
Auth-Type: Additional
Auth:
[success=end default=ignore] pam_access.so accessfile=/etc/security/access-oath.conf
[success=end default=ignore] pam_oath.so usersfile=/etc/users.oath
で、上の設定を使うようにお願いするために pam-auth-update を root 権限で実行
# pam-auth-update
有効になっているかを確認するため、/etc/pam.d/common-auth を見て、pam.d が正しく動作するかは目視しときます。下記のにゃーんの部分はもちろん手で直してます。
auth [success=(にゃーん) default=ignore] pam_unix.so nullok_secure
..
auth requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth required pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth [success=2 default=ignore] pam_access.so accessfile=/etc/security/access-oath.conf
auth [success=1 default=ignore] pam_oath.so usersfile=/etc/users.oath
auth optional pam_cap.so
大丈夫くさいね。
手でテスト
これでもう有効になっているはず。というわけで手動でログイン実験してみます。
- 外部から秘密鍵持ってるホストはOTP聞かれない (パスワードも聞かれない)
- 外部から秘密鍵持ってないホストはパスワードとOTP聞かれる
- su (自分のユーザ名) でパスワードとOTP聞かれる
- ローカルで sudo login して自分のユーザ名でログインしたらパスワードとOTP聞かれる
- root ログインでは聞かれない
さいごに
- リブートしてGNOMEのログインからOTPを要求されることを試す