私は、rootアクセス権を持たない一般ユーザーとして共有Linuxサーバーで作業しています。ローカルTCPポートでリッスンするプログラムを起動し、そのポートに接続できる唯一のユーザーになることはできますか?プログラムが受信するアドレスとポートを制御できます。
たとえば、プログラムはWebサーバーの開発/テストバージョンです。
また、サーバーはポート22(ssh)を介して着信TCP接続のみを許可するため、ラップトップを使用して接続できるようにSSHを介してローカルポートを転送しました。ssh -L 8080:localhost:8000 evaben@dice01
したがって、このような状況を可能にする解決策が良いでしょう。
答え1
ルートのみがファイアウォールを設定できます。
1つの可能性は、コンテナ(Dockerなど)でプログラムを実行することです。これには、root権限が必要ですがrootアクセス権がない場合でも、Dockerコンテナをインスタンス化することができます。
ネットワーク保護を設定する直接的または間接的な方法がない場合は、プログラムのしくみを修正する必要があります。聞くようにしてくださいUnixソケットTCPの代わりに。プログラムが標準ライブラリに動的にリンクされていると仮定すると(ほとんどのプログラムがそうです)、プログラム自体を変更する必要はなく、実行方法のみを変更できます。あなたはこれを行うことができますLD_PRELOAD
、TCPソケットを開く関数の周りにラッパーをロードしてUnixソケットを開きます。ttu
まさにそうします(文書によると、私はそれを使ったことがありません)。
答え2
ローカルTCPポートでリッスンするプログラムを起動できますか?
はい。ルートでない場合は、いわゆる「高いポート」、つまりポート番号> 1024でのみリッスンできます。
そのポートに接続できる唯一のユーザーですか?
いいえ。ルートアクセス権がある場合は、いくつかの操作を実行できますが、ポートからの接続を受け入れるiptables
ときにユーザーベースのアクセス制御の概念はありません。