|
~ To be, or not to be, or to run away far away! ~ null-i.net |
| Linux/tripwireのインストール | |
|
Tripwireのインストール(2016-11-27) tripwire はファイルの整合性チェックツールです。 tripwire でググるとtripwire.co.jp や tripwire.com がヒットするはずです。 参考:tripwireするほどでもない人は†なお、簡易的な整合性チェックなら、他の手段でやることもできると思います。 # find /etc -type f -exec md5sum {} \; | tee md5-`date +%Y%m%d`.txt
# md5sum `which md5sum` | tee -a md5-`date +%Y%m%d`.txt
# md5sum `which find` | tee -a md5-`date +%Y%m%d`.txt
# md5sum `which tee` | tee -a md5-`date +%Y%m%d`.txt
(etc配下のファイル、使ったコマンド自身のハッシュ値をとっておきます。 初期設定†私の環境だと CentOS 7なのですが、 # yum install tripwire # cd /etc/tripwire/ # ls twcfg.txt twpol.txt # chmod 600 twcfg.txt twpol.txt 既に設定内容の目途がついている場合は、この2ファイル(.txt)を更新してしまいましょう。 2つのファイルは中身を見てもらえば何となく分かると思いますが。
になります。 鍵の作成†まず鍵を2つ作ります。パスワードを決めるように言われるので、忘れないように。 # twadmin --generate-keys --site-keyfile site.key # twadmin --generate-keys --local-keyfile local.key # chmod 600 site.key local.key # vi twcfg.txt (LOCALKEYFILE を前述の local.key に合わせる) この鍵が、tripwire 自体の設定を改竄されないための、鍵になります。 署名済みファイル作成と、設定の初期化†次に設定、ポリシーの .txt に署名をしたファイルを作ります。 twadmin のパスワードは site.key のパスワードを入力。 # twadmin --create-cfgfile --cfgfile tw.cfg --site-keyfile site.key twcfg.txt # twadmin --create-polfile --polfile tw.pol --site-keyfile site.key twpol.txt # chmod 600 tw.pol tw.cfg # tripwire --init # rm twcfg.txt twpol.txt 設定の更新†初回時は「### No such file or directory」が大量発生したと思います。 # twadmin --print-polfile > twpol.txt # twadmin --print-cfgfile > twcfg.txt # vi twpol.txt twcfg.txt (それっぽい内容に更新する) 更新後は、前述の「署名済みファイル作成と、設定の初期化」へ戻ります。 チェックする†これでファイルが改竄されていないか、チェックできるようになりました。 # tripwire --check オプションは色々ありますので、お好みで。以下のように絞り込めます。 # tripwire --check --severity 50 /etc ( /etc 配下の重要度 50 以上のファイルだけをチェックする) 参考†自前のサーバでtripwire を運用するなら、必要なデータをCD-ROM等の外部記録媒体に入れて運用する方法があります。
この3つを外部媒体で運用すれば、設定周りを改竄されるとキーの署名でわかる仕組みです。 さぁ、No such file を削るぞ!†「tripwire --check」 コマンドを使ったすぐ後に出る ### Warning: File system error. ### Filename: /usr/sbin/xxxxx ### No such file or directory の3行をキーにして、いらないファイルをコメントアウト(先頭に # を追加)します。 以下、triptrim.sh(仮) の内容 #! /bin/sh
export LANG=C
# temporary files
CHECK_RESULT=./check_result_`date +%m%d%H%M%S`.txt
NOT_FOUND_LIST=./not_found_`date +%m%d%H%M%S`.txt
# you need "twpol.txt"
POL_FILE=$1
if [ ! -r "$POL_FILE" ]; then
echo "usage: $0 twpol.txt"
exit 0
fi
# check "No such file" message. get from STDERR.
tripwire --check 2> $CHECK_RESULT > /dev/null
# if it's all right, exit.
grep -q '### No such file or directory' $CHECK_RESULT
if [ $? -eq 1 ]; then
echo "nothing to do. exit"
\rm $CHECK_RESULT
exit 0
fi
# make NOT_FOUND_LIST
awk '{
if (/^### Warning: File system error./){
flag=1
}
else if (flag == 1 && match($0, /^### Filename: /)){
filepath = substr($0, RLENGTH + 1)
flag=2
}
else if (flag == 2 && match($0, /^### No such file or directory/)){
print filepath
flag=0
}
else {
flag=0
}
}' $CHECK_RESULT | tee $NOT_FOUND_LIST
# replace by NOT_FOUND_LIST
NEW_POL_FILE="${POL_FILE}.`date +%m%d%H%M%S`"
cp $POL_FILE $NEW_POL_FILE
for ff in `cat $NOT_FOUND_LIST`; do
exp=`printf 's|\\(^\\s\\+%s\\)|#%s|' $ff '\1'`
sed $exp ${NEW_POL_FILE} > ${NEW_POL_FILE}.tmp
\mv -f ${NEW_POL_FILE}.tmp ${NEW_POL_FILE}
done
# I use "\rm", if you aliase "rm=rm -i", bother.
\rm $NOT_FOUND_LIST
\rm $CHECK_RESULT
使い方 # sh triptrim.sh twpol.txt とすると、twpol.txt.1122123456 のような数字ファイルができるので、 ・・・結果、わりと何もチェックしなくなったりする場合があるので、必ずポリシー(twpol.txt)は更新していきましょう。 最後に†導入して暫くの間は毎日チェックして、ポリシー(twpol.txt)をチューニングすることをお勧めします。 セキュリティ、とは別の観点ですが、 |
|