職場の環境が変わったのでこれを機に以前から気になっていたことを試してみた。それは
秘密鍵を本体内に残さない
こと。
Zebedeeはそのまま移動するだけでよかった
トンネルを Zebedee で掘ってるんだけど、Zebedee に関しては
- 実行バイナリが本体内
- 設定ファイル、鍵などは USB メモリ
という組み合わせで普通に動いた。起動して detach してしまえば鍵や設定を入れた USB メモリは抜いてしまってもまったく問題ない。
OpenSSHはpermissionがキモ
もともと USB メモリに ssh の秘密鍵は入れてあった。しかしそれは
- FAT でフォーマットしてある
- 基本的に緊急時用のもので iniファイル版の putty と putty 用の鍵を用意
- OpenSSH 用のものも入ってたけど入ってるだけ
という状態だった。今回はここにすでにある OpenSSH の秘密鍵を普段から利用するようにして本体内の秘密鍵は削除してしまおうという作戦。しかし、知ってたけど OpenSSH は鍵の permission をチェックしてくれるので、FAT 上の鍵は使えない。
MSのfilesystemは結局全滅
- NTFS
- exFAT 1
- FAT32
を試したが、どれも OpenSSH の要求する permission を実現することができなかった。まぁ FAT がダメなのは予想通りなんだけど、NTFS もダメなんだね。
どうしたかというと、結局パーティションを分割して
- FAT で Windows 用のツールと鍵のパーティション
- ext で OpenSSH 鍵のパーティション
を用意した。
あ、Linux で使う気がないなら別に ext パーティションじゃなくて HFS+ でも UFS でもいいような気がするけど、たぶんそんな人いないよね?
MacFUSE + fuse-ext2でextパーティションを作る
ホストが Mac なのでそのままでは ext パーティションは作れない。そこで
- macfuse - The Easiest and Fastest Way to Create File Systems for Mac OS X - Google Project Hosting
- fuse-ext2 | Download fuse-ext2 software for free at SourceForge.net
の二つを利用して Mac 上で ext を読み書きできるようにした。
fuse-ext2の注意点
(OS や MacFUSE を含めた)バージョンの問題なのかもしれないけど、MacFUSE + fuse-ext2 の組み合わせでは
ext パーティションを自動で mount すると read only になってしまう
ようだ。今回は目的が OpenSSH の鍵を置くだけなので、普段は read only でまったく問題ない。
手作業でrwでmountする
とは言っても実際に鍵を置く作業をする際には read only では困る。そういうときには fuse-ext2 コマンドを mount コマンドに見立てて
$ fuse-ext2 -o rw+ device mountpoint
で mount してあれげば ok. めっちゃ EXPERIMENTAL って man には書いてあるけど。
MacFUSEの注意点
google code にある official version は 32bit で build されているので 64bit で動かしている場合は使えない。有志による 64bit build があるのでそちらを使う。
残念ながら unofficial version の置き場所は定まってないようなので、あっちこっちの blog などからたどって落として来る形になっているようだ。ちょっと怪しげな感じがするけど仕方ないのかなぁ。
なんでこんなことしたのか
もし秘密鍵を奪われた場合、ローカルでブルートフォースできまくるので、公開鍵暗号方式の接続もまったく安全とは言えなくなってしまう。
ということで銃と弾丸を別管理するように、本体と秘密鍵も別管理にできると良いと思い、やってみた。今のところ職場内のモラルやスキル的にこんな措置は必要ないんだけど、これを応用して、
- 私物ノートの安全性向上
- 共用アカウントの安全な運用
などを計っていきたいと思っている。
[2012-10-07 追記] もしLAN内の複数の端末で相互にログイン、認証したいので鍵をあちこちに置いておく必要がある、ということがあるなら「使い方を考え」た方がよいだろうし、それでもどうしても秘密鍵をどこかの端末に置いておく必要があるなら「エージェント転送(-A)」や「netcat mode」などが利用できる。
期待はしていなかったが、「netcat mode」では本来ログインできないはずの端末からログインできるようになる。エージェント転送はエージェント情報が途中の端末に残るので秘密鍵を残すのとどちらが危険か判断が必要になる。
10.6で対応しててパーティションの作成もできた ↩