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