SELinux enforcing環境でWebアプリを動かす設計注意点【本番運用向け】

  • URLをコピーしました!

SELinuxを enforcing のままWebアプリを運用するのは、 セキュリティ的には正解ですが、設計を誤ると 「通信できない」「ファイルにアクセスできない」といった トラブルを頻発させます。

本記事では、SELinux enforcing 環境でWebアプリを安全かつ安定して動かすために、 設計段階で必ず押さえるべき注意点を実務視点で解説します。

目次

SELinux enforcing環境の前提理解

SELinux enforcing では、以下がすべて満たされない限り動作しません。

  • プロセスのドメインが許可されている
  • アクセス対象のコンテキストが適切
  • 必要なポート・通信が許可されている

「rootだから大丈夫」は通用しません。

設計注意点① Webアプリは httpd ドメインで動かす

Apache / nginx 経由のWebアプリは、 httpd_t ドメインで動作する前提で設計すべきです。

独自バイナリを httpd から起動する場合、 不適切なドメインだと通信やファイルアクセスが拒否されます。

確認方法

ps -eZ | grep httpd

設計注意点② 配置ディレクトリのコンテキスト設計

Webアプリのファイル配置場所は非常に重要です。

NG例:

  • /opt/myapp
  • /home/user/app

推奨例:

  • /var/www/html
  • /var/www/app

正しいコンテキスト付与

semanage fcontext -a -t httpd_sys_content_t "/var/www/app(/.*)?"
restorecon -Rv /var/www/app

設計注意点③ 書き込みディレクトリを分離する

ログ・アップロード・一時ファイルを コードと同じ場所に書かせる設計はNGです。

書き込み用ディレクトリには専用コンテキストを付与します。

semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/app/data(/.*)?"
restorecon -Rv /var/www/app/data

設計注意点④ 外部通信は明示的に許可する

SELinuxでは httpd からの外部通信はデフォルトで拒否されます。

API連携・DB接続がある場合は以下が必須です。

setsebool -P httpd_can_network_connect on

設計注意点⑤ 非標準ポートは必ずSELinuxに登録

Webアプリが 8080 / 8443 などで待ち受ける場合、 ポートタイプ登録が必要です。

semanage port -a -t http_port_t -p tcp 8080

Firewallだけでは不十分です。

設計注意点⑥ audit2allowに頼らない

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

  • 不要な権限まで許可する
  • 将来の脆弱性につながる

基本は Boolean / fcontext / port 設定で解決します。

トラブル時の切り分け指針

  1. getenforce 確認
  2. AVCログ確認
  3. コンテキスト確認
  4. Boolean確認

本番環境での設計チェックリスト

  • SELinux enforcing 前提で設計しているか
  • 書き込み領域を分離しているか
  • 外部通信を明示許可しているか
  • 非標準ポート登録済みか

まとめ

SELinux enforcing 環境でWebアプリを動かすには、 「無効化しない前提の設計」が不可欠です。

正しく設計すれば、セキュリティを保ったまま 安定運用が可能になります。

目次