fuseを全ユーザで使えるようにする on Debian Wheezy
デフォルトでは/dev/fuseのパーミッションが660になっていてfuseグループに入っていないユーザはfuseを使用できない。全ユーザをfuseグループに加えるのは面倒なのでパーミッションを変えてしまいたい。 ところが/etc/udev/rules.d/99-fuse.rulesあたりに追加設定を書いてMODE="1666"にしようと思ったがうまく変わらない。
udev - ArchWikiによれば
- Udev rules written by the administrator go in /etc/udev/rules.d/, their file name has to end with .rules. The udev rules shipped with various packages are found in /usr/lib/udev/rules.d/. If there are two files by the same name under /usr/lib and /etc, the ones in /etc take precedence.
とのことで同じ名前をつけてやると/etcが優先されるらしいので、 /etc/udev/rules.d/60-fuse.rulesに次のファイルをおいて/lib/udev/rules.d/60-fuse.rulesの効果を上書きした。
KERNEL=="fuse", MODE="1666", GROUP="fuse", OPTIONS+="static_node=fuse" ACTION=="add", SUBSYSTEM=="module", KERNEL=="fuse", RUN+="/bin/mount -t fusectl fusectl /sys/fs/fuse/connections"
設定を全部写してこなくとももっと簡潔に行う方法があるはずなのだが……
pf.confのデバッグ
やらかしてしまった。keep stateのpass outを忘れて帰りのパケットが迷子になっていた。
部内向けにpf.confのデバッグ方法を書いておくことにする。 pfはin/outの後にlogをつけるとpflogというネットワークインターフェイスにパケットが転送される。 pflogを使用するためにはまずカーネルにpflog.koモジュールをロードする必要がある。
$ sudo kldload pflog
続いてpflog0をupする。
$ sudo ifconfig pflog0 up
そしてtcpdumpでpflog0からパケットを取り出す。snaplenを長くしておいたほうが良い。
$ sudo tcpdump -i pflog0 -s 4096
最初のルールにlogをつけておけばルールに引っかからなかったパケットを列挙できる。 なお、ネットワーク越しにtcpdumpを使用する場合はtcpdumpとsshの間でパケットが増幅されないように注意すること。