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

ユーザーが 1024 未満のポートをリッスンできるようにする

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

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

詳細については、このディスカッションをご覧ください。


(これらの方法のいくつかは他の回答で言及されています。いくつかの可能な選択肢を大まかな優先順位で示しています。)

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

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

特権ポートでリッスンを開始した後、サーバーをルートとして起動し、特権を削除できます。できれば、それを自分でコーディングするよりも、代わりにジョブを実行するラッパーからサーバーを起動してください。サーバーが接続ごとに 1 つのインスタンスを開始する場合は、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 を作成するか サーバーを実行しているユーザーが実行できるようにします。または /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

簡単に言えば、これは設計上不可能です。

長い答えは、オープンソースの世界では、多くの人が設計をいじり、別の方法を考え出すというものです。一般に、これは可能であってはならないという慣行が広く受け入れられています。あなたが試みているという事実は、おそらくシステムに別の設計上の欠陥があることを意味し、*nix のベスト プラクティスとセキュリティへの影響を考慮して、システム アーキテクチャ全体を再検討する必要があります。

そうは言っても、ローポートへの非 root アクセスを許可するプログラムの 1 つが authbind です。 selinux と grsecurity はどちらも、このような微調整された認証のためのフレームワークも提供します。

最後に、特定のユーザーに特定のプログラムを root として実行させたい場合、本当に必要なのは、ユーザーが apache などを再起動できるようにすることだけです。 sudo あなたの友達です!


Linux
  1. UbuntuクラウドサーバーにVSFTPDをインストールする方法

  2. DebianクラウドサーバーにVSFTPDをインストールする方法

  3. CentOSにMariaDBサーバーをインストールする

  1. ユーザーがパスワードなしでSudoを使用できるようにしますか?

  2. Linuxサーバーのセキュリティのベストプラクティス

  3. IPTables を使用した FTP の許可

  1. デフォルトのSSHサーバーのポート番号を変更する

  2. CentOSクラウドサーバーにVSFTPDをインストールする方法

  3. Ubuntu 18.04 に PostgreSQL サーバーをインストールする方法