如何验证用户是否是java应用程序的root用户?
由于
答案 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;
}
}