RFC:SHELL変数、セキュリティ、およびその他の問題を介してログインしたときにssh -XでJavaアプリケーションを実行しますか?

RFC:SHELL変数、セキュリティ、およびその他の問題を介してログインしたときにssh -XでJavaアプリケーションを実行しますか?

私はJavaアプリケーション(アプレットではない)を持っており、以下を含むスクリプトを介してそれを実行します。

#!/bin/sh
/usr/bin/java -classpath /A/B.jar:/X/Y.jar MyApp.Go -p 1 -p 2 -p 3

アプリケーションは、初期化中にアプリケーションとともにローカルディスクに存在する多数の補助ファイルを読み取る必要があります。これらのファイルのサイズは数ギガバイトです。アプリケーションのGUIは簡単です。メインウィンドウ(マップ)をクリックするとスクリプトが実行されますjava.util.concurrent.ExecutorService。スクリプトはいくつかの処理を実行し、結果をファイルに出力します。その後、アプリケーションはそのコンテンツを読み取り、新しいウィンドウにレンダリングします。唯一のボタンは終了です。他のユーザー入力やファイルセレクターはありません。

アプリケーションをリモートで実行できるソリューションが必要です。つまり、アプリケーションとデータは私のLinuxサーバーにあり、クライアントはそれを自分のコンピュータでリモートで実行する必要があります。クライアントにアプリケーションを送信しないようにしたい。デコンパイルを避けるためにコードを隠したかっただけでなく、そのギガバイトのローカルデータもバンドルする必要があるため実用的ではありませんでした。

私はこれをアプレットに変換することを検討しましたが、(ほとんど/すべての)ブラウザが現在これをサポートしていないことを除いて、アプレットはクライアントシステムで実行する必要があります。クライアントのコンピュータを読み取り、転送します。もう実用的ではありません。

また、JavaバイトコードをJavascriptに変換するいくつかのアプリケーションを調査しましたが、HTML5で実行される機能を提供すると主張しました。これはおもちゃのアプリケーションにのみ適用されます。

RFC: 結局、私はSHELLがJavaアプリケーションを実行するスクリプト(上記のスクリプト)を指している私のサーバーに新しいユーザーを作成することを検討しました。X11Forwarding yes私のサーバーにsshdを設定することを許可し、Linuxベースのクライアントに次のことを指示しました。アプリケーションがデスクトップに表示されます。また、WindowsベースのクライアントにXサーバーをインストールし、同様のタスクを実行するように指示しました。これはLinuxでうまくテストされています(Windowsでは試していません)。ssh -X [email protected]

特に、セキュリティに関連する私のアプローチについての意見を探しています。私は顧客にこのような限られたアカウントを提供することを嬉しく思います。しかし、アプリケーションがクラッシュした場合は、クライアントがサーバーのシェルにアクセスできないようにしたいと思います。

答え1

execスクリプトに以下を追加します。

#!/bin/sh
exec /usr/bin/java -classpath /A/B.jar:/X/Y.jar MyApp.Go -p 1 -p 2 -p 3

これにより、Javaプロセスがシェルの子プロセスになるのではなく、スクリプトを実行するシェルプロセスを置き換えることができます。これにより、Javaプロセスが起動するとシェルに戻ることができなくなり、何らかの理由でJavaプロセスが終了するとログインセッションがすぐに終了します。

関連情報