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 設定で解決します。
トラブル時の切り分け指針
- getenforce 確認
- AVCログ確認
- コンテキスト確認
- Boolean確認
本番環境での設計チェックリスト
- SELinux enforcing 前提で設計しているか
- 書き込み領域を分離しているか
- 外部通信を明示許可しているか
- 非標準ポート登録済みか
まとめ
SELinux enforcing 環境でWebアプリを動かすには、 「無効化しない前提の設計」が不可欠です。
正しく設計すれば、セキュリティを保ったまま 安定運用が可能になります。
あわせて読みたい


SELinux によってファイル操作が拒否されるときの対処方法
概要 Linux サーバーでファイルの作成・移動・読み書きを行おうとした際、次のようなエラーが出ることがあります。 Permission denied mv: cannot move ‘file’ to ‘/var…
あわせて読みたい


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


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