我正在编写一个调用其他程序的Java程序,其中一些程序需要作为root运行。
我想把整个JAR作为root运行,但这听起来像一个安全风险,我宁愿只运行一些程序作为root。
目前,我创建一个ProcessBuilder,并使用它的getStandardOutput方法在命令sudo -S pacman <...>上实例化一个Writer。(-S的意思是“从标准输入读取”)。
然后,我使用该读取器插入密码并刷新它,到目前为止还不错。
但是,当pacman期望输入(例如,当询问一个交互式的是/否问题时),并且我再次尝试写到Writer时,它会在IOException中失败,因为流是关闭的。
我如何才能获得一个能将字符实际发送到pacman和其他以root用户身份运行的程序的作家?
这个程序只能在UNIX (Arch、Debian、MacOS和Window的WSL)上运行,所以UNIX特定的解决方案是可以的,如果可能的话,我宁愿不使用JNI,因为它需要多次编译,但如果这是唯一的解决方案,也可以。我也可以用其他的东西代替sudo,只要它仍然以root的形式运行。
发布于 2020-09-26 16:09:43
如果这不是一个长期存在的服务,您可以运行sudo -v让sudo缓存凭证,然后在您的sudo程序中调用sudo而不需要输入密码。如果您以如下方式调用Java程序,这将是最有效的:
#!/bin/bash
sudo -v
java -jar ...https://stackoverflow.com/questions/64077708
复制相似问题