FreeBSDには標準でワンタイムパスワード機構(OPIE)があり、ワンタイムパスワードでのsshログインが可能です。実際に試してみました。
前提
- 現在は公開鍵認証だけ有効になっている(普通そうしますよね)
- UNIXアカウント/パスワード認証は引き続き使用しない
まずこれを実現するために、PAMのsshdの設定を変更します。/etc/pam.d/sshdです。デフォルトでは
auth sufficient pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local #auth sufficient pam_krb5.so no_warn try_first_pass #auth sufficient pam_ssh.so no_warn try_first_pass auth required pam_unix.so no_warn try_first_pass
こうなってるところを
auth requisite pam_opie.so no_warn no_fake_prompts
これだけに変更します。この変更は十分注意してください。油断するとパスワード無しでログイン出来る状態になったりします。ここにたどり着くまでにえらい苦労したんですがそれは別記。
もしportsからsudoをインストールして使用している場合、こっちでもワンタイムパスワードが有効になってしまいます。それが鬱陶しい場合はsudoについてはワンタイムパスワード認証を無効にします。/usr/local/etc/pam.d/sudoの
# auth auth include system
こうなっているところを
auth required pam_unix.so no_warn try_first_pass
こう変更します。いっそのこと/etc/pam.d/systemの
auth sufficient pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local
この行をコメントアウトしてしまってもいいかもしれません。
sshdの設定を変更します。/etc/ssh/sshd_configです。
#ChallengeResponseAuthentication yes : #UsePAM yes
デフォルトではこうですが、どっちかをnoにしていると思いますので元に戻します。変更したらsshdを再起動します。
公開鍵認証を使わずにログインを試して、リモートログイン出来ないことを確認します。繰り返しますが、設定ミスするとパスワード無しでログイン出来る状態になることがあります。
最後に、利用したいユーザーでワンタイムパスワードを有効にします。ローカルまたは安全な接続のコンソール上でopiepasswdを実行します
% opiepasswd -c foo Adding foo: Only use this method from the console; NEVER from remote. If you are using telnet, xterm, or a dial-in, type ^C now or exit with no password. Then run opiepasswd without the -c parameter. Using MD5 to compute responses. Enter new secret pass phrase: (パスフレーズ入力) Again new secret pass phrase: (繰り返し) ID foo OTP key is 499 ho1234 FOO BAR HOGE FUGA PIYO
これでユーザーfooのワンタイムパスワードが有効になりました。
最後から2行目にある499というのがシーケンスナンバーです。ワンタイムパスワードを1回使うと、この数字が1個減ります。その後のho1234はパスワードを生成するためのseed(種)です。ワンタイムパスワードを生成するにはシーケンスナンバーとseedとパスフレーズが必要です。
次に要求されるシーケンスナンバーは498になるので、作ってみます。
% opiekey 498 ho1234 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: NESS REND NICE WHEN EVER MANA
sshで実際に接続してみると、このようなプロンプトが出ますので
% ssh remotehost otp-md5 498 ho1234 ext Password:
さっき生成された"NESS REND NICE WHEN EVER MANA"を入力するとログインできるはずです。
ワンタイムパスワードはログイン先のホストで生成する必要はありません。シーケンス番号とseedとパスフレーズで一意なものが生成されるので、手元のホストでopiekeyコマンドを使って生成されたパスワードでもログインできます。他のOS用のパスワード生成機もあるらしいのですが実物は見つけられていません。
手元でパスワードが生成できない場合、opiekeyに-nオプションを付けると複数のパスワードを生成できます
% opiekey -n 5 999 ho1234 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: 995: RACY FAT YAP TIE FORT NAP 996: GIN AWAY DIN HUGE FORT PAP 997: SKIM PAW BONE FALL DUMB BOCK 998: MITE CODY DUSK REEL GLUM ARK 999: HALE PET GEE WYNN DANK AWN
ので、これを控えておけばいいでしょう。未使用の物を間違っても落とさないように。
この記事へのトラックバック