CentOS 7: AIDEでファイルの整合性をチェックする

AIDEでファイルの整合性をチェックする方法について記載します。

1 AIDEをインストールする前に

あらかじめこちらの手順でPostfixをインストールしておきます。

2 AIDEのインストール

aideパッケージをインストールします。

$ sudo yum install -y aide

3 データベースの作成

"aide –init"でaide.db.new.gzが作成されます。それをaide.db.gzへコピーする必要があります。

$ sudo aide --init.
$ sudo cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

4 ファイルの整合性をチェックする

aide –checkでファイルの整合性をチェックします。aide –updateでファイルの整合性をチェックしつつ、新たなデータベースaide.db.new.gzを作成します。aide.db.gzへのコピーが必要です。

$ sudo aide --check
<snip>
$ echo $?
0

ファイルに変更があった場合は戻り値が0以外の値になります。

$ sudo mv /usr/sbin/ip /usr/sbin/ip.orig
$ echo "modified" | sudo tee /usr/sbin/ip
$ sudo aide --check
<snip>
$ echo $?
4

5 aideを実行するcronジョブ

cronジョブは用意されていないので、独自に作成する必要があります。この記事では、"aide –update"を実行し、エラーがあった場合にメール送信するcronジョブを作成します。

$ sudo yum install -y mailx liblockfile
$ cat <<EOF | sudo tee /etc/cron.daily/aide
#!/bin/sh

LOCK_FILE=/var/run/aide.lock
MAIL_ADDR=root@localhost

dotlockfile -p \${LOCK_FILE} || exit 1

TMP=\$(mktemp -t aide.XXXXXX)
trap "rm \$TMP* 2>/dev/null" 0

aide --update > \${TMP} 2>&1
ret=\$?
if [ \${ret} -eq 0 ]; then
  # Nothing is changed.
  cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
elif [ \${ret} -lt 8 ]; then
  # Some file is changed.
  cat \${TMP} | mail -s "AIDE detects changes" \${MAIL_ADDR}
  cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
else
  # Cannot update database.
  cat \${TMP} | mail -s "AIDE fatal error" \${MAIL_ADDR}
fi

dotlockfile -u \${LOCK_FILE}
EOF
$ sudo chmod a+x /etc/cron.daily/aide