ほっしーの技術ネタ備忘録

技術ネタの備忘録です。基本的に私が忘れないためのものです。他の人の役にも立つといいなぁ。

[FreeBSD] pkg インストールファイルの破損チェック

FreeBSD に同梱の freebsd-update IDS で、FreeBSD のシステムファイルが 変更されていないか検査できる。という話はあまりにも有名です。

これは、freebsd-update で導入されたファイルのハッシュ値は、 サーバに存在しているため、それを取り寄せてハッシュ値の一致テストを 行うことができるためです。

似たようなものとして、pkg でインストールしたプログラムその他は、 pkg のデータベースにインストール時のハッシュ値が記録されているため、 破損していないか確認することができます。

そのコマンドがこちら。

$ sudo pkg check -sa
Checking all packages:  16%
ezjail-3.4.2_1: checksum mismatch for /usr/local/bin/ezjail-admin

試しに ezjail-admin を編集してみたときの実行結果です。 ちゃんとファイルの中身が書き換わっていることを検知できています。

ただし、freebsd-update IDS も同じですが、検査プログラムやゴールデンデータが ローカルに存在するため、「悪意を持って改ざんされた可能性」を排除するには能力不足です。

あくまで、ディスクエラーなどでファイルが破損してないか。みたいな検査には有用なので、 使えるときには使うといいかもしれません。一応、periodic で走るようなので、 毎日届くレポートメールを見ていればそれで十分なのかもしれません。

さて、ではどのファイルがチェック対象なのでしょうか。 それは pkg query で見ることができます。

$ pkg query "%Fp" ezjail
/usr/local/bin/ezjail-admin
/usr/local/etc/ezjail.conf.sample
/usr/local/etc/rc.d/ezjail
:

こんな感じ。%Fp がインストールファイルの名前。

ezjail 配下で動いているものを全部リストアップしたければ以下のコマンド。

$ echo mysql vpn mail | xargs -n 1 -I RP sudo pkg -j RP query "/mnt/jails/RP%Fp"

query なので、%Fp の前に jail の root パスをくっつけて表示します。 / から始まるパスなので、RP とくっつけて使います。