2020-08-04
もっとキーキャップを印刷した。
ミッチリつめて、レップリ片手分を一気にいってみた。 6時間ぐらいかかって、31g分の印刷。
sshfsとautofsをセットアップした。
デスクトップと印刷用マシンを分けたので、 その間で印刷するファイルを共有する必要がある。
FreeBSDのNASに、Debianのマシンを接続してファイルをやりとりしてる。
手作業でsshfsを使っていたんだけど、 一旦サスペンドするとコネクションが切れるので、 gnukを入れてアンロックしてという手順が必要になるので、 めんどうになった。 そこで、ちょっと自動化したい。
鍵認証
gnukの代わりに、鍵ファイルをパスワードなしにしたものを使いたい。 一方それだと危険なので、アクセスできるディレクトリを制限したい。
まず、そもそも、sshfsはどうやってファイルにアクセスしてるのかわからんので、 調べたら、sftpを使っているみたい。
authorized_keysに何かうまく書いたら、ディレクトリを制限できるかなと思ったが、 sftp-serverにはそういうオプションはないようだ。 (読み込みオンリーオプションや、初期値ディレクトリだけ)
chrootしてsftp-serverを起動するプログラムを書けばいいんだと思うけど、 そのプログラムにはroot権限がいるので、あんまりやりたくない。
しかたないので、新しいユーザーを作り、 /etc/ssh/sshd_configに、次のように書いて作った。
Match User sftp-user
ChrootDirectory /tank/insecure-data
X11Forwarding no
AllowTcpForwarding no
PermitTTY no
ForceCommand internal-sftp
/tank以下には実行権限があるファイルは置けないようにしていて、 sftp-serverをここに配置する事はできない。 どうしようかと思ったら、internal-sftpを設定すると、 sshd内蔵のsftpサーバーが使えるらしい。
この時に、chrootするディレクトリは、rootが所有して、 他のユーザーが書き換えできないようにしないと駄目みたい。 次のエラーがでる。
fatal: bad ownership or modes for chroot directory "/tank/insecure-data"
そもそも、何で一般ユーザーでchrootできないんだろう、 plan9とかならできるよなぁ、と思って、 調べた感じだと、rootにsetuidしたプログラムに偽のファイルを見せる攻撃ができるから、が原因みたい。 chrootで偽の/etc/sudorsを用意してsudoに読ませるとかね。 setuidがないplan9ならこの問題はない。 書き込み権限があるディレクトリにchrootするのが危険なのも同じかな。
autofs
パスフレーズの入力なしにsshfsできるようにしたので、 sshfsコマンドの実行を自動化したい。
今迄使った事なかったのだけど、 こういうのはautofsでできるはずだ。
調べたところ、autofsは設定ファイルが2つあるみたい。 まず、/etc/auto.masterにautofsを使う親ディレクトリと 子の設定ファイルを設定して、 子の設定ファイルで、親ディレクトリ内のどこに何をマウントするかを設定するみたい。
今回は次のようにした。
/etc/auto.master
/auto /etc/auto.ssh --timeout=60,--ghost
/etc/auto.ssh
insecure -fstype=fuse,rw,allow_other,IdentifyFile=/path/to/key,port=1234 :sshfs\#user@host\:
親と子に分かれてるのは、親のマウントポインを使って、アクセスを検知してるのかな?
–ghostはマウントしてないディレクトリが見えるようにするオプション、 allow_otherはroot以外のユーザーもマウントしたファイルシステムにアクセスできるように必要
まとめ
これでサスペンドから戻っても、共有ディレクトリにアクセスしたら、 sshfsが復活してシームレスに見れて便利。
他の方法として、unisonで自動syncしようかと思ったけど、 衝突した時に自動で解決できなさそうで、パス。 結局chrootも解決できないし。 家の中だし重複してファイルを持たなくてもいいだろうし。 全部ユーザー権限で済むのは魅力的なんだけど。