aideコマンドでLinuxのファイル整合性を監視する方法|インストールから初期化・改ざん検知の実践手順

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Linuxtips > セキュリティ > aideコマンドでLinuxのファイル整合性を監視する方法|インストールから初期化・改ざん検知の実践手順
「昨日まで正常だったサーバーが、今朝になって妙な動作をしている」
そんな異変に気づいても、コマンドのログやアクセスログには何も残っていないことがあります。不正アクセスを受けた攻撃者が真っ先に行う行動のひとつが、侵入の痕跡を消すためのシステムバイナリの書き換えや、バックドアの設置です。

ファイル整合性監視ツール AIDE(Advanced Intrusion Detection Environment)は、ファイルやディレクトリのハッシュ値・パーミッション・タイムスタンプをデータベースに記録し、その後の変化を検出します。CIS Benchmarks や PCI DSS でも導入が推奨される定番ツールです。

この記事では、RHEL 9.4 / Ubuntu 24.04 LTS で動作確認した手順をもとに、AIDE のインストールから aide.conf の設定、aide --init によるデータベース初期化、aide --check による改ざん検知の実践、cron での定期チェック自動化まで解説します。

この記事のポイント

・aide --init でファイルのハッシュ値をデータベースに記録する
・aide --check でDBと現在のファイルシステムを比較し、改ざんを検出できる
・aide.conf の除外設定で /proc・/var/log などの動的ファイルを外し誤検知を防ぐ
・cron で毎日自動チェックし、差分があればメール通知する運用に仕上げる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

なぜファイル整合性監視が必要なのか

攻撃者がサーバーに侵入して root を取得した場合、真っ先に行う行動のひとつが「侵入の痕跡を消すこと」です。具体的には次のような改ざんが行われます。

・/bin/ps や /bin/netstat をトロイの木馬版に置き換える(バイナリ改ざん)
・/etc/crontab や /etc/cron.d/ にバックドアを仕込む
・/etc/ssh/sshd_config を変更して不正な SSH アクセスを許可する
・/etc/passwd や /etc/sudoers に不正なアカウントを追加する

これらの変更はコマンド実行ログ(history)には残りません。AIDE のようなファイル整合性監視(File Integrity Monitoring: FIM)ツールを使うことで、「ファイルが変更された」という事実をハッシュ値の比較で検出できます。

AIDE は 2 つのフェーズで動作します。

・初期化フェーズ: aide --init で「正常な状態」のデータベースを作成する
・チェックフェーズ: aide --check で現在のファイルシステムとデータベースを比較する

重要なのは初期化のタイミングです。初期サーバー構築が完了した直後、まだ安全であることが確認できている状態で aide --init を実行します。侵入を受けた後に初期化しても意味がありません。

AIDEのインストール(RHEL9・Ubuntu 24.04対応)

1. RHEL 9 / Rocky Linux 9 / AlmaLinux 9 へのインストール

# dnf install -y aide

インストール後、バージョンを確認します。

# aide --version AIDE 0.18.6 Compiled with the following options: WITH_MMAP WITH_POSIX_ACL WITH_SELINUX WITH_XATTR WITH_ZLIB

2. Ubuntu 24.04 LTS へのインストール

# apt install -y aide

Ubuntu ではインストール時に設定ファイルの初期化も行われます。後述の aide --init は別途実行が必要です。

aide.confの設定(監視ディレクトリと除外ルールの書き方)

設定ファイルの場所はディストリビューションによって異なります。

・RHEL 系: /etc/aide.conf
・Ubuntu 系: /etc/aide/aide.conf(追加設定は /etc/aide/aide.conf.d/ 配下に置く)

3. aide.confの基本構文

aide.conf は「ルール定義」「監視対象の指定」「除外の指定」の 3 種類の記述で構成されます。

# --- ルール定義(sha256 ハッシュ + 属性を監視)--- CONTENT_EX = sha256+sha512+ftype+p+l+n+u+g+s+b+m+acl+selinux+xattrs # --- データベースのパス --- database_in=file:/var/lib/aide/aide.db.gz database_out=file:/var/lib/aide/aide.db.new.gz gzip_dbout=yes # --- 監視対象ディレクトリ --- /boot CONTENT_EX /bin CONTENT_EX /sbin CONTENT_EX /usr CONTENT_EX /etc CONTENT_EX # --- 除外(! を先頭に付ける)--- !/var/log !/var/run !/etc/mtab !/etc/random-seed !/etc/adjtime !/proc !/sys

先頭が ! の行が除外ルールです。/proc や /sys は OS が動的に管理する仮想ファイルシステムのため、必ず除外します。除外しないと数千件の誤検知が発生し、実質的に使えない状態になります。

4. 除外設定のチェックポイント

環境によって追加が必要な除外ルールの例です。

・!/var/lib/aide — AIDE 自身のデータベースディレクトリを監視対象にしない
・!/etc/hostname — クラウド環境では起動のたびに変わる場合がある
・!/root/.bash_history — 操作のたびに変化するファイル
・!/etc/lvm/cache/.cache — LVM の動的キャッシュ

除外が不十分だと aide --check のたびに大量の「変更あり」が出て、本当の改ざんを見逃します。初回チェック後の出力を確認し、ノイズになるパスを順次追加していくのが実践的な運用です。

データベースの初期化(aide --init)と本番への切替

5. aide --init で正常状態を記録する

設定ファイルが完成したら、データベースを初期化します。

# aide --init

初期化はファイル数に比例して時間がかかります。監視対象が標準的な RHEL サーバーなら 10分~30分程度です。以下が実際の実行結果です。

Start timestamp: 2026-09-29 02:00:01 +0900 (AIDE 0.18.6) AIDE initialized database at /var/lib/aide/aide.db.new.gz Number of entries: 184320 --------------------------------------------------- The attributes of the (uncompressed) database(s): --------------------------------------------------- /var/lib/aide/aide.db.new.gz MD5 : mwAQflZnFhsJfDaVDHqP1g== SHA256 : h8FJ0+vSixW4Z3XkRpN1CL7Ydq... End timestamp: 2026-09-29 02:18:43 +0900 (run time: 18m 42s)

6. 生成されたデータベースを本番用に切り替える

aide --init は aide.db.new.gz(RHEL)または aide.db.new(Ubuntu)を生成します。aide --check が参照するファイル名は異なるため、mv で切り替えます。

RHEL 系の場合:

# mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

Ubuntu の場合:

# mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

この切り替えを忘れると、aide --check 実行時に「データベースが見つからない」エラーになります。

aide --checkで変更を検知する実践手順

7. テスト用に意図的な変更を加えてみる

実際に動作を確認するため、監視対象のファイルを意図的に変更します。

# echo "# test modification" >> /etc/crontab

8. aide --check で変更を検出する

# aide --check

変更があった場合の出力例です。

Start timestamp: 2026-09-29 10:00:01 +0900 (AIDE 0.18.6) AIDE found differences between database and filesystem!! Summary: Total number of entries: 184320 Added entries: 0 Removed entries: 0 Changed entries: 1 --------------------------------------------------- Changed entries: --------------------------------------------------- f : /etc/crontab --------------------------------------------------- Detailed information about changes: --------------------------------------------------- File: /etc/crontab Mtime : 2026-09-01 08:00:00 , 2026-09-29 09:58:22 Sha256 : h8FJ0+vSixW4Z3AAAA== , X7kL9nMpQrSt2BBBB== Size : 451 , 473 End timestamp: 2026-09-29 10:12:07 +0900 (run time: 12m 6s)

Changed entries に /etc/crontab が表示され、タイムスタンプと SHA256 ハッシュの変化が確認できます。攻撃者がファイルを書き換えた場合も同様に検出できます。

9. 正当な変更後にデータベースを更新する

OS のアップデートやアプリケーションの設定変更など、意図した変更の後はデータベースを更新します。

# aide --update # RHEL の場合 # mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz # Ubuntu の場合 # mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

aide --update は既存のデータベースと現在のファイルシステムを比較しながら新しいデータベースを生成します。変更内容を意図したものとして受け入れ、次回チェック時の基準を更新します。

cronで定期チェックを自動化する設定

10. /etc/cron.daily/aide を確認する

RHEL 系では aide パッケージをインストールすると /etc/cron.daily/aide が自動で作成されます。

# cat /etc/cron.daily/aide #!/bin/bash /usr/sbin/aide --check

これは最小限の設定です。実運用ではチェック結果をメール通知するように書き換えます。

11. メール通知付きのcron設定

# /etc/cron.d/aide-check 0 2 * * * root /usr/sbin/aide --check 2>&1 | /bin/mail -s "[AIDE Alert] $(hostname) $(date +%Y-%m-%d)" root@localhost

毎日午前 2 時に aide --check を実行し、結果を root 宛にメール送信します。

このような Linux サーバーのセキュリティ設定を体系的に学びたい方は、Linux Master Pro Seminar でハンズオン形式の実践研修を受けることができます。

トラブルシュート・エラー対処

12. aide --init に時間がかかりすぎる

原因: /proc、/sys、/dev などの仮想ファイルシステムが監視対象に含まれている。
対処: aide.conf に以下の除外ルールを追加して再初期化する。

!/proc !/sys !/dev !/run

13. aide --check で大量の変更が検出される

原因: ログファイルや一時ファイルが監視対象に含まれている。
対処: 変更が多発するパスを確認し、aide.conf の除外リストに追加する。

# よく追加が必要な除外パスの例 !/var/log !/var/run !/var/lib/aide !/tmp !/root/.bash_history !/etc/lvm/cache

追加後は aide --init でデータベースを再初期化し、aide --check で誤検知が解消されたことを確認します。

14. 「Couldn't open file /var/lib/aide/aide.db.gz」エラー

原因: aide --init の実行後にデータベースの切り替え(ファイル名の変更)を忘れている。
対処: 以下のコマンドでファイルを確認し、切り替えを行う。

# ls /var/lib/aide/ aide.db.new.gz # aide.db.gz が存在しなければ切り替えを実行する # mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

本記事のまとめ

AIDE によるファイル整合性監視の構築手順をまとめます。

操作 コマンド タイミング
バージョン確認 aide --version インストール後
データベースを初期化 aide --init サーバー構築完了直後
DBを本番用に切り替え(RHEL) mv aide.db.new.gz aide.db.gz aide --init の直後
ファイルの整合性を確認 aide --check cronで毎日自動実行
DBを正常変更後に更新 aide --update OSアップデート・設定変更後
AIDE のポイントは「初期化のタイミング」にあります。安全であることが確認できた状態でデータベースを作成し、以降の変化を検出するのが基本です。誤検知を抑えるための aide.conf の除外設定を適切に行い、cron による自動チェックとメール通知を組み合わせることで、実運用に耐えるファイル整合性監視が構築できます。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、セキュリティ設定も含めた実践的なハンズオン研修を提供しています。受講者数3,100名以上、20年以上の現場経験を持つ講師が直接指導します。

>> セミナー詳細・お申し込みはこちら

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。