GNU/Linux >> Linux の 問題 >  >> Linux

非ルート プロセスを Linux の特権ポートにバインドする方法はありますか?

さて、機能システムと CAP_NET_BIND_SERVICE を指摘してくれた人々に感謝します 容量。最近のカーネルを使用している場合、これを使用してサービスを非ルートとして開始し、低ポートをバインドすることが実際に可能です。短い答えは、あなたがそうするということです:

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

そしていつでも program その後は CAP_NET_BIND_SERVICE が実行されます 容量。 setcap debian パッケージ libcap2-bin にあります .

ここで注意事項:

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

    • capabilities(7) のマニュアル ページ。本番環境で機能を使用する場合は、これを長く一生懸命読んでください。 exec() 呼び出し間で機能がどのように継承されるかについては、ここで詳しく説明する非常に注意が必要な詳細があります。
    • setcap のマニュアル ページ
    • 「GNU/Linux で root なしで 1024 未満のポートをバインドする」:setcap を最初に指摘したドキュメント .

    注:RHEL はこれを v6 で初めて追加しました。


    ポートリダイレクトを行うことができます。これは、Linux ボックスで実行されている Silverlight ポリシー サーバーに対して私が行っていることです

    iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 943 -j REDIRECT --to-port 1300
    

    標準的な方法は、それらを「setuid」にして root として起動し、ポートにバインドするとすぐにその root 権限を破棄しますが、ポートへの接続を受け入れ始める前です。 Apache と INN のソース コードで、その良い例を見ることができます。 Lighttpd も良い例だと言われています。

    もう 1 つの例は Postfix です。これは、パイプを介して通信する複数のデーモンを使用し、そのうちの 1 つまたは 2 つ (バイトの受け入れまたは送信以外はほとんど何もしません) のみが root として実行され、残りはより低い特権で実行されます。


    Linux
    1. Linux で現在の rpath を検査する方法はありますか?

    2. Linux パイプのパフォーマンスを向上させる方法はありますか?

    3. Linux 上の JTS TestBuilder に代わるものはありますか?

    1. システム管理者向けの30のLinuxプロセス演習

    2. Linux で細かいことごとに「sudo」を書かなくて済むようにする方法はありますか?

    3. Linux でブロック デバイスのキャッシュ ヒット/ミス率を取得する方法はありますか?

    1. Linux –エントロピー品質を測定するためのツール?

    2. Linux 用の C++ gdb GUI はありますか?

    3. Linux 用の DirectX API がないのはなぜですか?