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
これでシステムのソースコードを目的のソースコードにアップデートするのが完了。いよいよシステムのビルドアップを行います。手順はこんな感じかな。
- /usr/src/UPDATING をよく読む
- ソースをコンパイル
- カーネルをコンパイル
- カーネルをインストール
- 設定ファイルを新しいもの or 古いもののどれを使うか選択
- ソースをインストール
- 確認
# 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」か
- FreeBSD Update
【長所】
簡単、便利、手軽。
セキュリティアップデートは時間がかかるので、その時間が取れないとき Good
管理するサーバ数が多いとき
【短所】
すべて更新されるわけではないので、Ports/Packages からインストールしたものは相変わらず別途インストールしなおさないといけない。
なんとなくどこが更新されたのかわかりにくい
カスタマイズされたシステムには使いにくい
- セキュリティアップデート
【長所】
一度の作業ですべてのファイルが更新できる
今どのブランチなのかで、どのソースコードかがわかる
【短所】
時間と手間ががかかる
...ということで時間に余裕がありカスタマイズされたソースを使っていればセキュリティアップデート、時間がなければFreeBSD Updateといったところでしょうか。FreeBSD Update は今後も進化していくと思うので期待しましょ。