一般ユーザーが1024以下のポートを監視できるようにする

一般ユーザーが1024以下のポートを監視できるようにする

非ルートユーザーがポートtcp / 80でリッスンするサーバーを実行できるようにする必要があります。

これを行う方法はありますか?

答え1

setcap 'cap_net_bind_service=+ep' /path/to/program

これは特定のプロセスに適用されます。ただし、特定のユーザーが1024未満のポートにバインドできるようにするには、そのユーザーをsudoersに追加する必要があります。

確認してみてください議論するもっと学ぶ。

答え2

(これらのアプローチのいくつかは他の答えで述べられており、おおよその好みに応じていくつかの可能なオプションを提供しました。)

低いポートを高いポートにリダイレクトし、高いポートでリッスンできます。

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 1080

サーバーをrootとして起動し、サーバーが特権ポートでリッスンを開始すると、権限を削除できます。直接コーディングするのではなく、タスクを実行するラッパーからサーバーを起動することをお勧めします。サーバーが接続ごとにインスタンスを起動している場合は、次の場所から始めてください。inetd(または次のような類似プログラムxinetd)。の場合は、inetd次の行を使用します/etc/inetd.conf

http  stream  tcp  nowait  username:groupname  /path/to/server/executable  argv[0] argv[1]…

サーバーが単一のインスタンスをリッスンする場合は、次の場所から始めてください。authbind。空のファイルを作成し/etc/authbind/byport/80、サーバーを実行しているユーザーとして実行可能にするか、createを作成します。/etc/authbind/byuid/1234ここで、1234はサーバーが実行されているUIDであり、行を含みます0.0.0.0/0:80,80

サーバー実行可能ファイルがその機能をサポートするファイルシステムに保存されている場合は、次のように指定できます。cap_net_bind_service 能力。これらの機能はまだ比較的新機能です。まだいくつかの質問があります。

setcap cap_net_bind_service=ep /path/to/server/executable

答え3

サービスが systemd によって実行される場合、

  1. サービス構成で必要なポートを設定します。
  2. ユニットファイルを開き(通常)そのセクションに移動し、新しい行を追加してファイルを保存します。/etc/systemd/system/something.service[Service]AmbientCapabilities=CAP_NET_BIND_SERVICE
  3. ファイルを再読み込みします。systemctl daemon-reload
  4. (再)サービス開始:またはsystemctl start somethingsystemctl restart something

源泉

答え4

使用できるnetcatまたはxinetdまたは、iptablesポートフォワーディングを使用するか、Apacheをフロントエンドプロキシとして使用し、権限のないポートでプロセスを実行します。

関連情報