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として見せることができるから、充分役目は果たせる。また、常に持ち歩いていてキーとしてはうってつけだと思う。ただ、キーとしてはちょっとでかいけどね。ちょうど充電と兼用のケーブルをいつも持ち歩いてるのでそれもちょうどいい。
興味を持って読ませてもらいました。
細かい設定などお教えいただけないでしょうか?
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—–