USB Key

pam_usb(sig11.org)というのがあった。USBストレージデバイスにpublic/privateキーを置いておき、認証に利用するというもの。DSAを使ってるらしい。認証には3種類設定できて、Unique(パスワードなしでログインでき、デバイスがないとログインできない)、Alternative(デバイスがあればパスワードを聞かない)、Additional(デバイスがあるときのみログインでき、パスワードも聞く)というのがあるらしい。PAMになってるからxscreensaverや/bin/login、gdm、sudo、その他なんでも設定すればOKだ。

Alternativeが楽っぽい。ちょっと使ってみたい。かなり昔に買った16MBのUSBストレージ、どこいったかなぁ。GnuPGとかssh-addのパスフレーズ入力とかはPAMじゃないから、使えないだろうけど。

(追記) 2003-12-19 13:21

遊んでみている。2.6.0で今の環境だとUSBデバイスのprobeがうまくいかないが、デバイス名を固定してprobeしないようにするとうまくいく。調子に乗ってsystem-authのところに設定したら、外からのsshまでパスワードなしになってしまった。

それはさすがにあんまりなので、loginとgdmとxscreensaver、sudo程度にしておこうと思う。あとrootのprivate/public keyも作らない方針にしよう。だから、suはパスワードになる。普段から「sudo bash」とかってやっててrootのパスワードは忘れがちなので、別に困らないと思う。

required pam_stack.so service=system-authの前の行にsufficient pam_usb.soを入れる。キーがないとパスワードが必要、キーがあればユーザ名だけで、パスワードプロンプトは出ない。

ついにパスワードとはオサラバだ。快適な生活が待ってるぜ!

pam_usb.soの仕組みとしてはUSBストレージの「/.auth/ユーザ名.ホスト名」というファイルに秘密鍵がDSA PUBLIC KEY(ASCII形式)で入っていて、「$HOME/.auth/id_pub」に公開鍵が入っていて、これを突っ突き合わせて認証している。

ちなみにpam_usb.soにはシリアル番号というオプションもあって、これを使うと秘密鍵を保管したUSBストレージが盗まれても、マシン側のシリアル番号と合わないので少しはマシになる。これもいずれ設定しようと思う。

(追記) 2003-12-19 15:14

xscreensaverはLinux 2.6.0を入れた時点でなぜかパスワードですら通らなかった状態になってしまっていたのだが、xscreensaverを入れなおしたらパスワードだと通るようになった。早速pam_usb.soにしてみようとしたのだが、どうもxscreensaverはrootではなく一般ユーザで動いているからか、USBストレージのmountがOperation not permittedになってしまう。どうにか回避できないものか。fstabにuserとマウントポイントを書いてpam_usb.soにもそこを強制的に使ってもらうように設定してもダメだった。mountコマンドを呼び出すわけじゃないみたいね。

(追記) 2003-12-19 17:08

Webページにはxscreensaverにも使えるようなことが書いてあるから、何らかの設定が間違っているだけのような気がする。もうちょっと考えてみよう。

(追記) 2003-12-19 21:19

キーにはCLIEを使うことにした。CLIEはメモリースティックの内容をPC側にMass Storageとして見せることができるから、充分役目は果たせる。また、常に持ち歩いていてキーとしてはうってつけだと思う。ただ、キーとしてはちょっとでかいけどね。ちょうど充電と兼用のケーブルをいつも持ち歩いてるのでそれもちょうどいい。

コメントはありません

  1. http://www.pamusb.org/ 壊れてるみたいですね(ディスククラッシュでしょうか?)。ドキュメントもなくなってるし…

    うろ覚えで書きますが、、、

    make; make installでインストールしてUSBストレージをマウントし、/usr/bin/usbadmというコマンドで鍵を作ります。
    usbadm keygen (マウントポイント) (ユーザ名) (鍵のビット長)
    (例)
    # usbadm keygen /mnt/usb watanabe 1024
    これで、/mnt/usb/.auth/watanabe.xxxxxと~watanabe/.autho/id_pubというファイルができ、準備ができます。

    認証の設定は、例えばコンソールのログインプロンプトの認証の場合は/etc/pam.d/loginなどの上のほうに

    auth sufficient /lib/security/pam_usb.so

    などと書き加えるとよいです。sufficientだとそれが満たされた時点で認証が成功し、requiredだと満たされれば次の行に行きます。pam_usb.soは自動的にUSBデバイスを検索し、自動的にマウントして鍵を探し、認証をかけ、アンマウントします。

    私の環境だとUSBメモリのデバイス名の自動認識がうまくいかなかったので、/etc/pam.d/loginは以下のようになってます。USBメモリを差してユーザ名を入力するだけで(パスワードを聞かれずに)ログインすることができるようになってます。ただCLIEをつけるのが面倒なのであまり使っていませんが(笑)

    #%PAM-1.0
    auth required /lib/security/pam_securetty.so
    auth sufficient /lib/security/pam_usb.so debug=-1 fs=vfat force_device=/dev/sda1 check_device=-1 check_if_mounted=-1
    auth required /lib/security/pam_stack.so service=system-auth
    auth required /lib/security/pam_nologin.so
    account required /lib/security/pam_stack.so service=system-auth
    password required /lib/security/pam_stack.so service=system-auth
    session required /lib/security/pam_stack.so service=system-auth
    session optional /lib/security/pam_console.so—–

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です