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ログから原因を特定する思考手順
- どのプロセスか(comm)
- 何をしようとしたか(denied)
- どこに対してか(tcontext)
- 本来許可されるべきか
よくある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を「怖い存在」から「制御できる存在」に変えましょう。
あわせて読みたい


SELinuxが原因で通信できない時の切り分け手順【Firewall正常でも要注意】
Linuxサーバーで「ポートはLISTENしている」「Firewallも開いている」 にもかかわらず通信できない場合、原因として非常に多いのが SELinux です。 本記事では、SELinux…
あわせて読みたい


非標準ポートを使う時のSELinux設定まとめ【semanage完全解説】
Linuxでアプリケーションを非標準ポート(例:8081 / 8443 / 9000など)で公開した際、 Firewallは開いているのに接続できないというトラブルは非常に多く、 原因の大半…
あわせて読みたい


SELinux enforcing環境でWebアプリを動かす設計注意点【本番運用向け】
SELinuxを enforcing のままWebアプリを運用するのは、 セキュリティ的には正解ですが、設計を誤ると 「通信できない」「ファイルにアクセスできない」といった トラブ…
