「ausearchって何を指定すれば目的のログが出てくるの?」
「そもそもauditctlでルールを追加しないとログが残らないのでは?」
こうした疑問を持つ方は多いと思います。Linuxの監査ログ(auditd)は、セキュリティインシデントの追跡・コンプライアンス対応・権限変更の追跡など、現場で欠かせない仕組みです。しかし、「ルールの設定方法」「ログの検索方法」「レポートの作り方」をまとめて把握していないと、いざというときに使い物になりません。
この記事では、auditctlコマンドによる監査ルールの設定から、ausearchコマンドを使った監査ログの検索・分析、そして集計レポートを生成するaureportコマンドの使い方まで、一気通貫で解説します。RHEL 9 / AlmaLinux 9での動作確認済みです。
この記事のポイント
・auditctl -w でファイルやディレクトリへのアクセスを監視するルールを追加できる
・ausearch -m でイベントタイプを絞り込み、素早く原因ログを特定できる
・ausearch --start today でその日の監査ログだけを抽出できる
・aureport --failed でログイン失敗や権限エラーの集計レポートを作れる
・ausearch -i でUIDやシステムコール番号を人間が読めるテキストに変換できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
auditdとausearchの関係を理解する
Linuxの監査サブシステムは大きく4つのコンポーネントで構成されています。・カーネル監査モジュール:システムコールやファイルアクセスをイベントとして記録する
・auditd(監査デーモン):カーネルのイベントを受け取り、/var/log/audit/audit.logへ書き込む
・auditctl:「何を記録するか」のルールをカーネルに登録・削除するコマンド
・ausearch / aureport:audit.logを解析・検索するためのコマンドラインツール
つまり、ausearchは「すでに記録されたログを検索する」ためのツールです。auditdが動いていて、auditctlで監視ルールが設定されていないとそもそもログが残りませんので、まず状態を確認しましょう。
Linux Audit システムはsyslogとは異なり、ルートであっても改ざんが難しいという特性を持ちます。PCI DSS や ISO 27001 などのコンプライアンス要件への対応や、インシデント発生時の事後追跡で特に威力を発揮します。
1. auditdの状態確認
# auditdのステータス確認 systemctl status auditd # auditdが止まっていれば起動 systemctl start auditd # OS再起動後も自動起動させる systemctl enable auditd
# systemctl status auditd * auditd.service - Security Auditing Service Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled; preset: enabled) Active: active (running) since Mon 2026-04-28 09:12:04 JST; 1h 15min ago Main PID: 1034 (auditd) Tasks: 4 (limit: 23246) Memory: 8.2M
auditctlで監査ルールを設定する
auditdが起動しただけでは、デフォルトでは最低限のイベントしか記録されません。「どのファイルへのアクセスを記録するか」「どのシステムコールを監視するか」は、auditctlコマンドでルールを登録して初めて機能します。auditctlには大きく2種類のルール指定方式があります。
・-w オプション(watchルール):ファイルやディレクトリを監視する
・-a オプション(syscallルール):特定のシステムコールを監視する
2. -w オプションでファイル・ディレクトリを監視する
書式:auditctl -w パス -p パーミッション -k キー名
-pオプションで監視するアクセス種別を指定します。・r:読み取り(read)
・w:書き込み(write)
・x:実行(execute)
・a:属性変更(attribute change。chmodやchownなど)
実際の設定例を見てみましょう。
# /etc/passwd の読み取り・書き込み・属性変更を監視する(キー名: passwd_changes) auditctl -w /etc/passwd -p rwa -k passwd_changes # /etc/shadow の全アクセスを監視する auditctl -w /etc/shadow -p rwxa -k shadow_access # /etc/sudoers の変更を監視する auditctl -w /etc/sudoers -p rwa -k sudoers_changes # /tmp ディレクトリの実行を監視する(マルウェア対策) auditctl -w /tmp -p x -k tmp_exec # ルールが登録されたか確認 auditctl -l
auditctl -lの出力例:-w /etc/passwd -p rwa -k passwd_changes -w /etc/shadow -p rwxa -k shadow_access -w /etc/sudoers -p rwa -k sudoers_changes -w /tmp -p x -k tmp_exec
3. -a オプションでシステムコールを監視する
ファイル単位では捉えにくい「誰がどのシステムコールを呼んだか」を記録する場合に使います。# UID 1000 以上の一般ユーザーによるファイル削除を監視する auditctl -a always,exit -F arch=b64 -S unlink,unlinkat,rename,renameat -F auid>=1000 -F auid!=4294967295 -k file_deletion # setuid バイナリの実行を監視する(権限昇格の追跡) auditctl -a always,exit -F arch=b64 -S execve -C uid!=euid -F euid=0 -k setuid_exec # root によるファイルオープンを監視する auditctl -a always,exit -F arch=b64 -S open,openat -F uid=0 -k root_open
auid!=4294967295はログイン前(デーモン起動時等)の除外フィルタです。4. ルールを削除する
# 特定のwatchルールを削除する(-w の代わりに -W を使う) auditctl -W /etc/passwd -p rwa -k passwd_changes # すべてのルールを削除する auditctl -D # 削除確認 auditctl -l
auditctlのルールを永続化する(再起動後も有効に)
auditctlコマンドで設定したルールは再起動すると消えます。再起動後も有効にするには、設定ファイルに書く必要があります。5. /etc/audit/rules.d/ に .rules ファイルを作成する
# 設定ファイルを作成(先頭数字で読み込み順を制御) vi /etc/audit/rules.d/90-custom.rules
## カスタム監査ルール(/etc/audit/rules.d/90-custom.rules) # 認証関連ファイルの監視 -w /etc/passwd -p rwa -k passwd_changes -w /etc/shadow -p rwxa -k shadow_access -w /etc/group -p rwa -k group_changes -w /etc/sudoers -p rwa -k sudoers_changes -w /etc/sudoers.d/ -p rwa -k sudoers_d_changes # SSH設定ファイルの変更を監視 -w /etc/ssh/sshd_config -p rwa -k sshd_config_changes # /tmp での実行を監視 -w /tmp -p x -k tmp_exec # UID 1000以上のファイル削除 -a always,exit -F arch=b64 -S unlink,unlinkat,rename,renameat -F auid>=1000 -F auid!=4294967295 -k file_deletion
# augenrules で rules.d 配下を結合して /etc/audit/audit.rules に反映 augenrules --load # または auditd を再起動して反映(RHEL系は service コマンド経由で) service auditd restart # 反映確認 auditctl -l
systemctl restart auditdではなくservice auditd restartを使ってください。RHEL系ではsystemctl restart auditdだとaugenrulesの自動実行が行われない場合があります。ausearchの基本的な使い方
ausearchはroot権限で実行します。オプションなしで実行するとすべての監査ログが出力されるため、実務では必ずフィルタを組み合わせます。6. イベントタイプで絞り込む(-m)
最もよく使うのが-mオプションによるイベントタイプ指定です。# ログイン失敗のイベントだけ抽出 ausearch -m USER_AUTH --success no # ファイル変更イベントを確認 ausearch -m PATH # sudoコマンドの実行履歴 ausearch -m USER_CMD # SELinuxのアクセス拒否イベント ausearch -m AVC
・USER_AUTH:ユーザー認証(SSH・コンソールログインなど)
・USER_CMD:sudoで実行されたコマンド
・AVC:SELinuxのアクセス制御違反
・SYSCALL:システムコールの呼び出し
・PATH:ファイルへのアクセスや変更
・CONFIG_CHANGE:audit設定の変更
7. 時間範囲を指定して絞り込む(--start, --end)
「今日の午後から何かあった」という場合に有効です。# 今日のログだけ確認 ausearch --start today # 昨日のログ ausearch --start yesterday --end today # 特定日時の範囲を指定(MM/DD/YYYY HH:MM:SS形式) ausearch --start 04/27/2026 10:00:00 --end 04/27/2026 18:00:00 # 直近10分以内のログ ausearch --start recent
--start recentは過去10分のログを意味します。正確な1時間指定には時刻を明示してください。8. ユーザーやプロセスで絞り込む(-ua, -p)
# 特定ユーザーの操作履歴を確認(UID or ユーザー名) ausearch -ua tomohiro # rootによる操作のみ ausearch -ua root # 特定プロセスIDのログ ausearch -p 12345 # コマンド名で絞り込む ausearch -c passwd
-uaはログ取得時のUID(auid: audit user ID)を指定します。sudoを経由した操作の場合でも、実際に端末にログインしたユーザーのUIDで追跡できます。これはセキュリティ調査で特に重要な機能です。9. ファイルやディレクトリへのアクセスを調べる(-f)
「このファイルがいつ誰に変更されたか」を調べるときに使います。事前にauditルールで該当パスの監視を設定している必要があります。# /etc/passwdへのアクセスを検索 ausearch -f /etc/passwd # /etc/shadowへの書き込み操作 ausearch -f /etc/shadow # /etc/sudoersの変更履歴 ausearch -f /etc/sudoers
auditctlまたは/etc/audit/rules.d/への設定ファイル追記で行います(前章参照)。# /etc/passwd・/etc/shadowを書き込み監視するルール追加例 auditctl -w /etc/passwd -p wa -k passwd-change auditctl -w /etc/shadow -p wa -k shadow-change # 設定を永続化する場合は /etc/audit/rules.d/audit.rules に記述 echo '-w /etc/passwd -p wa -k passwd-change' >> /etc/audit/rules.d/audit.rules
10. キー名で絞り込む(-k)
auditctlで-k キー名を付けてルールを登録した場合、ausearchの-kオプションで素早く絞り込めます。# キー名でログを検索 ausearch -k passwd_changes # キー名 + 可読形式変換を組み合わせ ausearch -k passwd_changes -i # キー名 + 今日の日付を組み合わせ ausearch -k sudoers_changes --start today -i
ausearch -i で可読形式に変換する
デフォルトのausearch出力はUIDやシステムコールが数値で表示されるため、読みにくいことがあります。-iオプションで名前に変換できます。# UIDをユーザー名に、syscallを名前に変換 ausearch -m USER_CMD -i # 時間範囲と組み合わせ ausearch --start today -m USER_AUTH -i
・変換前:
uid=1000 syscall=59・変換後:
uid=tomohiro syscall=execveインシデント調査では
-iをほぼ必ず付けるようにしましょう。ausearchの出力には複数のフィールドが含まれます。主要なフィールドの意味を押さえておくと解析が格段に速くなります。
・auid:ログイン時の実UID(suした後でも元のユーザーを追跡できる)
・uid / euid:プロセス実行時のUID / 実効UID(setuidバイナリ実行時に差が出る)
・exe:実行されたコマンドのフルパス
・comm:コマンド名(短縮形)
・key:auditctlで設定したキー名
・nametype:PATHイベントでの操作種別(CREATE/DELETE/NORMAL等)
aureportで監査ログを集計・レポート化する
ausearchが「検索」ツールであるのに対し、aureportは「集計・サマリー生成」ツールです。定期的なセキュリティ監査や月次レポート作成に向いています。実際の本番環境での出力例(ホスト名・IPはマスク済み):
# 全体サマリーを表示 # aureport Summary Report ====================== Range of time in logs: 04/01/2026 00:00:01.219 - 04/28/2026 09:45:22.771 Selected time range: 04/01/2026 00:00:01.219 - 04/28/2026 09:45:22.771 Number of changes in configuration: 3 Number of changes to accounts, groups, or roles: 2 Number of logins: 47 Number of failed logins: 5 Number of authentications: 62 Number of failed authentications: 8 Number of users: 3 Number of terminals: 6 Number of host names: 4 Number of executables: 18 Number of commands: 24 Number of files: 12 Number of AVC's: 0 Number of MAC events: 0 Number of failed syscalls: 11 Number of anomaly events: 0 Number of responses to anomaly events: 0 Number of crypto events: 91 Number of integrity events: 0 Number of key events: 23 Number of process IDs: 156 Number of events: 1842
11. よく使うaureportオプション
# 認証失敗のレポート aureport --auth --failed # 実行されたコマンドのレポート aureport --comm # ログイン成功・失敗の一覧 aureport --login # ファイルアクセスのレポート aureport --file # 失敗したシステムコールの集計 aureport --syscall --failed # 時間範囲を指定してレポート生成 aureport --start today --login # AVCイベント(SELinux拒否)のレポート aureport --avc # キー別のイベント数を確認(負荷の高いルールを特定) aureport -k | sort -k 1 -n -r | head -20
# aureport --auth --failed Authentication Report ============================================ # date time acct host term exe success event ============================================ 1. 04/26/2026 22:14:35 unknown 203.0.113.xx ssh /usr/sbin/sshd no 1720 2. 04/26/2026 22:14:41 root 203.0.113.xx ssh /usr/sbin/sshd no 1722 3. 04/27/2026 03:05:17 admin 198.51.100.xx ssh /usr/sbin/sshd no 1891
実務でよく使う監査ルール例
auditctlのルール設定で迷ったときは、業界標準のベースラインを参考にするのが近道です。12. CIS Benchmark推奨の基本ルール
CIS(Center for Internet Security)のベンチマークで推奨されている代表的なルールです。PCI DSS対応や社内セキュリティ監査の基盤として活用できます。## /etc/audit/rules.d/99-cis-basic.rules # 時刻変更の監視 -a always,exit -F arch=b64 -S adjtimex,settimeofday -k time_change -a always,exit -F arch=b64 -S clock_settime -k time_change -w /etc/localtime -p wa -k time_change # ユーザー・グループ管理ファイルの監視 -w /etc/group -p wa -k identity -w /etc/passwd -p wa -k identity -w /etc/gshadow -p wa -k identity -w /etc/shadow -p wa -k identity -w /etc/security/opasswd -p wa -k identity # ネットワーク設定変更の監視 -a always,exit -F arch=b64 -S sethostname,setdomainname -k system_locale -w /etc/issue -p wa -k system_locale -w /etc/hosts -p wa -k system_locale # ログイン・ログアウトの監視 -w /var/log/faillog -p wa -k logins -w /var/log/lastlog -p wa -k logins # 特権コマンドの監視(setuid/setgidバイナリ) -a always,exit -F arch=b64 -S execve -C uid!=euid -F euid=0 -k setuid # sudo の使用監視 -w /etc/sudoers -p wa -k sudoers_changes -w /etc/sudoers.d -p wa -k sudoers_changes
13. Webサーバー向けルール
Apache/Nginx を運用している環境向けです。設定ファイルの改ざん検知と、DocumentRootへの不審な書き込みを追跡できます。## Webサーバー管理向けルール例 # Apache/Nginx の設定ファイル変更を監視 -w /etc/httpd/conf/ -p wa -k httpd_config -w /etc/httpd/conf.d/ -p wa -k httpd_config -w /etc/nginx/nginx.conf -p wa -k nginx_config -w /etc/nginx/conf.d/ -p wa -k nginx_config # DocumentRoot へのファイル書き込み監視(改ざん検知) -w /var/www/html/ -p wa -k www_changes # cron の変更を監視 -w /etc/cron.d/ -p wa -k cron_changes -w /etc/crontab -p wa -k cron_changes -w /var/spool/cron/ -p wa -k cron_changes
応用・実務Tips
14. ausearchとgrepを組み合わせた絞り込み
# sudoでrootになった操作をユーザー別に集計 ausearch -m USER_CMD -i | grep "cmd=" | awk '{print $NF}' | sort | uniq -c | sort -rn # 特定ホストからのSSHログイン試行を抽出 ausearch -m USER_AUTH --start today -i | grep "addr=192.168." # /etc以下の設定ファイルへの書き込みを抽出 ausearch -m PATH --start today -i | grep "nametype=CREATE\|nametype=DELETE"
15. 定期的なセキュリティ監査スクリプト
週次の監査レポートをメールで受け取る例です。#!/bin/bash # /etc/cron.weekly/audit-report.sh REPORT_DATE=$(date +%Y-%m-%d) REPORT_FILE="/tmp/audit-report-${REPORT_DATE}.txt" { echo "===== 監査レポート: ${REPORT_DATE} =====" echo "" echo "--- 認証失敗 ---" aureport --auth --failed --start "$(date -d '7 days ago' '+%m/%d/%Y')" --end today echo "" echo "--- sudo実行コマンド ---" aureport --comm --start "$(date -d '7 days ago' '+%m/%d/%Y')" --end today echo "" echo "--- ファイルアクセス ---" aureport --file --start "$(date -d '7 days ago' '+%m/%d/%Y')" --end today } > "${REPORT_FILE}" # メール送信(mailコマンドが使える環境の場合) mail -s "週次監査レポート ${REPORT_DATE}" admin@example.com < "${REPORT_FILE}"
/etc/cron.weekly/に置いて実行権限を付けると毎週自動実行されます。Linux DNS 設定の基本と合わせてサーバー管理の基本を固めておくと、セキュリティ設定全体の見通しが良くなります。トラブルシュート・エラー対処
「ausearch: no matches」と表示される
検索条件に一致するログが存在しない場合に表示されます。以下を確認してください。・auditdが起動しているか:
systemctl status auditdで確認・監査ルールが設定されているか:
auditctl -lで現在のルールを確認。「No rules」なら対象ファイルのログは残っていない・時間範囲が正しいか:
--startの日付フォーマット(MM/DD/YYYY)を再確認・ログファイルの場所:デフォルトは
/var/log/audit/audit.log。auditd.confで変更されている場合がある「You don't have permission to search the audit logs」エラー
ausearchはroot権限(またはadmグループ)が必要です。# rootで実行する場合 sudo ausearch -m USER_AUTH # または sudo -i でrootシェルへ切り替え sudo -i ausearch -m USER_AUTH
sudoの適切な設定も合わせて確認しておきましょう。ログが大量すぎてausearchが遅い
audit.logが数百MBを超えると処理に時間がかかります。以下の対処を検討してください。・時間範囲を必ず指定:
--start/--endで対象期間を絞る・aureportでボトルネックを確認:
aureport -k | sort -k 1 -n -r | head -20で多発しているキーを特定する・ローテーション設定を見直す:
/etc/audit/auditd.confのmax_log_file_actionを確認・不要なルールを削除:
auditctl -lで過剰なルールがないか確認し、auditctl -Dで一時削除auditdが起動しない・ログが止まった場合
# エラーメッセージを確認する journalctl -u auditd -n 50 # ディスク容量を確認(audit.log が満杯になると auditd が停止することがある) df -h /var/log/
/etc/audit/auditd.confのdisk_full_actionの設定にも注意してください。デフォルトはSUSPEND(監査の一時停止)ですが、セキュリティ要件が高い環境ではHALT(システムを停止する)に設定するケースもあります。本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| ファイル監視ルールを追加 | auditctl -w パス -p rwa -k キー名 |
| システムコール監視ルールを追加 | auditctl -a always,exit -F arch=b64 -S syscall -k キー名 |
| 登録済みルールを確認 | auditctl -l |
| ルールを永続化する | /etc/audit/rules.d/に.rulesファイル作成 → augenrules --load |
| ログイン失敗を抽出 | ausearch -m USER_AUTH --success no -i |
| 今日のsudo実行を確認 | ausearch -m USER_CMD --start today -i |
| 特定ファイルへのアクセスを確認 | ausearch -f /etc/passwd -i |
| キー名でログを絞り込む | ausearch -k キー名 -i |
| SELinux拒否ログを確認 | ausearch -m AVC --start today -i |
| 認証失敗の集計レポート | aureport --auth --failed |
| 実行コマンドの集計レポート | aureport --comm |
| UID→ユーザー名変換 | ausearch -m USER_CMD -i |
| 特定ユーザーの操作履歴 | ausearch -ua ユーザー名 -i |
「セキュリティを意識したLinux運用」ができるエンジニアになりたいなら
auditctl・ausearch・aureportを使いこなせると、インシデント対応の速度が格段に上がります。
ネットの古い情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:envsubstコマンドでシェル変数を環境変数で展開する方法|テンプレートファイルの動的生成と実務活用も
- 前のページへ:nmcliコマンドでネットワーク接続を設定する方法|静的IP・DHCP・接続追加・削除の手順も
- この記事の属するカテゴリ:Linuxtips・セキュリティへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます