答えて
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. 画像に透明性があるかどうかのJavaチェック
- 2. 誰かがユーザーであるかどうかをチェックする方法は?
- 3. 私のアプリケーションがデフォルトのランチャーであるかどうかをチェックする方法
- 4. ブール値が別のJavaクラスから真であるかどうかをチェック
- 5. オブジェクトがあるかどうかをチェック
- 6. ルートが存在するかどうかをチェック
- 7. リテラルがJavaでlong型であるかどうかをチェックする方法は?
- 8. JSONオブジェクトがJavaで空であるかどうかをチェックする方法は?
- 9. Java - 文字列のArrayListがアルファベット順であるかどうかをチェック
- 10. ユーザーのブラウザが特定のバージョンの中にあるかどうかをチェック
- 11. ユーザーがSQLインスタンスにアクセスできるかどうかをチェック
- 12. タグページがあるかどうかWordpressチェック
- 13. DoubleにJavaの丸めがあるかどうかをチェックする方法?
- 14. Javaクラスに特定のメソッドがあるかどうかをチェックする方法?
- 15. ユーザーがLaravel Passportで有効かどうかチェックする方法
- 16. チルダの '〜'が引数であるかどうかをチェックするBashスクリプトのチェック
- 17. ルートがリソースの一部であるかどうかの検出
- 18. 変数が空であるかどうかをチェックする(複数のチェック!)
- 19. ユーザーが承認を出しているかどうかをチェック
- 20. ユーザーがisAdmin trueを持っているかどうかをチェック
- 21. アイテムが汎用クラスのインスタンスであるかどうかをチェック
- 22. PowerQuery - 列の値が真であるかどうかをチェック
- 23. ユーザーがログインしているかどうかをチェック
- 24. Magento PHPがユーザーにログインしているかどうかをチェック
- 25. ユーザーが現在スクロールしているかどうかをチェック
- 26. ユーザーがページにいるかどうかをチェック
- 27. ユーザーがパスポート - ローカルに存在するかどうかをチェック
- 28. UITextView Objective-Cでテキストフィールドが空であるかどうかをチェック
- 29. フォームビューがフィルタービーフォームであるかどうかをチェックする方法
- 30. ユーザがオンラインであるかどうかをチェックする方法
'-Duser.name = root'に気をつけて、あなたが望むものに設定することができます。 –
あなたは 'user.name'をチェックするか、' whoami'の出力を解析するかに関わらず、ユーザ名を任意の数に変更することができます。あなたがアクセス制御のためにこれに頼っているのであれば、あなたはちょっとばかりです。 – cHao