微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过sudo的标准输入

如何解决通过sudo的标准输入

我正在编写一个调用其他程序的Java程序,其中一些程序需要以root用户身份运行。

我考虑过以root用户身份运行整个JAR,但这听起来像是存在安全风险,我宁愿只以root用户身份运行某些程序。

当前,我在命令sudo -S pacman <...>上创建一个ProcessBuilder并使用其getStandardOutput方法实例化Writer。 (-S表示“从标准输入中读取”。)

然后,我使用该读取器注入密码并刷新它,到目前为止一切正常。

但是,当pacman期望输入时(例如,在询问交互式“是/否”问题时),并且我尝试再次写入Writer时,由于流关闭,它失败并出现IOException。

我如何获得可以实际将字符发送到pacman且其他程序以root身份运行的Writer?

该程序只能在UNIX(Arch Linux,Debian,MacOS以及Window的WSL)上运行,因此特定于UNIX的解决方案很好,如果可能的话,我宁愿不使用JNI,因为它需要多次编译,但是如果那是唯一的解决方案,那很好。只要还可以以root用户身份运行,我也可以用其他方式替换sudo。

解决方法

如果这不是一项长期服务,则可以运行sudo -v以使sudo缓存凭据,然后在Java程序中调用sudo,而无需输入密码。如果您通过以下方式调用Java程序,则效果最佳:

#!/bin/bash

sudo -v
java -jar ...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。