go(v1.7)[v1.7)
golangのカスタムWebサーバーを作成するタスクは、ポート80のような特権ポートにバインドする必要性に遭遇することがよくあります。この記事では、GOで特権を落とすという問題を調査し、ソリューションを提供します。別の方法として、iPtablesを使用してポート80を非公開ポートにリダイレクトできます。ただし、このソリューションは、非ルートプロセスがWebサーバーになりすましてもらうことにより、セキュリティの脆弱性を開きます。特権ポートを開いてUIDを決定した後、目的のユーザーを識別し、UIDを取得し、GLIBC関数setGID()とsetUID()を使用してUIDとGIDの両方を設定できます。ポートをバインドした直後にこのコードを実行することが重要ですが、http.serveを呼び出す前に。最初に必要なTLS証明書を読み込み、特権ポートに耳を傾けます。アプリケーションがrootとして実行されている場合、GLIBC呼び出しを使用してUIDとGIDを設定することにより、指定されたユーザーに格下げされます。その後、受信リクエストに耳を傾け、Webコンテンツを提供します。セキュリティを損なうことなく、安全で堅牢なカスタムWebサーバーを作成できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3