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

yduiuuwa  于 2023-11-17  发布在  Linux
关注(0)|答案(8)|浏览(146)

如何验证用户是否是Java应用程序中的root用户?
谢谢

63lcw9qa

63lcw9qa1#

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

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

sg24os4d

sg24os4d2#

简单。只要用

System.getProperty("user.name")

字符串

iih3973s

iih3973s3#

运行一个本地命令?像whoami

7qhs6swi

7qhs6swi4#

你可以叫

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

字符串
方法。然后你可以处理 p 的标准输出来读取命令的输出。

bbuxkriu

bbuxkriu6#

最好的办法就是逃跑

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

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

axzmvihb

axzmvihb7#

String userName = System.getProperty("user.name");
Process p = Runtime.getRuntime().exec("groups " + userName);
String output = read(p.getInputStream());
String error = read(p.getErrorStream());

字符串
下面是一个read函数:

public static String read(InputStream input) throws IOException {
    try (BufferedReader buffer = new BufferedReader(new InputStreamReader(input))) {
        return buffer.lines().collect(Collectors.joining("\n"));
    }
}


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

utugiqy6

utugiqy68#

下面是一个带有工作方法的完整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;
 }
}

字符串

相关问题