SA(Security Advisory) が出たときの対処方法

よくわからないまま FreeBSD を使っているので、本やハンドブックを見ながらアップデートに関することをまとめてみた。

メールで送られてくる SA のレポートはとりあえず全部読まないといけないんだけど、Affects, Corrected, V. Solution の3つをよく読む。
SAが出たときの対処方法は「システムのソースコードを最新のブランチに更新してシステムをインストールし直す(セキュリティアップデート)」「個別にパッチをあてる」の2つ。

システムのソースコードを最新のブランチに更新する

要するに cvsup をすればいい。

〜supfile
*1167428315*default host=cvsup.jp.FreeBSD.org ←ここはいつも使ってる近いホスト
*1167428316*default base=/var/db
*1167428317*default prefix=/usr
*1167428318*default release=cvs tag=RELENG_6_1
*1167428319*default delete use-rel-suffix
*1167428320*[FreeBSD][FreeBSD]default compress
src-all

supfile の内容を確認したら、

# cvsup <supfile の名前>
Connected to ....
Updating collection src-all/cvs
 Edit src/UPDATING ←このファイル名が SA の報告を受けて更新されたもの
 ...
Finished successfully

これでシステムのソースコードを目的のソースコードにアップデートするのが完了。いよいよシステムのビルドアップを行います。手順はこんな感じかな。

  1. /usr/src/UPDATING をよく読む
  2. ソースをコンパイル
  3. カーネルコンパイル
  4. カーネルをインストール
  5. 設定ファイルを新しいもの or 古いもののどれを使うか選択
  6. ソースをインストール
  7. 確認
# cd /usr/src
# lv UPDATING
# make buildworld
# make buildkernel
# make installkernel
# shutdown -r now
(ここでシングルユーザモードで立ち上げる)
# mount -a
# mergemaster -p
# cd /usr/src
# make installworld
# mergemaster
# reboot
# uname -a 

FreeBSD Update する

「システムのソースコードを最新のブランチに更新する」ではソースを入手しコンパイルしたが、FreeBSD Update は Windows Update のようにバイナリファイルを直接更新する方法。ソースをコンパイルするより早い。
これを実現するために、bsdiff(1), bspatch(1)が使われている。
FreeBSD Update の適用範囲はシステムだけなので、Ports/Packages からインストールしたものは含まないみたい(そーなんだ)。とりあえず使ってみる。
まずはインストール。

# cd /usr/ports/security/freebsd-update/
# make install clean

設定ファイルの準備

# cp /usr/local/etc/freebsd-update.conf.sample /usr/local/etc/frebsd-update.conf

実行してみよう

# freebsd-update fetch
Fetching public key...
Fetching updates signature...
Fetching updates...
...
/boot/kernel/kernel...
...
Updates fetchd
To install these updates, run: '/usr/local/sbin/freebsd-update install'
Don't forget to rebuild any statically linked ports
to use the updated libraries after you instlal them.
#

もしカーネルを再構築している場合は frebsd-update を実行しても「パッチは取得しない」というメッセージが表示される。上書きしてもよければ

# freesd-update --branch crypto fetch

とする。
パッチを入手したので実際にあててみる

# freebsd-update install
Backing up /boot/kernel/kernel...
Installing new /boot/kernel/kernel...
Backing up /boot/loader...
Installing new /boot/loader...
...
#

ここまでできたらシステムを再起動する。uname -a して確認する。
ありがたいのが、1つ前までのアップデートなら、ロールバックする機能があること。

# freebsd-update rollback
Restoring old /boot/kernel/kernel...
Restoring old /boot/loader...
...
done
#

カスタマイズしていないのなら FreeBSD Update をフル活用して cron や periodic に仕込んで自動的にアップデートしてもいいかも(ちょっと怖い?)

# freebsd-update fetch
# freebsd-update install
# shutdown -r now

「セキュリティアップデート」か「FreeBSD Update」か

  1. FreeBSD Update

【長所】
簡単、便利、手軽。
セキュリティアップデートは時間がかかるので、その時間が取れないとき Good
管理するサーバ数が多いとき
【短所】
すべて更新されるわけではないので、Ports/Packages からインストールしたものは相変わらず別途インストールしなおさないといけない。
なんとなくどこが更新されたのかわかりにくい
カスタマイズされたシステムには使いにくい

  1. セキュリティアップデート

【長所】
一度の作業ですべてのファイルが更新できる
今どのブランチなのかで、どのソースコードかがわかる
【短所】
時間と手間ががかかる

...ということで時間に余裕がありカスタマイズされたソースを使っていればセキュリティアップデート、時間がなければFreeBSD Updateといったところでしょうか。FreeBSD Update は今後も進化していくと思うので期待しましょ。