Apacheのようなデーモンや1024以下のバインディングポートはどのように開きますか?

Apacheのようなデーモンや1024以下のバインディングポートはどのように開きますか?

1024未満のポートは保護されており、十分な権限がないとユーザーが開くことができないことがわかります。

しかし、rootとして実行されていなくても、バインディングやApacheなどのデーモンがどのようにこれを実行できるかを知りたいです。

だから私の質問は:バインディングやApacheのようなサーバーはどのようにポート80、443などを開くことができますか?

答え1

Apache は権限の削除をサポートするデーモンの例です。 Apacheはいルートで始まり、ルートとしてポートにバインドします。バインド後、システムコールを使用してsetuid権限setgidを下げます。変更されるユーザーは、ユーザーとグループの構成オプションによって決まります。

答え2

すべてのアプリケーションは一連のルート機能を使用できますsetcap
そのうちの1つが1024より低いポートを開く場合。
非rootユーザーとしてアプリケーションを実行できますが、必要な機能を設定しても問題はありません。
可能な機能について学びます。http://linux.die.net/man/7/capability

たとえば、root以外のユーザーとしてapache-tomcatを実行します。
setcap <your needed caps> <java_home>/<java_executable>

実行可能ファイルに設定された上限値を表示するには:
getcap /path/to/the/executable

関連情報