Linux サーバーへの SSH を許可し、Linux サーバーからのファイル転送を許可しないようにするにはどうすればよいですか?

Linux サーバーへの SSH を許可し、Linux サーバーからのファイル転送を許可しないようにするにはどうすればよいですか?

私は、シミュレーションを実行する Linux サーバー (Ubuntu 16.04) を持っています。従業員にこのサーバーへのアクセス権を与えて、コードをテストできるようにしたいのですが (従業員は自分のパソコンからリモートでアクセスします)、サーバーから自分のシステムにファイルをダウンロードすることは許可しません。

ファイルはかなり大きい(数 GB)ので、ファイルの内容全体を手動でコンピューターにコピーして貼り付けることについては心配していません。

では、SSH アクセスを許可しながら、SCP/WinSCP アクセスを禁止するにはどうすればよいでしょうか?

答え1

本当にデータを移動したい場合、それができるかどうかはわかりません。 または の実行を阻止できるかもしれませんscpsftp、それでもファイルを転送する方法は他にもたくさんあります。

まず、非常にシンプルなファイル転送プロトコルは次のとおりです。

ssh user@hostname 'cat /some/remote/file' > /some/local/path

そして、ほとんどどんなプログラムでも置き換えることができcat、実際にcp somefile /dev/stdout動作するようです。

コメントには、特定の時間または特定の量のデータが転送された後にセッションを切断するという提案がありました。ユーザーが確立できる接続の数も制限すれば、表面的には機能するようです。1 日 10 の接続を許可し、接続あたり 1 MB の制限を付けると、移動できるのは 10 MB だけに制限されます。通常の使用目的が、望ましくないシナリオよりもはるかに少ないデータ転送を必要とする場合は、おそらくそのような方法が機能するでしょう。

しかし、ファイルを別の場所に送るだけだったらどうなるでしょうか? SSH/FTP/その他のサーバーを別の場所にセットアップして、それを介してファイルを送信するのは簡単なはずです。または、HTTP(S) 経由では、少なくともやなどcurlのオプションがあり、サーバー側のセットアップは難しくないはずです。既存のツールを削除すると、システムで実行されるプログラムがデータを処理している間/代わりにデータを送信してしまうとどうなるでしょうか?--data @filename--upload-file


必要なのは、何らかのサンドボックスを使用して、データにアクセスできるプログラムが実行できる操作を制限することです。

コードをアップロードして結果をダウンロードするためのインターフェース以外は外部にアクセスできない仮想マシンで実行するようにし、有効なアップロードと有効な結果として受け入れられるものを適切に制御します。または、次のようなものを使用します。seccompコードが実行できることを制限します。

答え2

/etc/ssh/sshd_configを以下のように編集します

ForceCommand           /bin/sh
PermitOpen             0.0.0.0
AllowTcpForwarding     no
PermitTunnel           no
# Subsystem sftp       /usr/lib/openssh/sftp-server
PermitUserEnvironment  no

サーバーから scp を削除し、アカウントへの sudo アクセスも削除します。必要に応じて scp を再度追加できます。

ブラッドとマイクの回答https://serverfault.com/questions/28858/ssh アクセスを許可しながら scp を阻止することは可能ですか?

関連情報