RHEL 8 の SELinux 環境で nginx の "13: Permission Denied" を解消する
SELinux のポートラベルを追加し、RHEL 8 上の nginx が非標準ポートへバインドできるようにする方法を解説します。
RHEL 8 上の nginx で 1080 のような非標準ポートをリッスンするよう設定すると、13: Permission denied が発生することがあります。多くの場合、SELinux のポートラベルが原因です。
systemd[1]: Starting The nginx HTTP and reverse proxy server...nginx[1626]: nginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx[1626]: nginx: [emerg] bind() to 0.0.0.0:1080 failed (13: Permission denied)nginx[1626]: nginx: configuration file /etc/nginx/nginx.conf test failedsystemd[1]: nginx.service: Control process exited, code=exited status=1systemd[1]: nginx.service: Failed with result 'exit-code'.systemd[1]: Failed to start The nginx HTTP and reverse proxy server.解決方法
解決策は、SELinux のポリシーを更新して nginx がカスタムポート 1080 を使用できるようにすることです。
sudo semanage port -a -t http_port_t -p tcp 1080sudo: semanage: command not found というエラーが出た場合は、以下のコマンドで必要なパッケージをインストールしてください。
sudo dnf provides /usr/sbin/semanagesudo dnf install policycoreutils-python-utilsまとめ
semanage port を使ってポート 1080 に http_port_t ラベルを付けると、nginx がこの非標準ポートへバインドできるようになります。
このメッセージはファイルパーミッションのエラーに見えますが、SELinux は nginx に許可されていないタイプのポートへのバインドを拒否します。
SELinux が enforcing モードのホストで nginx に非標準のリッスンポートを追加する場合は、ファイルパーミッションやファイアウォールを変更する前に、そのポートの SELinux ラベルを確認してください。
関連記事
EC2 上で Proxy.py を軽量 HTTP プロキシとして動かす
認証機構を持たない Proxy.py を EC2 インスタンス上で動かし、SSH トンネル経由で安全にアクセスします。
リスクストーミングでアーキテクチャの懸念を対策につなげる
アーキテクチャ上のリスクを個別に評価し、異なる見解をすり合わせ、追跡可能な軽減策へつなげる手順を実例とともに紹介します。
C4 ダイアグラムでチーム間のコミュニケーションを改善する
C4 モデルの4つのズームレベルを軸に、ビジネス、開発、運用、セキュリティの各担当者に合ったアーキテクチャの見せ方を考えます。
Cognito User Pools と OIDC で Slack サインインを実装する
Cognito user pool を OIDC 経由で Slack と連携させ、"Sign in with Slack" を Amplify で Next.js アプリケーションに組み込みます。
Lambda Web Adapter で FastAPI を AWS Lambda にデプロイする
FastAPI で書いた API バックエンドをコンテナ化し、Lambda Web Adapter と AWS CDK を使って単一の Lambda 関数へデプロイします。
