Webサーバーが伝統的にスーパーユーザーとして起動するのはなぜですか?

Webサーバーが伝統的にスーパーユーザーとして起動するのはなぜですか?

setuid将来、Webサーバーの設定を考えると、何らかの理由でWebサーバーがしばしばrootで始まり、次にワーカープロセスに対する特定の権限を放棄することが考えられました()。さらに、chrootこれがまさにセキュリティ対策ではないこともよく言及されています。

私が知りたいのは、Webサーバー(Apacheからlighttpd、nginxまですべてを管理してきました)が機能的なシステム(capabilities(7))、たとえば、CAP_NET_BIND_SERVICELinuxでroot以外のユーザーとして起動しましたか? ...1024未満の特権ポートで引き続きリッスンします。

あるいは、もっと良いことは、ほとんどの人がそうすることができると思いますが、これが一般的な慣行ではないのはなぜですか?なぜできません...

  • 使用setcap(8)バイナリを実行していますかCAP_NET_BIND_SERVICE
  • (rootではない)ユーザーが記録できるようにログフォルダを設定します。
  • ...、役立つ場合は、Webサーバーをchroot使用するchrootか、「刑務所」にしますか?lxc

(ワーカー)子プロセスが親プロセスを終了する可能性を除いてroot

それでは、伝統的にrootで始まり、それに伴う暗黙のセキュリティ問題を排除するためにすべての手順を実行するのはなぜですか?

ベストアンサー1

POSIXにはCAP_NET_BIND_SERVICEを含む機能標準がありますが、これは役に立ちません。一貫性そしてある意味ではそうかもしれません互換性がないLinuxなどのプラットフォームで実装されています。

ApacheなどのWebサーバーは単一のプラットフォーム用に作成されていないため、root権限を使用することが最も移植性の高い方法です。私はこれがLinuxとBSD(またはサポートが検出された場所)で特に実行できると思いますが、これは動作がプラットフォームなどによって異なる可能性があることを意味します。

私の考えでは、すべてのWebサーバーがこのように使用できるようにシステムを構成できるようです。以下は、このWRT Apacheに関するいくつかの(おそらく不器用な)提案です。ルート以外のポートバインディング

それから彼らはなぜ伝統的に後で暗黙のセキュリティ問題を排除するためにすべてのタスクが完了したら、rootで起動しますか?

通常、特権ポートへのアクセスが必要なので、ルートで始まります。伝統的にこれが唯一の方法です。後でダウングレードする理由は、権限を必要とせず、サーバーで一般的に使用される多数のサードパーティのアドインによる潜在的なダメージを制限するためです。

特権アクティビティは非常に制限されており、慣例によって他のinetデーモン(たとえばsshd)を含む他の多くのシステムデーモンがルートとして実行され続けるため、これは無理ではありません。

CAP_NET_BIND_SERVICEを使用して権限のないユーザーとして実行できるようにサーバーをパッケージ化した場合どのHTTP(S)サービスを開始する権限がないユーザーは、より大きなリスクを引き起こす可能性があります。

おすすめ記事