6

システムプロパティに依存するJavaコードがありますsuper.secret.password。アプリを実行するときに、そのプロパティを設定する必要があります。アプリはシェルスクリプトによって起動され、パスワードは最小限の読み取り権限でファイルに保存されます。

私は本当に書きたくありません:

java -Dsuper.secret.password=letmein gov.fortknox.MyApp

なぜなら、マシンに乗って実行したり、パスワードを確認しpsたりできる人なら誰でも。top

それで、コマンドラインで公開せずにシステムプロパティを設定する良い方法はありますか?

私たちが思いついた唯一の一般的な解決策は、ファイルからシステムプロパティを読み取り、JNI呼び出しAPIを使用してJVMを起動する小さなCプログラムを作成することです。言うまでもなく、私たちはこれを行うことに熱心ではありません。

コマンドラインを使用せずに設定する方法がない場合、コマンドラインを詮索好きな目から隠す方法はありますか?Red Hat Enterprise LinuxServer5.5を使用しています。

問題のアプリは実際にはJBossEAP4.3.0であり、システムプロパティを使用し${like.this}てXML構成ファイルに置換構造()を入力しています。JBoss固有のソリューションがあります-SystemPropertiesServiceを使用するかデフォルトでは、デプロイディレクトリのproperties-service.xmlファイルを介して設定されます)、run.shに-Pオプションを渡します。ただし、これが任意のJavaプログラムである可能性がある、より一般的なケースに興味があります。

4

6 に答える 6

3

スタートアップの近くのどこかでファイルを読み込んでSystem.setProperty(). Web アプリケーションの場合は a を使用して、ServletContextListener早期に発生するようにします。簡単な例については、この回答を参照してください。

更新:これは、JBoss が構成ファイルをロードするユースケースにはおそらく十分ではありません。

于 2011-04-19T10:25:50.643 に答える
3

あなたの懸念がsuper.secret.password平文での値を公開することであるが、パーミッションまたは他の手段を使用してその問題をカバーしたために、パスワードの正しい値で誰かがあなたのプログラムを呼び出すことを心配していない場合は、単純に暗号化できると思います起動スクリプトでパスワードを取得し、ラッパー クラスで復号化します。

java -Dsuper.secret.password=BbWvOuliHZVHVwsXudsj14d1iXzo655R gov.fortknox.DecryptWrapper

クレデンシャルがデータ ソース用である場合、 JBossに固有の他のソリューションも指摘する必要があります。SecureIdentityLoginModuleこれは基本的に上記を実行し、PBEUtilsとともに使用するとキーストア ソリューションを提供しますSecureIdentityLoginModuleEncryptingDataSourcePasswordsを参照してください。

最後に、ファイルを使用するというPeter Laweryの提案も有効です。

于 2011-04-19T10:54:05.390 に答える
1

「cryptomainia」は、まさにこの問題を解決するために書かれました。main() 引数を復号化します。https://github.com/birchb1024/cryptomainia

于 2014-02-25T05:37:40.540 に答える
0

JAVA_TOOL_OPTIONS 環境変数を使用して、そこにプロパティを設定できます。ただし、スクリプト ファイルには引き続き表示されます。

于 2011-04-19T10:22:35.597 に答える
0

攻撃者があなたのマシンに物理的にアクセスできる場合、攻撃者がマシンを所有できない本当の理由はありません。カジュアルな目を避けるための単純な rot13 で十分です。

攻撃者が何らかの権限 (たとえば、top の実行など) を持っているが、物理的なアクセス権を持っていない場合、特別なユーザー アカウント (たとえば、web-server-user) でプログラムを実行できます。パスワードを含むファイルへの読み取りアクセス。次に、そのユーザー アカウントを使用してアプリを起動し、ファイル パスを渡します。

これを行うには、OS のアクセス権限制限に依存します。これは、自分でロールできるものよりもはるかに適切に実装される可能性があります。

于 2011-04-19T11:29:48.040 に答える