我可以从java程序更改linux中的用户密码吗?

Ruj*_*uju 3 java linux bash shell ubuntu

我试图通过在输出流中发送密码来从 java 程序更改 linux 中的用户密码,但没有完成。

我的java程序就像

Process process = Runtime.getRuntime().exec("sudo passwd sampleuser");

OutputStream outputStream = process.getOutputStream();

InputStream inputStream = process.getInputStream();

PrintWriter printWriter=new PrintWriter(outputStream);

printWriter.write("123456");

printWriter.write("\n");

printWriter.flush();
Run Code Online (Sandbox Code Playgroud)

我的程序在这里失败并要求输入密码,但我不想要这种情况。

有没有可能从java程序提供密码?你能建议我吗,我将如何成功地做到这一点,或者是否有任何可用的 shell api。

当我尝试使用 shell 脚本并从我的 java 程序调用它时,同样的事情成功完成

Process process = Runtime.getRuntime().exec("bash first.sh");
Run Code Online (Sandbox Code Playgroud)

我的shell脚本是

i="123456"

echo -e $i"\n"$i|sudo -S passwd sampleuser
Run Code Online (Sandbox Code Playgroud)

它成功地更改了用户密码。

Kaz*_*ara 5

它会要求输入密码。看看你的shell脚本。您执行一个要求超级用户权限的命令( sudo)。除非您以超级用户身份运行,否则您的程序将提示输入密码。

分解你的 shell 脚本:

i="123456"

echo -e $i"\n"$i|sudo -S passwd sampleuser
Run Code Online (Sandbox Code Playgroud)

sudo -S 方法 :

-S (stdin) 选项使 sudo 从标准输入而不是终端设备读取密码。密码后必须跟一个换行符。

这就是您的脚本正在做的事情,它passwd为您的sampleuseras设置 password( ) i。并且由于您正在使用-S它正在从标准输入中读取,您已经为其提供了变量i。而您正在以超级用户的身份做这一切!记在脑子里。

现在回顾一下您的 Java 程序并尝试进行相应的更改。运行程序时是否具有超级用户权限?不,你没有。

  • “当你运行你的程序时,你有超级用户权限吗?我想没有。” --> 真希望不是。 (2认同)