SELinuxのAVCログを読めるようになる実践ガイド【denyの意味が分かる】

  • URLをコピーしました!

SELinuxトラブル対応で最も重要なのが AVCログ です。

「AVC denied が出ているのは分かるが、何をどう直せばいいか分からない」 という状態では、SELinuxは一生怖い存在のままになります。

本記事では、AVCログを 「読める → 原因が分かる → 正しい対処ができる」 状態になるための実践的な読み解き方を解説します。

目次

AVCログとは何か

AVC(Access Vector Cache)ログは、 SELinuxがアクセスを拒否した瞬間を記録したログです。

通信・ファイル・プロセス起動など、 SELinuxが関与するすべての拒否はここに出ます。

AVCログの場所

/var/log/audit/audit.log

journalctl 環境の場合:

journalctl -t setroubleshoot

まずやるべきログ抽出方法

直近のAVCログを見る

ausearch -m AVC -ts recent

特定キーワードで絞る

grep AVC /var/log/audit/audit.log

AVCログの基本構造を理解する

典型的なAVCログ例:

type=AVC msg=audit(1710000000.123:456):
 avc:  denied  { name_connect }
 for  pid=1234 comm="httpd"
 scontext=system_u:system_r:httpd_t:s0
 tcontext=system_u:object_r:postgresql_port_t:s0
 tclass=tcp_socket

見るべきポイント① comm(どのプロセスか)

comm="httpd"

→ どのアプリが拒否されたか

見るべきポイント② scontext(アクセス元)

scontext=system_u:system_r:httpd_t:s0

→ httpd_t ドメインが…

見るべきポイント③ tcontext(アクセス先)

tcontext=system_u:object_r:postgresql_port_t:s0

→ postgresql 用ポートに対して…

見るべきポイント④ denied { 操作 }

denied { name_connect }

→ ソケット接続を拒否

AVCログから原因を特定する思考手順

  1. どのプロセスか(comm)
  2. 何をしようとしたか(denied)
  3. どこに対してか(tcontext)
  4. 本来許可されるべきか

よくあるAVCログパターンと対処

① httpd が外部通信できない

典型ログ:

denied { name_connect } httpd_t

対処:

setsebool -P httpd_can_network_connect on

② 非標準ポート接続が拒否される

ポートタイプ未登録が原因です。

semanage port -a -t http_port_t -p tcp 8081

③ ファイル書き込みが拒否される

ディレクトリのコンテキスト不一致が原因。

ls -Z /path
restorecon -Rv /path

audit2allowは最後の手段

AVCログをそのまま許可するのは危険です。

まずは以下で解決できないか確認します。

  • Boolean設定
  • ポートタイプ
  • ファイルコンテキスト

切り分けの黄金ルール

AVCログを読めば、答えは必ず書いてある

「読めない」のではなく「見方を知らない」だけです。

まとめ

SELinuxのAVCログが読めるようになると、

  • 通信できない理由が分かる
  • 無効化せず解決できる
  • 障害対応が圧倒的に速くなる

SELinuxを「怖い存在」から「制御できる存在」に変えましょう。

目次