ほとんどのUNIXシステムでは、 "su - [username] -c 'echo $PATH'
"を使用して他のユーザーのPATH環境変数を取得できます。Javaで他のユーザーのPATH環境変数を読み取る方法
Javaでこれを行うことはできますか?
私はSystem.getenv("PATH")
が個々のユーザーではないシステム環境情報しか提供できないことを認識しています。 ProcessBuilder
を使用するのではなく、この情報を取得する簡単な方法はありますか?
ほとんどのUNIXシステムでは、 "su - [username] -c 'echo $PATH'
"を使用して他のユーザーのPATH環境変数を取得できます。Javaで他のユーザーのPATH環境変数を読み取る方法
Javaでこれを行うことはできますか?
私はSystem.getenv("PATH")
が個々のユーザーではないシステム環境情報しか提供できないことを認識しています。 ProcessBuilder
を使用するのではなく、この情報を取得する簡単な方法はありますか?
ProcessBuilder
などを使用してのみ可能です。 Javaは一般的に(比較的)移植できないものをサポートしていません。
ここで実際に実行されるタスクには、権限エスカレーションが必要です。 "su"コマンドには、他のユーザーのIDに変更するための "root"特権が必要です。他の方法であれば、でもには "root"特権が必要です...あなたがやっていることは、別のユーザーが所有するファイルを読むことだからです。 Javaアプリケーションを「ルート」として実行すると、危険なものになります。
要するに、ProcessBuilder経由で "su - -c echo $ PATH"を実行する場合、JVMは "root"特権で実行する必要があります。危険な!
注意:別のパスのPATHを見つけるためのメカニズムが、大規模なセキュリティホールにならないように注意してください。
これに対処する方法の1つは、非常に固有の機密性の高いタスクを実行するために、セキュリティで保護されていないアプリケーション(Javaではなく)を作成することです。それらを監査する。その後、 "setuid root"にするにはchown
とchmod
を使います。特定のグループに対する実行権を制限し、そのグループ内でJavaアプリケーションを実行します。
しかし、良いアイデアは、まずJavaからこの種のことをしなくても済むようにすることです。
1 - 実際のリスクはあらゆる種類のものによって異なります。 Javaアプリケーションはマシンの外部に公開されていますか?マシンへのアクセスを制限できますか?機密情報やサービスはマシンにありますか?常に最新バージョン/ Javaのリリースを実行していますか?あなたのJavaアプリケーションが使用するすべてのフレームワーク、ライブラリなどを信頼できますか?彼らは監査を受けていますか?