Tripwire Security Systems, Inc. より Tripwire ASR 1.3 (tripwire-1.30-1.tar.gz) を入手し orion にインストール。 なお ASR は Academic Source Release の略。
tripwire はシステム中の実行可能ファイル、設定ファイルなど指定したファイルの変更があったかどうかを検証するツール。 システムがクラックされた場合、裏口を開ける機能をつけくわえた実行可能ファイルなどがインストールされたり、すでにあるものを置き換えたりされる可能性がある。 tripwire は事前に作成したファイルの情報のデータベースと、現在のファイルの情報を比較することによってこのような変更を検出することができる。
なおここでは、以下の環境、条件でインストール、設定を行った。
まずはパッケージ展開。適当な作業ディレクトリ上で。
$tar zxvf tripwire-1.30-1.tar.gz $cd tripwire-1.30-1
次に Makefile の編集。 以下の2つの変数を値を書き換える。
DESTDIR = /MO/tripwire/bin DATADIR = /MO/tripwire/var
次に OS 毎の設定ファイル。Ported をみると, conf-linux.h を使うようにかいてあるが、みあたらないので conf-sunos-4.1.h で代用する。
$emacs ./configs/conf-sunos-4.1.h
以下の通り変更する。
#define DIRENT を #undef DIRENT に
最後に include/config.h を編集する。
$emacs include/config.h
ここでは、 OS 別のインクルードファイルを読み込むようにするのと、各種ファイルへのパスを設定。
#include "../configs/conf-svr4.h" を #include "../configs/conf-sunos-4.1.h" に。また以下の変数の値を変更。 #define CONFIG_PATH "/MO/tripwire/etc" #define DATABASE_PATH "/MO/tripwire/var"
そして make。
$make $make test
次に MO を準備する。 マウントする前にシングルユーザモードにし、インストール、ならびにデータベース作業中に他の誰かが悪行をできないようにしておく。
$su #mkesfs /dev/sdb #mkdir /MO #init S #mount -t ext2 /dev/sdb /MO
そしてインストール。
#make install #mkdir /MO/tripwire/etc #cp configs/tw.conf.linux /MO/tripwire/etc/tw.config #emacs /MO/tripwire/etc/tw.config
とりあえず tw.config には自分でコンパイルしたカーネルファイルの指定を追加しておく。
そしてここから実際に使用。 まずは、現在のファイルの情報に関するデータベースを作成する。 終了すると、tripwire を実行したディレクトリに databases/tw.db_orion が作成される(orion の部分はホスト名がはいる)。 これを /MO/tripwire/var に移動しておく。
#cd /MO/tripwire/bin #tripwire -v -initialize #mv databases/tw.db_orion /MO/tripwire/var
以上が終了したら、一旦 MO ディスクを抜き、書き込み禁止にしておく。 そしてマルチユーザーモードに戻す。 リブートしてしまう。
#cd / #umount /MO #sync; sync; shutdown -r now
とりあえず検証してみる。Read-only でマウントし /MO/tripwire/bin/tripwire を実行する。
#mount -t ext2 -r /dev/sdb /MO #/MO/tripwire/bin/tripwire
一応何も変更は検出されないはず。 と思ったら、いくつか追加されたファイルと変更されたファイルが検出。 モジュールの依存関係ファイルやら何やら。 これらのファイルはおいおい設定でチェックしないようにしなければ。
今後は cron 等で定期的にチェックするようにする設定を行う必要がある。 今日はもう遅いのでやめ。
なお本来は、tripwire のインストール場所、ファイルの位置などはできるだけわかりにくいようにする必要がある。 公開などしてはいけない(ここであくまでも例で、具体的な位置は異なっている)。
ThinkPad X31 用に 2.6.15 の Debian kernel パッケージ構築を行う。 インストールしてある Debian 標準の 2.6.15 のパッケージの設定 /boot/config-2.6.15-1-686 をベースに設定を行いビルド。
#apt-get build-dep linux-image-2.6.15-1-686 #exit $mkdir -p /usr/local/src/linux $cd /usr/local/src/linux $tar jxvf /usr/src/linux-source-2.6.15.tar.bz2 $cd linux-source-2.6.15 $cp /boot/config-2.6.15-1-686 .config $make menuconfig $make-kpkg clean $fakeroot make-kpkg --revision=sebastian.1.0 kernel_image $cd .. $su #dpkg -i linux-image-2.6.15_sebastian.1.0_i386.deb
ブート後 Kernel panic。
標準の設定では IDE 関係がモジュールになっているのを見落していた。もう一度設定を修正してビルドしなおして起動。 Linux を使い始めたころ ext2 をモジュールにして失敗したことがあり、ファイルシステム関連は忘れずチェックするようにしているのだが、IDE 関連はノーチェックだった。
module-assistant prepare module-assistant auto-install madwifi
WiKicker では PageName を エンコードした文字列を URI に埋め込んだり、サーバで保存する際のファイル名にしたりしている。 このため、PageName の最長文字数はそれらの最長文字数に依存しているはずである。
今まで確認を後回しにしていたのだが、新しい機能の追加の際に確認しておく必要があるので調査してみた。
WiKicker の実装がらみとして最長を決める要素としては
がある。
上記の中ではファイル名による制約が一番大きい。
WiKicker 内部でファイル名として base64 (の亜種) でエンコードしたものを使っているので、元の文字列はは最長 189バイトまでなければならない。base64 だと3バイトで4文字になるため、189バイトで 252文字となる。
WiKicker ではここでさらにファイル名に ',v'、'-lock' をつける事があるので、実際には元の文字列は最長 186 バイトまでとなる。
PageName が 186 バイトまでだとすると、URL エスケープしたとして558バイト。 WikiEngine のスクリプトの URL や他のパラメータとあわせても、これぐらいなら大丈夫のはずである。
ということで WiKicker では Linux 上だと通常 PageName は 186 バイトが最長と言ってよさそうだ。 日本語の文字はだいたい UTF-8 で3バイトになるので、62 文字までということになる。
そのうち、WiKicker に制約チェックを入れることにしよう。 そのうち。
ここ最近 ThinkPad X31 の Debian GNU/Linux sid が調子が悪い。 いろいろ調査・トライしてみている途中の状態をメモ。
アプリケーションや X の不具合などと重なって unstable 全開だ。
Linux kernel については各種パッケージの更新に追いつけなくなっているようなので、アップデートをかける必要がありそう。
Debian GNU/Linux の標準イメージを使ってみたが、ThinkPad X31 では例によって ACPI では蓋の開閉でサスペンドしない。 APM を使うようにした Debian kernel パッケージ構築が必要。 しかし今年の2月に 2.6.26 をビルドした時(記事)から、いろいろ変更があったようで一筋縄ではいかなかった。 以下は最終的な手順(たぶん)。
#apt-get build-dep linux-image-2.6.30-2-686 #apt-get install linux-source-2.6.30 aufs-source #exit $mkdir -p /usr/local/src/linux $cd /usr/local/src/linux $tar jxvf /usr/src/linux-source-2.6.30.tar.bz2 $tar zxvf /usr/src/aufs.tar.bz $emacs modules modules/aufs/Makefile $cd linux-source-2.6.30 $cp /boot/config-2.6.30-2-686 .config $make menuconfig $make-kpkg clean MODULE_LOC=/usr/local/src/linux/modules fakeroot make-kpkg --initrd --revision=sebastian.1.0 kernel_image modules_image $fakeroot make-kpkg --initrd --revision=sebastian.1.0 kernel_image $cd .. $su #dpkg -i linux-image-2.6.30_sebastian.1.0_i386.deb aufs-modules-2.6.30_0+20090302-3+sebastian.1.0_i386.deb #update-initramfs -c -k 2.6.30 #update-grub
MADWIFI はもはやコンパイルが通らなくなっていた。 試してみたところ ath5k で通信できるようになっているではないか。modprobe ath5k すると wlan0 が使えるようになった(MADWIFI の時は ath0)。
initrd 関係は結構はまった。 最初いつも通りビルドして dpkg した後再起動したのだが、"Unable to mount root fs on unknown-block(0, 0)" が出て先にすすまない。 IDE まわりや ext2、ext3 まわりを M から y にしても駄目。 何度か試しているうちに、 linux-image を dpkg --install した際に実行される update-grub のメッセージで自分で作った Linux kernel だけ initrd 関係の処理がされないことに気が付いた。 自前で update-initramfs したらようやく 2.6.30 が起動するようになった。
2.6.30 にすることで起動時の udev の警告は解消された。 しかしながらサスペンドはまだ駄目。 復帰時にフリーズする。 やはりパワー関係の処理があやしい。今は AC アダプタを外しても KPowersave は気付かない。
もう少しおっかける必要がありそう。
対応できるまではサスペンドできず。毎回起動したりシャットダウンしたりするの面倒くさーい。
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。