【问题标题】:how to pass the user and pwd via the runtime.exec() in java如何通过 java 中的 runtime.exec() 传递用户和密码
【发布时间】:2018-08-29 13:59:50
【问题描述】:

我正在尝试使用 java 1.8 和 OS Solaris 11 运行一个简单的命令。 我的程序在特定用户下运行,命令必须在 SuperUser 下运行

命令如下:

Runtime.getRuntime().exec("su - root -c 'pargs -l 1111'");

如果我运行命令,它应该可以正常工作并要求输入密码,然后我输入密码,我会得到结果。

问题是我在 java 中运行它 这是我的代码

Process proc = Runtime.getRuntime().exec("su - root -c 'pargs -l 1111'");
PrintWriter out = new PrintWriter(new OutputStreamWriter(proc.getOutputStream()));
out.println(password);
out.flush();
int exitCode= proc.waitFor();
System.out.println(exitCode);//exitCode = 1
BufferedReader pArgs= new BufferedReader( new InputStreamReader(proc.getInputStream()));
if((line=pArgs.readLine()) != null)
{
    //do something
}
else
{
    //something not working = ERROR 
}

我认为该行等于 null,因为密码集中的某些内容不正确 bat 我不确定

我做错了什么?

【问题讨论】:

  • Java 具有检查进程的能力:Optional<String[]> processArgs = ProcessHandle.of(1111).info().arguments(); 即使没有 root 权限,您也可以执行此操作,具体取决于进程的所有者。

标签: java sh solaris runtime.exec


【解决方案1】:

我可能会提出完全不同的方法来解决这个问题。与其尝试运行动态要求输入密码的 shell 命令,不如让命令不需要密码。

如果它只是要求输入密码,因为它需要 root,您可以在 root 下的 sudoers 文件中添加一行,表示您的程序用户可以像 root 一样执行该特定命令:https://www.linux.com/blog/configuring-linux-sudoers-file

这也会更安全,因为您不会让密码在代码中浮动。

【讨论】:

【解决方案2】:

如何通过java中的runtime.exec()传递用户和密码

Solaris下不能用su

Solaris su 使用the getpass() function 从用户那里获取必要的密码。

来自the Solaris getpass() man page

说明

getpass() 函数打开进程的控制终端,将空终止字符串 prompt 写入该设备,禁用回显,读取直到下一个换行符或 EOF 的字符串,恢复终端状态并关闭终点站。

...

错误

如果出现以下情况,getpass()getpassphrase() 函数可能会失败:

...

ENXIO

进程没有控制终端。

su 要么从控制终端获取密码,要么失败。

这是一个深思熟虑的设计决定,几乎不可能执行不安全的操作,例如自动输入密码。

【讨论】:

  • 那我该怎么办?我需要从在默认用户下运行的进程中找到在 root 下运行的进程我该怎么做?
【解决方案3】:

非常感谢您的所有回答。但我的解决方案有点不同。 决定使用可以从两个进程写入和读取的外部文件。 整个目标是再次握手,以防在根目录下运行的进程失败(看门狗)。

所以现在不需要使用命令了

Runtime.getRuntime().exec("su - root -c 'pargs -l 1111'");

当根进程开始运行时,它会将拍号记录到文件中。 如果用户(每X次读取文件)的进程发现签名发生了变化,他会再次握手。

【讨论】:

    猜你喜欢
    • 2013-06-23
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 2011-02-16
    • 2018-01-05
    • 2019-12-17
    相关资源
    最近更新 更多