答えて
nativeコマンドを実行しますか? like whoami
これを確認してください:get login username in java
あなたは
Process p = Runtime.getRuntime.exec("whoami")
メソッドを呼び出すことができます。その後、のstdoutを処理して、コマンドの出力を読み取ることができます。
あなたが好きなものを 'whoami'が返すように、パスを変更することができます。 '/ usr/bin/whoami'が良い選択かもしれません。 –
'Runtime.getRuntime.exec'の引数はプログラム名かシェルコマンドですか?なぜなら、それがシェルコマンドであれば、コマンドラインからJavaアプリケーションを実行しているユーザーは、環境変数を微調整することによって/ usr/bin/whoamiが実際に意味するものを変更する可能性があるからです。 IE:$ IFSにスラッシュを含めるように設定し、カレントディレクトリを$ PATHに追加し、そこに 'usr'という名前のプログラムを置きます。 – cHao
いずれにせよ、 'whoami'の出力に依存することは、セキュリティ上の目的のためには本当に適切なものではありません。これは、インストール担当者(たとえば、何かをインストールするのではなく、適切なエラーメッセージを表示できるようにする)や、ルート特権なしで破損する可能性のある他のプログラムの利便性チェックとしては良いでしょう。しかし、それはいくつかの方法で覆されて、何かへのアクセスを許可することを悪い考えにすることができます。 – cHao
最良の方法は、
Process p = Runtime.getRuntime.exec("groups `whoaim`");
を実行し、グループコールのルートを取得するために文字列を解析しようとすることです。あなたのJVMプロセスはrootを呼び出さない、つまり司会者によって実行される可能性がありますが、このユーザーはルートグループに属し、root権限を持っている可能性があります。
私が見たほとんどすべてのLinuxシステムでは、実際のrootユーザーだけがroot権限を持っています。ルートグループは通常、実際のアクセスを考慮しませんが、*潜在的なアクセスを考慮します。すなわち、誰かが* root特権を得るためのコマンドを実行することはできますが、自動的に*持っているわけではありません。 – cHao
Process p = Runtime.getRuntime().exec("id -u")
は(それはそれを変更することは稀だが)システムの「ルート」ユーザーがroot
呼び出されないことに注意してください、そして、それは別のユーザー名にそれをエイリアスすることも可能です。現在のユーザーがrootの場合、出力は0
になります。
rootのユーザ名を変更することは可能ですが、 'root'という名前がハードコードされているものが壊れてしまいます。そのようなものの中で注目すべきは 'su'です。ユーザー名を指定せずに実行すると' su root'と同じで、ユーザー "root"が存在しないという苦情があります。私はこれを一度試し、すぐにユーザー名を元に戻しました。 :) – cHao
簡単。ただ、
System.getProperty("user.name")
これはセキュリティで保護されていない可能性があります[別のSOの回答](http:// stackoverflow。com/a/2290392/2032064) – Mifeet
@Mifeet私は同意します。これはだまされる可能性があります。しかし、開発者が意図したユーザーと意図したソフトウェア環境を知っている場合、これは便利な解決策になります。 –
String userName = System.getProperty("user.name");
Process p = Runtime.getRuntime().exec("groups " + userName);
String output = read(p.getInputStream());
String error = read(p.getErrorStream());
を使用し、ここで、読み取り機能である:
public static String read(InputStream input) throws IOException {
try (BufferedReader buffer = new BufferedReader(new InputStreamReader(input))) {
return buffer.lines().collect(Collectors.joining("\n"));
}
}
ただ、 "他" に変更ソリューション。
- 1. 誰かがユーザーであるかどうかをチェックする方法は?
- 2. 画像に透明性があるかどうかのJavaチェック
- 3. 私のアプリケーションがデフォルトのランチャーであるかどうかをチェックする方法
- 4. オブジェクトがあるかどうかをチェック
- 5. JSONオブジェクトがJavaで空であるかどうかをチェックする方法は?
- 6. リテラルがJavaでlong型であるかどうかをチェックする方法は?
- 7. Java - 文字列のArrayListがアルファベット順であるかどうかをチェック
- 8. タグページがあるかどうかWordpressチェック
- 9. Javaクラスに特定のメソッドがあるかどうかをチェックする方法?
- 10. 変数が空であるかどうかをチェックする(複数のチェック!)
- 11. ユーザーがログインしているかどうかをチェック
- 12. ユーザーがページにいるかどうかをチェック
- 13. ユーザーが現在スクロールしているかどうかをチェック
- 14. Magento PHPがユーザーにログインしているかどうかをチェック
- 15. アイテムが汎用クラスのインスタンスであるかどうかをチェック
- 16. EditTextが空であるかどうかをチェックする
- 17. 値がRであるかどうかをチェックする
- 18. UITextFieldsが空であるかどうかをチェックする方法?
- 19. java.lang.reflect.TypeがEnumであるかどうかをチェックする方法
- 20. 数字が - 、+、またはxであるかどうかをチェック
- 21. 変数が空であるかどうかをチェック
- 22. TypeがTypeBuilderであるかどうかをチェック
- 23. 複素数がNaNであるかどうかをチェック
- 24. イベントターゲットがハイパーリンクであるかどうかをチェック
- 25. オブジェクトがnullであるかどうかをチェック
- 26. マングース:オブジェクトがマングースオブジェクトであるかどうかをチェック
- 27. rails 3.0.3ブール値が真であるかどうかをチェック
- 28. オブジェクトがNSArrayまたはNSDictionaryであるかどうかをチェック
- 29. プロセスが進行中であるかどうかをチェック
- 30. エンティティ(プロパティとコレクション)がダーティであるかどうかのチェック
'-Duser.name = root'に気をつけて、あなたが望むものに設定することができます。 –
あなたは 'user.name'をチェックするか、' whoami'の出力を解析するかに関わらず、ユーザ名を任意の数に変更することができます。あなたがアクセス制御のためにこれに頼っているのであれば、あなたはちょっとばかりです。 – cHao