~ To be, or not to be, or to let it be. ~ 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)をチューニングすることをお勧めします。 セキュリティ、とは別の観点ですが、 |
|