自動実行設定変更

CentOS6でのcron/anacronが少々変わった。今までは# crontab -e で設定してたが、/etc/cron.dにて時間指定することにした。また、特に時間指定しなくても良さそうなものは/etc/cron.dailyにスクリプトを入れておく。
メインサーバ

[root@server1 ~]# echo "*/1 * * * * root /usr/ddns/ddo.jpIP_upgrade.pl" > /etc/cron.d/ddns
[root@server1 ~]# echo "0 2 * * * root /root/mysqldump.sh" > /etc/cron.d/mysqldump
[root@server1 ~]# echo "30 2 * * * root /root/backup.sh" > /etc/cron.d/backup
[root@server1 ~]# mv chkrootkit /etc/cron.daily/
[root@server1 ~]# mv clamscan /etc/cron.daily/
yumはyum-cronで自動更新
[root@server1 ~]# yum -y install yum-cron
[root@server1 ~]# /etc/rc.d/init.d/yum-cron start
[root@server1 ~]# chkconfig yum-cron on
[root@server1 ~]# chkconfig --list yum-cron
[root@server1 ~]# yum -y groupinstall "Base" "Development tools"
[root@server1 ~]# crontab -e
全て削除

予備サーバ

[root@server2 ~]# echo "30 3 * * * root /root/backuprsync.sh" > /etc/cron.d/backuprsync
[root@server2 ~]# echo "30 4 * * * root /root/backupshare.sh" > /etc/cron.d/backupshare
[root@server2 ~]# echo "30 5 * * * root /root/restore.sh" > /etc/cron.d/restore
[root@server2 ~]# echo "0 6 * * * root /root/mysqldump.sh" > /etc/cron.d/mysqldump
[root@server2 ~]# echo "30 6 * * * root /root/backup.sh" > /etc/cron.d/backup
[root@server2 ~]# mv chkrootkit /etc/cron.daily/
[root@server2 ~]# mv clamscan /etc/cron.daily/
yumはyum-cronで自動更新
[root@server2 ~]# yum -y install yum-cron
[root@server2 ~]# /etc/rc.d/init.d/yum-cron start
[root@server2 ~]# chkconfig yum-cron on
[root@server2 ~]# chkconfig --list yum-cron
[root@server2 ~]# yum -y groupinstall "Base" "Development tools"
[root@server2 ~]# crontab -e
全て削除

rootkit検知ツール(chkrootkit)

chkrootkit は、システムにrootkitが組み込まれていないかを検査してくれるツール。 rootkit とは、不正アクセスの痕跡を消し去り、それを隠ぺいし、さらなる標的を攻撃することを可能とするツール群。 chkrootkit は、いくつかの rootkit を検出できるが、 検出しても駆除する機能はない。しかし不正侵入検知には役立つ。
■chkrootkitのインストール

chkrootkitをインストール
[root@server1 ~]# yum -y install chkrootkit

■chkrootkitの実行

chkrootkitを実行
[root@linux ~]# chkrootkit
ROOTDIR is `/'
Checking `amd'... not found
Checking `basename'... not infected
Checking `biff'... not found
Checking `chfn'... not infected
・
・
・
Checking `scalper'... not infected
Checking `slapper'... not infected
Checking `z2'... user root deleted or never logged from lastlog!
Checking `chkutmp'... chkutmp: nothing deleted
[root@server1 ~]# chkrootkit | grep INFECTED
実行結果中に"INFECTED"という行がなければ問題ない

■chkrootkitの定期自動実行設定
rootkitを発見したときroot宛にメールが来るように設定

chkrootkitの実行スクリプトを作成
[root@server1 ~]# vi /root/chkrootkit
#!/bin/sh
/usr/bin/chkrootkit > /var/log/chkrootkit_log
grep "INFECTED" /var/log/chkrootkit_log
chmod 600 /var/log/chkrootkit_log
chkrootkitの実行スクリプトに実行権限を与える
[root@server1 ~]# chmod 700 chkrootkit
chkrootkit実行スクリプトを毎日自動実行されるディレクトリへ移動
[root@server1 ~]# mv chkrootkit /etc/cron.daily/

■chkrootkitで使用するコマンド群のコピー
chkrootkitが使用するコマンド群をコピーしておき、必要な場合にそのコマンド群でchkrootkitを実行する。

chkrootkitで使用するコマンド群の退避先ディレクトリの作成
[root@server1 ~]# mkdir chkrootkitcmd
chkrootkitで使用するコマンド群を退避先ディレクトリへコピー
[root@server1 ~]# cp `which --skip-alias awk cut echo egrep find head id ls netstat ps strings sed uname` chkrootkitcmd/
退避したchkrootkitでchkrootkit実行
[root@server1 ~]# chkrootkit -p /root/chkrootkitcmd|grep INFECTED
chkrootkitで使用するコマンド群の退避先ディレクトリを圧縮
[root@server1 ~]# zip -r chkrootkitcmd.zip chkrootkitcmd/
adding: chkrootkitcmd/ (stored 0%)
adding: chkrootkitcmd/id (deflated 55%)
adding: chkrootkitcmd/egrep (deflated 49%)
adding: chkrootkitcmd/sed (deflated 54%)
adding: chkrootkitcmd/netstat (deflated 58%)
adding: chkrootkitcmd/echo (deflated 54%)
adding: chkrootkitcmd/find (deflated 50%)
adding: chkrootkitcmd/awk (deflated 51%)
adding: chkrootkitcmd/head (deflated 53%)
adding: chkrootkitcmd/strings (deflated 53%)
adding: chkrootkitcmd/ps (deflated 59%)
adding: chkrootkitcmd/uname (deflated 55%)
adding: chkrootkitcmd/ls (deflated 53%)
adding: chkrootkitcmd/cut (deflated 53%)
退避先ディレクトリの削除
[root@server1 ~]# rm -rf chkrootkitcmd
圧縮したzipファイルを送信するのに必要なuuencodeコマンドのインストール
[root@server1 ~]# yum -y install sharutils
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
* base: ftp.jaist.ac.jp
* centosplus: ftp.jaist.ac.jp
* epel: ftp.jaist.ac.jp
* extras: ftp.jaist.ac.jp
* updates: mirror.khlug.org
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package sharutils.i686 0:4.7-6.1.el6 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
===================================================================================================================
Package                      Arch                    Version                        Repository               Size
===================================================================================================================
Installing:
sharutils                    i686                    4.7-6.1.el6                    base                    186 k
Transaction Summary
===================================================================================================================
Install       1 Package(s)
Upgrade       0 Package(s)
Total download size: 186 k
Installed size: 609 k
Downloading Packages:
sharutils-4.7-6.1.el6.i686.rpm                                                              | 186 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing     : sharutils-4.7-6.1.el6.i686                                                                  1/1
Installed:
sharutils.i686 0:4.7-6.1.el6
Complete!
圧縮したzipファイルをroot宛にメール送信
[root@server1 ~]# uuencode chkrootkitcmd.zip chkrootkitcmd.zip|mail root
圧縮したzipファイルを削除
[root@server1 ~]# rm -f chkrootkitcmd.zip

■chkrootkitの修正
Suckit による /sbin/init の改ざん誤検知対策。
rpm -V `rpm -qf /sbin/init` を実行し、なにも表示されなかったら未検出とする。
赤字の部分が追加

[root@server1 ~]# vi /usr/lib64/chkrootkit-0.49/chkrootkit
### Suckit
if [ -f ${ROOTDIR}sbin/init ]; then
if [ "${QUIET}" != "t" ];then printn "Searching for Suckit rootkit... "; fi
if [ ${SYSTEM} != "HP-UX" ] && ( ${strings} ${ROOTDIR}sbin/init | ${egrep} HOME  || \
cat ${ROOTDIR}/proc/1/maps | ${egrep} "init." ) >/dev/null 2>&1
then
if ! rpm -V `rpm -qf /sbin/init` >/dev/null 2>&1;
then
echo "Warning: ${ROOTDIR}sbin/init INFECTED"
fi
else
if [ -d ${ROOTDIR}/dev/.golf ]; then
echo "Warning: Suspect directory ${ROOTDIR}dev/.golf"
else
if [ "${QUIET}" != "t" ]; then echo "nothing found"; fi
fi
fi
fi

パッケージ管理(yum)

yum(Yellow dog Updater, Modified)は、RPMパッケージを操作する為のソフトウェア。 yumでは、依存関係があるパッケージも自動的にインストールされる。また、yumを利用する事によって、セキュリティーホールのアップデートや、バグフィックスパッケージも、より簡単に行う事が可能。さらには、システム全体のアップデートも、より簡単に行う事が可能。
■ レポジトリについて
RedHatのサポートするEPELとCentOSで提供されていないパッケージが多く提供されているRepoForgeを追加する事にする。
Extra Packages for Enterprise Linux (EPEL) とは従来 Fedora だけに提供されていた Fedora Extras のパッケージを Red Hat Enterprise Linux (RHEL) に提供することで、 Fedora から RHEL への移行や、 Fedora から CentOS や Scientific Linux 等の RHEL クローンへの移行を容易にするためのプロジェクト。Repoforgeとは、以前のRPMforgeの新しいプロジェクト名で、CentOSで提供されていないパッケージが多く提供されている。なお、標準リポジトリとEPELリポジトリ、Repoforgeの両方で提供されるパッケージについては、標準リポジトリのパッケージが優先されるようにyum-prioritiesプラグインを導入する。
■ yum-prioritiesのインストール
yum-plugin-prioritiesとは、サードパーティ製のリポジトリを追加した際にどちらを優先するか優先順位をつけるプラグイン。

[root@server1 ~]# yum -y install yum-plugin-priorities

設定ファイル/etc/yum/pluginconf.d/priorities.confを変更

[root@server1 ~]# vi /etc/yum/pluginconf.d/priorities.conf
[main]
enabled = 1
check_obsoletes = 1 ← 追加

■ CentOS-Base.repoの編集
CentOS-Base.repoは優先度を高く(priority=1)しておく。

[root@server1 ~]# vi /etc/yum.repos.d/CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
priority=1 ← 追加 priorityとは優先度で、1の方が優先度は高くなる。(未設定の場合は99)
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#released updates
[updates]
priority=1 ← 追加
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#additional packages that may be useful
[extras]
priority=1 ← 追加
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#additional packages that extend functionality of existing packages
[centosplus]
priority=1 ← 追加
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=1 ← 0から1に変更
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

■ EPELリポジトリのインストール
※このサイトのphpMyAdmin、Clam AntiVirusはEPELリポジトリのものを使っている。

[root@server1 ~]# rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
[root@server1 ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
[root@server1 ~]# rm -f epel-release-* ← ダウンロードしたファイルを削除

※64Bit版はhttp://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmこちら
■ epel.repoを確認
EPELは優先度を低く(priority未設定)して有効(enabled=1)に設定。

[root@server1 ~]# vi /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1 ← 1になってることを確認
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 6 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1
[epel-source]
name=Extra Packages for Enterprise Linux 6 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/6/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1

■ Repoforgeリポジトリのインストール
※このサイトのAwstatsは Repoforgリポジトリのものを使っている

[root@server1 ~]# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
[root@server1 ~]# rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
[root@server1 ~]# rm -f rpmforge-release-* ← ダウンロードしたファイルを削除

※64Bit版はhttp://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpmこちら
■ Repoforgeを確認
Rpmforgeは必要なときだけ使うので優先度を高く(priority=1)して無効(enabled=0)に設定。

[root@server1 ~]# vi /etc/yum.repos.d/rpmforge.repo
### Name: RPMforge RPM Repository for RHEL 6 - dag
### URL: http://rpmforge.net/
[rpmforge]
name = RHEL $releasever - RPMforge.net - dag
baseurl = http://apt.sw.be/redhat/el6/en/$basearch/rpmforge
mirrorlist = http://apt.sw.be/redhat/el6/en/mirrors-rpmforge
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
enabled = 0 ← 0 必要なときだけに 1 に設定
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1
priority = 1 ← 追加 1の方が優先度は高くなる。(未設定の場合は99)
[rpmforge-extras]
name = RHEL $releasever - RPMforge.net - extras
baseurl = http://apt.sw.be/redhat/el6/en/$basearch/extras
mirrorlist = http://apt.sw.be/redhat/el6/en/mirrors-rpmforge-extras
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge-extras
enabled = 0
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1
[rpmforge-testing]
name = RHEL $releasever - RPMforge.net - testing
baseurl = http://apt.sw.be/redhat/el6/en/$basearch/testing
mirrorlist = http://apt.sw.be/redhat/el6/en/mirrors-rpmforge-testing
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge-testing
enabled = 0
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1

■ yumのデータベース情報更新
ローカルに保存されているrpmヘッダ情報を最新の情報に更新。

yumのデータベース情報更新
[root@server1 ~]# yum list
インストールパッケージの確認
[root@server1 ~]# yum list installed

■ アップデート情報の確認

アップデート情報の確認
[root@server1 ~]# yum check-update

■ 一括アップデート
インストールされているパッケージを全てアップデート。

パッケージの一括アップデート
[root@server1 ~]# yum update
アップデートしてよいかの問い合わせに全て" y "で回答するためには -y オプションを指定。
パッケージの一括アップデート
[root@server1 ~]# yum -y update

■ yumによるパッケージ更新時にエラーが表示される場合
yumコマンドでパッケージの更新を行った際に、エラーが表示されることがある。これはyumのデータベースが壊れていることが考えられるので、以下のコマンドを実行してyumのデータベースをクリアしてみる。

[root@server1 ~]#  yum clean all
[root@server1 ~]#  yum update

■ その他のコマンド

パッケージのインストール
[root@server1 ~]# yum install パッケージ名
パッケージのアップデート
[root@server1 ~]# yum update パッケージ名
パッケージの検索
[root@server1 ~]# yum search パッケージ名
パッケージの詳細表示
[root@server1 ~]# yum info パッケージ名
パッケージのアンインストール
[root@server1 ~]# yum remove パッケージ名

■ yumのパッケージ自動更新設定
CentOS 5 は yum-updatesd だったが CentOS 6 では yum-cron に変わったので yum-cron をインストール。

yum-cron のインストール
[root@server1 ~]# yum -y install yum-cron
パッケージ自動更新 yum-cron の起動
[root@server1 ~]# /etc/rc.d/init.d/yum-cron start
夜間 yum 更新の有効化中:                                   [  OK  ]
パッケージ自動更新 yum-cron の自動起動設定
[root@server1 ~]# chkconfig yum-cron on
[root@server1 ~]# chkconfig --list yum-cron
yum-cron        0:off   1:off   2:on    3:on    4:on    5:on    6:off
サーバ管理に必要なベースパッケージ群と開発ツールパッケージ群をインストール
[root@server1 ~]# yum -y groupinstall "Base" "Development tools"

TripwireをYumでインストール

TripwireをYumでインストールする場合、EPELリポジトリを追加しておく。
古いTripwireが残ってる場合はアンインストールしておく

[root@server1 ~]# yum remove tripwire
下記コマンドで検索して出てきたものは全て削除しておく(ディレクトリー「rm -rf」、ファイル「rm -f」)
[root@server1 ~]# find /* | grep tripwire

■Tripwireのインストール

[root@server ~]# yum install tripwire
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
epel/metalink                                                                | 2.9 kB     00:00
* base: www.ftp.ne.jp
* centosplus: www.ftp.ne.jp
* epel: ftp.riken.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
base                                                                         | 3.7 kB     00:00
centosplus                                                                   | 3.5 kB     00:00
epel                                                                         | 4.3 kB     00:00
epel/primary_db                                                              | 4.2 MB     00:03
extras                                                                       | 3.5 kB     00:00
updates                                                                      | 3.5 kB     00:00
updates/primary_db                                                           | 4.3 MB     00:01
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package tripwire.i686 0:2.4.1.2-11.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
====================================================================================================
Package                Arch               Version                         Repository          Size
====================================================================================================
Installing:
tripwire               i686               2.4.1.2-11.el6                  epel               1.2 M
Transaction Summary
====================================================================================================
Install       1 Package(s)
Total download size: 1.2 M
Installed size: 3.7 M
Is this ok [y/N]: y
Downloading Packages:
tripwire-2.4.1.2-11.el6.i686.rpm                                             | 1.2 MB     00:01
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : tripwire-2.4.1.2-11.el6.i686                                                     1/1
Verifying  : tripwire-2.4.1.2-11.el6.i686                                                     1/1
Installed:
tripwire.i686 0:2.4.1.2-11.el6
Complete!

■tripwireの初期設定

[root@server ~]# tripwire-setup-keyfiles
----------------------------------------------
The Tripwire site and local passphrases are used to sign a  variety  of
files, such as the configuration, policy, and database files.
Passphrases should be at least 8 characters in length and contain  both
letters and numbers.
See the Tripwire manual for more information.
----------------------------------------------
Creating key files...
(When selecting a passphrase, keep in mind that good passphrases typically
have upper and lower case letters, digits and punctuation marks, and are
at least 8 characters in length.)
Enter the site keyfile passphrase: ← サイトパスフレーズを設定
Verify the site keyfile passphrase: ← サイトパスフレーズを再度入力
Generating key (this may take several minutes)...Key generation complete.
(When selecting a passphrase, keep in mind that good passphrases typically
have upper and lower case letters, digits and punctuation marks, and are
at least 8 characters in length.)
Enter the local keyfile passphrase: ← ローカルパスフレーズを設定
Verify the local keyfile passphrase: ← ローカルパスフレーズを再度入力
Generating key (this may take several minutes)...Key generation complete.
----------------------------------------------
Signing configuration file...
Please enter your site passphrase: ← サイトパスフレーズを入力
Wrote configuration file: /etc/tripwire/tw.cfg
A clear-text version of the Tripwire configuration file:
/etc/tripwire/twcfg.txt
has been preserved for your inspection.  It  is  recommended  that  you
move this file to a secure location and/or encrypt it in place (using a
tool such as GPG, for example) after you have examined it.
----------------------------------------------
Signing policy file...
Please enter your site passphrase: ← サイトパスフレーズを入力
Wrote policy file: /etc/tripwire/tw.pol
A clear-text version of the Tripwire policy file:
/etc/tripwire/twpol.txt
has been preserved for  your  inspection.  This  implements  a  minimal
policy, intended only to test  essential  Tripwire  functionality.  You
should edit the policy file to  describe  your  system,  and  then  use
twadmin to generate a new signed copy of the Tripwire policy.
Once you have a satisfactory Tripwire policy file, you should move  the
clear-text version to a secure location  and/or  encrypt  it  in  place
(using a tool such as GPG, for example).
Now run "tripwire --init" to enter Database Initialization  Mode.  This
reads the policy file, generates a database based on its contents,  and
then cryptographically signs the resulting  database.  Options  can  be
entered on the command line to specify which policy, configuration, and
key files are used  to  create  the  database.  The  filename  for  the
database can be specified as well. If no  options  are  specified,  the
default values from the current configuration file are used.

■Tripwireの設定

[root@server ~]# vi /etc/tripwire/twcfg.txt
ROOT                   =/usr/sbin
POLFILE                =/etc/tripwire/tw.pol
DBFILE                 =/var/lib/tripwire/$(HOSTNAME).twd
REPORTFILE             =/var/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr
SITEKEYFILE            =/etc/tripwire/site.key
LOCALKEYFILE           =/etc/tripwire/$(HOSTNAME)-local.key
EDITOR                 =/bin/vi
LATEPROMPTING          =false
LOOSEDIRECTORYCHECKING =false
↓
LOOSEDIRECTORYCHECKING =true
MAILNOVIOLATIONS       =true
EMAILREPORTLEVEL       =3
REPORTLEVEL            =3
↓
REPORTLEVEL            =4
MAILMETHOD             =SENDMAIL
SYSLOGREPORTING        =false
MAILPROGRAM            =/usr/sbin/sendmail -oi -t
設定ファイル(テキスト版⇒暗号署名版)を作成
[root@server ~]# twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt
Please enter your site passphrase: ← サイトパスフレーズを入力
Wrote configuration file: /etc/tripwire/tw.cfg
セキュリティ確保のため設定ファイル(テキスト版)を削除
[root@server ~]# rm -f /etc/tripwire/twcfg.txt
設定ファイル(テキスト版)を復活させる場合は以下のコマンドで復活できる
[root@server~]# twadmin --print-cfgfile > /etc/tripwire/twcfg.txt

■ポリシーファイルの設定

ポリシーファイルの最適化スクリプトを作成
[root@server ~]# vi /etc/tripwire/twpolmake.pl
#!/usr/bin/perl
# Tripwire Policy File customize tool
# ----------------------------------------------------------------------
# Copyright (C) 2003 Hiroaki Izumi
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
# ----------------------------------------------------------------------
# Usage:
#    perl twpolmake.pl {Pol file}
# ----------------------------------------------------------------------
#
$POLFILE=$ARGV[0];
open(POL,"$POLFILE") or die "open error: $POLFILE" ;
my($myhost,$thost) ;
my($sharp,$tpath,$cond) ;
my($INRULE) = 0 ;
while (<POL>) {
chomp;
if (($thost) = /^HOSTNAME\s*=\s*(.*)\s*;/) {
$myhost = `hostname` ; chomp($myhost) ;
if ($thost ne $myhost) {
$_="HOSTNAME=\"$myhost\";" ;
}
}
elsif ( /^{/ ) {
$INRULE=1 ;
}
elsif ( /^}/ ) {
$INRULE=0 ;
}
elsif ($INRULE == 1 and ($sharp,$tpath,$cond) = /^(\s*\#?\s*)(\/\S+)\b(\s+->\s+.+)$/) {
$ret = ($sharp =~ s/\#//g) ;
if ($tpath eq '/sbin/e2fsadm' ) {
$cond =~ s/;\s+(tune2fs.*)$/; \#$1/ ;
}
if (! -s $tpath) {
$_ = "$sharp#$tpath$cond" if ($ret == 0) ;
}
else {
$_ = "$sharp$tpath$cond" ;
}
}
print "$_\n" ;
}
close(POL) ;
ポリシーファイルの最適化
[root@server ~]# perl /etc/tripwire/twpolmake.pl /etc/tripwire/twpol.txt > /etc/tripwire/twpol.txt.new
ポリシーファイル(暗号署名版)を作成
[root@server ~]# twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt.new
Please enter your site passphrase: ← サイトパスフレーズを入力
Wrote policy file: /etc/tripwire/tw.pol
ポリシーファイル(テキスト版)を削除
[root@server ~]# rm -f /etc/tripwire/twpol.txt*
ポリシーファイル(テキスト版)を復活させる場合は以下のコマンドで復活できる
[root@server ~]# twadmin -m p -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key > /etc/tripwire/twpol.txt

■Tripwireのデータベース作成

ポリシーファイルよりデータベースを作成
[root@server ~]# tripwire -m i -s -c /etc/tripwire/tw.cfg
Please enter your local passphrase: ← ローカルパスフレーズを入力

■Tripwireの確認

ファイル変更をチェック
[root@server ~]# tripwire -m c -s -c /etc/tripwire/tw.cfg
Open Source Tripwire(R) 2.4.1 Integrity Check Report
Report generated by:          root
Report created on:            2013年01月17日 17時11分21秒
Database last updated on:     Never
===============================================================================
Report Summary:
===============================================================================
Host name:                    server.pine-f.co.jp
Host IP address:              127.0.0.1
Host ID:                      None
Policy file used:             /etc/tripwire/tw.pol
Configuration file used:      /etc/tripwire/tw.cfg
Database file used:           /var/lib/tripwire/server.pine-f.co.jp.twd
Command line used:            tripwire -m c -s -c /etc/tripwire/tw.cfg
===============================================================================
Rule Summary:
===============================================================================
-------------------------------------------------------------------------------
Section: Unix File System
-------------------------------------------------------------------------------
Rule Name                       Severity Level    Added    Removed  Modified
---------                       --------------    -----    -------  --------
Invariant Directories           66                0        0        0
Temporary directories           33                0        0        0
* Tripwire Data Files             100               1        0        0
Critical devices                100               0        0        0
(/proc/kcore)
User binaries                   66                0        0        0
Tripwire Binaries               100               0        0        0
Libraries                       66                0        0        0
Operating System Utilities      100               0        0        0
Critical system boot files      100               0        0        0
File System and Disk Administraton Programs
100               0        0        0
Kernel Administration Programs  100               0        0        0
Networking Programs             100               0        0        0
System Administration Programs  100               0        0        0
Hardware and Device Control Programs
100               0        0        0
System Information Programs     100               0        0        0
Application Information Programs
100               0        0        0
(/sbin/rtmon)
Shell Related Programs          100               0        0        0
(/sbin/getkey)
Critical Utility Sym-Links      100               0        0        0
Shell Binaries                  100               0        0        0
System boot changes             100               0        0        0
OS executables and libraries    100               0        0        0
Critical configuration files    100               0        0        0
Security Control                100               0        0        0
Login Scripts                   100               0        0        0
Root config files               100               0        0        0
Total objects scanned:  27453
Total violations found:  1
===============================================================================
Object Summary:
===============================================================================
-------------------------------------------------------------------------------
# Section: Unix File System
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Rule Name: Tripwire Data Files (/var/lib/tripwire)
Severity Level: 100
-------------------------------------------------------------------------------
Added:
"/var/lib/tripwire/server.pine-f.co.jp.twd" ← 今回追加されたTripwireのデータベースなので問題無し
===============================================================================
Error Report:
===============================================================================
No Errors
-------------------------------------------------------------------------------
*** End of report ***
Open Source Tripwire 2.4 Portions copyright 2000 Tripwire, Inc. Tripwire is a registered
trademark of Tripwire, Inc. This software comes with ABSOLUTELY NO WARRANTY;
for details use --version. This is free software which may be redistributed
or modified only under certain conditions; see COPYING for details.
All rights reserved.

■Tripwireの定期自動実行設定

インストール時に作成されてたTripwireの定期実行ファイルを編集
[root@server1 ~]# vi /etc/cron.daily/tripwire-check
#!/bin/sh
# デフォルトの部分をコメントアウト
#HOST_NAME=`uname -n`
#if [ ! -e /var/lib/tripwire/${HOST_NAME}.twd ] ; then
#        echo "****    Error: Tripwire database for ${HOST_NAME} not found.    ****"
#        echo "**** Run "/etc/tripwire/twinstall.sh" and/or "tripwire --init". ****"
#else
#        test -f /etc/tripwire/tw.cfg &&  /usr/sbin/tripwire --check
#fi
# パスフレーズ設定
LOCALPASS=xxxxxxxx # ローカルパスフレーズ
SITEPASS=xxxxxxxx # サイトパスフレーズ
cd /etc/tripwire
# Tripwireチェック実行
tripwire -m c -s -c tw.cfg|mail -s "Tripwire(R) Integrity Check Report in `hostname`" root
# ポリシーファイル最新化
twadmin -m p -c tw.cfg -p tw.pol -S site.key > twpol.txt
perl twpolmake.pl twpol.txt > twpol.txt.new
twadmin -m P -c tw.cfg -p tw.pol -S site.key -Q $SITEPASS twpol.txt.new > /dev/null
rm -f twpol.txt* *.bak
# データベース更新
rm -f /usr/local/tripwire/lib/tripwire/*.twd*
tripwire -m i -s -c tw.cfg -P $LOCALPASS
パーミッション変更
[root@server1 ~]# chmod 700 /etc/cron.daily/tripwire-check

これで、/etc/cron.daily/tripwire-check が一日一回実行され、メールが届くようになる。

ClamAV version: 0.97.3にアップデート

今までは、ClamAVの最新版が出るとその都度wgetでソースからインストールしてたが、yumでインストールすることにした。
■古いバージョンのclamavがある場合はアンインストールしておく

アンインストール用にバックアップしてあったモジュールを展開。
[root@server1 ~]# tar zxvf clamav-0.97.2_self.tar.gz
clamav-0.97.2のディレクトリへ移動
[root@server1 ~]# cd clamav-0.97.2
clamav-0.97.2のアンインストール
[root@server1 clamav-0.97.2]# make uninstall
clamav-0.97.2のファイルとディレクトリーを削除
[root@server1 clamav-0.97.2]# cd
[root@server1 ~]# rm -f clamav-0.97.2_self.tar.gz
[root@server1 ~]# rm -rf clamav-0.97.2
古いバージョンのディレクトリーの削除
[root@server1 ~]# rm -rf /usr/local/clamav

■Clam AntiVirusのインストール
yumでインストールする場合、レポジトリにEPELを追加しておく必要がある

[root@server1 ~]# yum -y install clamd
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
* base: rsync.atworks.co.jp
* centosplus: centos.tt.co.kr
* epel: ftp.yz.yamagata-u.ac.jp
* extras: rsync.atworks.co.jp
* updates: centos.tt.co.kr
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package clamd.i686 0:0.97.3-3.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
====================================================================================================
Package               Arch                 Version                      Repository            Size
====================================================================================================
Installing:
clamd                 i686                 0.97.3-3.el6                 epel                 128 k
Transaction Summary
====================================================================================================
Install       1 Package(s)
Total download size: 128 k
Installed size: 380 k
Downloading Packages:
clamd-0.97.3-3.el6.i686.rpm                                                  | 128 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : clamd-0.97.3-3.el6.i686                                                          1/1
Installed:
clamd.i686 0:0.97.3-3.el6
Complete!

■設定ファイル変更
ルートで動作するように変更

[root@server1 ~]# vi /etc/clamd.conf
User clam
↓
#User clam

■Clam AntiVirusの起動

[root@server1 ~]# /etc/rc.d/init.d/clamd start
Starting Clam AntiVirus Daemon:                            [  OK  ]
clamdの自動起動設定
[root@server1 ~]# chkconfig clamd on
[root@server1 ~]# chkconfig --list clamd
clamd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

■「freshclam」を使用してVirusDBをアップデート

ウィルス定義ファイルの更新機能を有効化
[root@server1 ~]# sed -i 's/Example/#Example/g' /etc/freshclam.conf
VirusDBをアップデート
[root@server1 ~]# freshclam
ClamAV update process started at Wed Feb 15 20:23:11 2012
main.cvd is up to date (version: 54, sigs: 1044387, f-level: 60, builder: sven)
Downloading daily-14460.cdiff [100%]
daily.cld updated (version: 14460, sigs: 97288, f-level: 63, builder: ccordes)
bytecode.cld is up to date (version: 167, sigs: 40, f-level: 63, builder: edwin)
Database updated (1141715 signatures) from db.jp.clamav.net (IP: 203.178.137.175)

■ウィルススキャン確認(/etc/passwdをスキャンしてみる)

[root@server1 ~]# clamscan --infected --remove --recursive /etc/passwd
----------- SCAN SUMMARY -----------
Known viruses: 1140422
Engine version: 0.97.3
Scanned directories: 0
Scanned files: 1
Infected files: 0
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 8.730 sec (0 m 8 s)
version: 0.97.3でスキャンされてることを確認

■Clam AntiVirusの定期自動実行設定

毎日自動的にウィルス定義ファイル最新化して、全てのファイルのウィルススキャンを行うスプリクトの作成
[root@server1 ~]# vi clamscan
#!/bin/bash
PATH=/usr/bin:/bin
# clamd update
yum -y update clamd > /dev/null 2>&1
# excludelist
excludelist=/root/clamscan.exclude
if [ -s $excludelist ]; then
for i in `cat $excludelist`
do
if [ $(echo "$i"|grep \/$) ]; then
i=`echo $i|sed -e 's/^\([^ ]*\)\/$/\1/p' -e d`
excludeopt="${excludeopt} --exclude-dir=^$i"
else
excludeopt="${excludeopt} --exclude=^$i"
fi
done
fi
# scan
CLAMSCANTMP=`mktemp`
clamscan --recursive --remove ${excludeopt} / > $CLAMSCANTMP 2>&1
[ ! -z "$(grep FOUND$ $CLAMSCANTMP)" ] && \
# report
grep FOUND$ $CLAMSCANTMP | mail -s "Virus Found in `hostname`" root
rm -f $CLAMSCANTMP

■Clam AntiVirus定期自動実行スクリプトに実行権限付加

[root@server1 ~]# chmod +x clamscan

■ウィルススキャン実行スクリプトを毎日自動実行されるディレクトリへ移動

[root@server1 ~]# mv clamscan /etc/cron.daily/

■スキャン除外設定

/backupディレクトリと/sysディレクトリをスキャン対象外にするように設定
[root@server1 ~]# echo "/backup/" >> clamscan.exclude
[root@server1 ~]# echo "/sys/" >> clamscan.exclude