Linux 上で非ルート プロセスが「特権」ポートにバインドする方法はありますか? 質問する

Linux 上で非ルート プロセスが「特権」ポートにバインドする方法はありますか? 質問する

私以外のユーザーがいないのに、開発ボックスにこのような制限があるのは非常に迷惑です。

私は知っています標準的な回避策しかし、どれも私が望んでいることを正確に実行しません。

  1. 認証バインド(Debian テスト版 1.0 は IPv4 のみをサポートします)
  2. iptables REDIRECTターゲットを使用して、低いポートを高いポートにリダイレクトする(「nat」テーブルは、iptables の IPv6 バージョンである ip6tables にはまだ実装されていません)
  3. sudo (root として実行するのは避けたい)
  4. SELinux (または類似のもの)。(これは単なる私の開発ボックスであり、余分な複雑さを導入したくありません。)

sysctlLinux 上で非ルート プロセスが「特権」ポート (1024 未満のポート) にバインドできるようにする簡単な変数はありますか、それとも運が悪いだけでしょうか?

編集:場合によっては、使用機能これをする。

ベストアンサー1

わかりました。ケイパビリティ システムとケイパビリティを指摘してくれた方々に感謝しますCAP_NET_BIND_SERVICE。最近のカーネルをお持ちであれば、これを使用して非ルートとしてサービスを開始し、低いポートをバインドすることは確かに可能です。簡単に答えると、次のようになります。

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

そして、programその後いつでも実行されると、そのCAP_NET_BIND_SERVICE機能を持つようになります。setcapは Debian パッケージに含まれていますlibcap2-bin

ここで注意点を述べます。

  1. 少なくとも2.6.24カーネルが必要です
  2. ファイルがスクリプトの場合、これは機能しません。(#!つまり、インタープリタを起動する行を使用します) この場合、私の理解する限りでは、インタープリタ実行ファイル自体に機能を適用する必要がありますが、これはもちろん、そのインタープリタを使用するすべてのプログラムに機能があるため、セキュリティ上の悪夢です。この問題を回避するためのクリーンで簡単な方法を見つけることができませんでした。
  3. LD_LIBRARY_PATHLinux は、やprogramなどの昇格された権限を持つ を無効にします。そのため、 が独自の を使用している場合は、ポート転送などの別のオプションを検討する必要があるかもしれません。setcapsuidprogram.../lib/

リソース:

注記:RHELはバージョン6で初めてこれを追加しました

おすすめ記事