いくつかのシミュレーションを実行するLinuxサーバー(Ubuntu 16.04)があります。従業員にこのサーバーへのアクセスを許可して、従業員が自分のコードをテストできるようにしたいのですが(個人用コンピューターからリモートでアクセスする)、サーバーからシステムにファイルをダウンロードできないようにしたいと思います。
ファイルはかなり大きいので、(数GB)ファイルの内容全体を手動でコピーしてコンピュータに貼り付けるのは心配しません。
では、SCP/WinSCP アクセスを許可せず、SSH アクセスを許可するにはどうすればよいですか。
答え1
彼らが本当にデータを移動したい場合は、そうすることができるかもしれません。scp
または実行を防ぐことができますが、sftp
ファイルを転送する他の方法はまだたくさんあります。
まず、本当に簡単なファイル転送プロトコルは次のとおりです。
ssh user@hostname 'cat /some/remote/file' > /some/local/path
cat
ほとんどすべてのプログラムに置き換えることができます。一体cp somefile /dev/stdout
動作するようです。
コメントには、特定の時間以降または特定の量のデータを送信した後にセッションを切断する提案があります。表面的には、これはユーザーが作成できる接続数を制限しても機能するようです。 1日10個の接続が許可され、それぞれ1MBに制限され、移動は10MBに制限されます。一般的な用途に必要なデータ転送量がそうでないシナリオよりもはるかに少ない場合は、このようなことを行うことが可能かもしれません。
しかし、ファイルを別の場所に送信するとどうなりますか? 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を再追加できます。