web-dev-qa-db-ja.com

セキュリティリスクなしにローカルネットのシェルを誰かに与えるにはどうすればよいですか?

家のローカルネットワークにサーバーAがあります。誰かが私のサーバーから彼のサーバーにリバースssh接続を使用してそのサーバーにアクセスできるようにしたいと思います。私は彼が私のローカルネットの中に入ることができて、私が彼に与えたサーバー以外のどの他のコンピューターにもログインできるようにしたくありません。もちろん、私は彼がルートキットをインストールしたり、システムとサーバーを台無しにしたりできないようにしたくないのです。 pythonおよびTwitter APIを使用してそのディレクトリ内で作業するための空のホームディレクトリを彼に与え、vimを使用して、彼自身のプロセスとそのリソースを監視し、彼を殺すことができるようにすることは可能ですか?独自のプロセスですが、そのディレクトリの外に移動したり、物をインストールしたり、ローカルネットワークを発見したりすることはできませんか?また、pamを使用してすべてのアクティビティを記録することが信頼できるかどうかを知りたいです。

ユーザーに対する私の唯一の要件は、vim、インタラクティブpython3セッションを使用できること(ユーザーは少数の安全なライブラリのみを必要とする)、python3コードを実行すること(ユーザーは少数の安全なライブラリのみを必要とする)、およびすべてを使用できることです。サーバーの帯域幅(Twitter Webサイトのみ)、CPU(AALコア)、およびメモリリソース。

3

...私のローカルネットで誰かにセキュリティリスクのないシェルを与えますか?

しない

このユーザーのシェルアクセスを制限しようとする代わりに、完全に異なるアプローチをお勧めします。

  • 2台目のルーターを購入する
  • 新しいルーターのインターネットを既存のルーターのregポートに接続します
  • 既存のルーターから新しいルーターへのポート転送ポート22
  • 新しいルーターからサーバーへのポート転送ポート22
  • サーバー上のこの信頼されていないユーザーにSSHアクセスをセットアップする
  • 新しいルーター経由でサーバーをTwitter /開発者/外部IPに制限する

この方法は、リバースシェルよりもはるかに安全/信頼性が高くなります。この方法により、開発者はネットワーク上の何にもアクセスせずに外部接続を使用できます(ただし、新しいルーターを利用できず、監視することができます)。彼がそれをハッキングしようとしているのではないことを確認するためのトラフィック。

そうは言っても、このユーザーから保護したい既存のものがサーバーにある場合は、サーバーのハードドライブの完全なクローンを作成してから、アクセスを許可してから、ワイプしてから復元します。完了したらバックアップします。

物理的アクセスはルートアクセスであり、技術的にこの開発者に物理的アクセスを与えていません...シェルアクセスは同じものにかなり近いです。ハッカーが特権のないユーザーへのシェルアクセスを取得した場合...軌道から核攻撃するという一般的な慣行...確認する唯一の方法。

5

ユーザーがセッション中に行った操作を確認したいだけの場合は、Teleport( gravitational/teleport on github を参照)と呼ばれるオープンソースプロジェクトを使用して、ログに記録されるSSHアクセスを付与できます。監査イベントと、シェルセッション中に行われたすべての両方を記録します。

最新のテレポートリリースには、「レコーディングプロキシ」モードがあり、エンドポイントノードにルートを指定した場合でも、セッション中に発生するすべてがプロキシによって記録されます。

2

それは良い考えとは全然思わない。これを行う適切な方法は、通常、開発マシン(vmにすることもできます)と、コードの送信先となるリポジトリを用意することです。このシナリオでは、環境にアクセスする必要はありません。開発用ウェブサーバーは、RAM=のギグと仮想コアで実行できます。そのため、コストは一切かかりません。

それが理由で不可能である場合、いくつかのオプションがあります。新しいVMをセットアップして、そのVMを別のVLANに配置できます。または、それをそのVLANに残し、プライベートVLANを使用して、ホストがゲートウェイ以外のLAN上の他のマシンと通信しないようにすることができます。コンテナーを使用してアプリを分離することもできます。

2
davidb

上記のすべてが可能です。私はお勧めします-

  • 最小限の権限を持つユーザーを作成します。これを完全に説明することは、このスタック交換の範囲外です。助けが必要な場合は、サーバー障害などを探してください。これは、他の方法ではすべてのユーザーが読み取り/書き込み/実行可能なファイルへのアクセスを制限する場合に難しくなります。
  • 制限付きシェルを作成- ここを参照
  • PAMがすべてのログを記録していることを確認します "必要なセッションpam_tty_audit.so enable = *"
  • プロセス「top -U [ユーザー名]」または「ps -u [ユーザー名]」を表示します。

ただし、ここには1つの大きな問題があります。 Python。ユーザーがpythonを使用できる場合、それを介して実行可能ファイルを呼び出すことができます。 Sandboxed PyPy のようなものを使用して、緩和策を試みることができます。

これを言っても、システムファイルへの読み取りアクセスのみが可能であり、OSユーザー権限に従って制限されているはずです。通常の「システムが完全に更新されていて、ユーザーが書き込み可能な特権ユーザーとして実行されるスクリプト/実行可能ファイルがないことを確認する」以外に、リスクは最小限に抑える必要があります。

2
Hector