> For the complete documentation index, see [llms.txt](https://docs.chamilo.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.chamilo.org/3.x/ja/gaido-1/admin-guide/security/file-integrity.md).

# ファイル整合性

*Chamilo 3.0 で追加。*

ファイル整合性は、サーバー上にインストールされているファイルを信頼できるベースラインと比較し、想定していない追加、変更、削除、および権限の変更を検出します。成功した侵入、侵害された依存関係、または誤った手動編集が残すような変化です。

## ファイル整合性へのアクセス

管理パネルから **セキュリティ > ファイル整合性** をクリックします。

## 表示内容

* **最終スキャン** — 直近のスキャンが実行された日時と、検査したファイル数
* **追加 / 変更 / 削除** — ベースラインと異なるファイル。SHA-256 チェックサムの比較で特定されます（各リストは 500 パスで上限があり、全リストがそれより長い場合は注記があります。完全なリストは下記の CEF ログを参照してください）
* **権限変更** — ベースラインと権限が異なるファイル。Linux では POSIX のモードビットを直接比較します（例: ファイルが誰でも書き込み可能になった場合にフラグが立ちます）。Windows では読み取り専用属性のみを追跡します。`fileperms()` は実際の NTFS ACL を反映しないためです
* **アラート履歴** — 何かを検出したすべてのスキャンの、永続的で追記専用のログ（直近 50 件まで）。上記のレポートとは異なり、クリーンなスキャンや新しいベースラインではこのリストはクリアされないため、フラグが立ったドリフトが解消された後も過去のアラートは表示されたままです

検査はインストール済みファイルツリー全体を走査しますが、`var/` および `.git/` ディレクトリは除外します。ただし例外として、`.git/config` は個別に監視し続けます。Git のリモートが敵対的なサーバーへ静かに差し替えられることを検出するためです。シンボリックリンクは追跡しません。走査のループやインストールディレクトリからの脱出を避けるためです。

大規模なインストールのフルスキャンは数分かかることがあるため、走査はチャンク化され（トップレベルディレクトリを一度に 1 つずつ）、進捗はロックファイルで追跡されます。そのためページを再読み込みして進捗を安全に確認でき、クラッシュまたは強制終了したスキャンが実行中と誤認されることはありません。

## 操作

* **今すぐスキャンを実行** — 現在のファイルツリーをベースラインと直ちに比較します
* **1 時間一時停止** — アラートを一時的に停止します（例: 更新をデプロイしている間）。自身のパスワードの再入力が必要です。一時停止中、スキャンはアラートせず現在のツリーを新しいベースラインとして静かに採用するため、一時停止ウィンドウが終わってもアラートが残りません。一時停止の上限は 24 時間です
* **新しいベースラインを確立** — 現在のファイルツリーを新しい信頼できる参照として採用します。自身のパスワードの再入力が必要です

アラートの一時停止や新しいベースラインの確立は進行中の侵入を隠す可能性があるため、どちらもパスワードの再入力が必要です。ハイジャックされた管理者セッションだけでは、ファイルが改ざんされている間に検出を黙らせることはできません。

## Cron からの実行

同じ検査はコンソールコマンドとしても利用でき、管理ページから定期実行するのではなく cron でスケジュールすることを想定しています。

```bash
# Scan for drift and alert admins if anything changed
0 3 * * * cd /var/www/chamilo/master && php bin/console app:file-integrity:scan

# Generate or regenerate the baseline (run once after install, or after a manual update)
php bin/console app:file-integrity:baseline

# Pause alerting from the command line (prompts for a global administrator's username and password)
php bin/console app:file-integrity:snooze
```

一時停止が有効な場合、`app:file-integrity:scan` はアラートせず静かに再ベースライン化し、管理ページから起動したスキャンと同じ動作になります。

## 設定

関連する設定は **構成設定 > セキュリティ** に 1 つあります。

* **`file_integrity_check_notify_admins`** — ドリフト検出時に通知するメールアドレスのリスト。空の場合はすべてのグローバル管理者が通知されます

## SIEM 連携

すべてのスキャンは CEF（Common Event Format）のログ行を `var/logs/security/file_integrity.log` にも書き込み、SIEM（Wazuh、Splunk、QRadar、ArcSight、Elastic/Filebeat など）での取り込みに適しています。各行には変更の種類を示すシグネチャ ID が付きます。

| Signature       | Meaning                               |
| --------------- | ------------------------------------- |
| `FIM-ADDED`     | 新しいファイルが出現した                          |
| `FIM-MODIFIED`  | ファイルの内容が変更された                         |
| `FIM-DELETED`   | ファイルが消失した                             |
| `FIM-GITCONFIG` | `.git/config` が変更された（リモートのハイジャックの可能性） |
| `FIM-PERMS`     | ファイルの権限が変更された                         |
| `FIM-TRUNCATED` | カテゴリのレポートが上限に達した。完全なリストはログを参照         |

## 推奨される使い方

1. インストール直後、および手動での更新やデプロイのたびにベースラインを確立する
2. cron で `app:file-integrity:scan` をスケジュールする（例: 毎晩）
3. ファイルが変更される予定のメンテナンス時間帯（更新、移行など）の前には、cron ジョブを完全に削除するのではなく、**1時間一時停止**を使う
4. SIEM や既存のログ監視がある場合は、`var/logs/security/file_integrity.log` をそこに取り込む
