检查用户是否是java应用程序中的root用户

时间:2011-02-25 12:51:53

标签: java linux root

如何验证用户是否是java应用程序的root用户?

由于

8 个答案:

答案 0 :(得分:8)

Process p = Runtime.getRuntime().exec("id -u")

请记住,系统上的“root”用户可能不会被称为root(尽管很少更改它),并且也可以将其别名为另一个用户名。如果当前用户是root用户,则输出将为0

答案 1 :(得分:6)

易。只需使用

System.getProperty("user.name")

答案 2 :(得分:2)

运行本机命令? 像whoami

答案 3 :(得分:2)

你可以打电话

  Process p = Runtime.getRuntime.exec("whoami")

方法。然后你可以处理 p 的stdout来读取命令的输出。

答案 4 :(得分:1)

答案 5 :(得分:0)

最好的方法是运行

 Process p = Runtime.getRuntime.exec("groups `whoaim`"); 

并尝试解析字符串以获取组调用root。您的JVM进程可以由用户运行,而不是调用root,但是主持人,但是该用户可以在root组中,并且您具有root权限。

答案 6 :(得分:0)

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"));
    }
}

只是“另一个”修改后的解决方案。

答案 7 :(得分:0)

这是一个完整的Utility类,有一个工作方法

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringWriter;


public interface U {

public static final Logger l = LogManager.getLogger(U.class.getName());

 public static boolean isRoot() {
    try {
        Process p = Runtime.getRuntime().exec("id -u");
        StringWriter sw = new StringWriter();
        InputStreamReader isw = new InputStreamReader(p.getInputStream());
        isw.transferTo(sw);
        String output = sw.toString();
        l.trace("id -u output = [{}]", output);
        return output.startsWith("0");
    } catch (IOException e) {
        l.error("", e);
    }
    return false;
 }
}