执行需要来自Web应用程序的sudo的shell脚本

时间:2012-07-05 01:39:55

标签: java shell sudo elevated-privileges

鉴于Web应用程序没有su权限,我想执行一个需要sudo的shell脚本。我还想避免让用户输入密码。我有什么选择?这基本上就是我想要做的。

Wicket申请(更改IP的表格)

@Override
protected void onSubmit() {
    System.out.println("Submitted");            
    try {
        Shell.updateIp("eth0", "192.168.217.129");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Shell.java

public static void updateIp(String ethernetInterface, String ip) throws IOException {
    ProcessBuilder builder = new ProcessBuilder("/home/keeboi/Desktop/iptool.sh", ethernetInterface, ip);
    Process child = builder.start();
    Network.readOutput(child);
    child.destroy();
}

iptool.sh执行一个可运行的jar。

iptool.sh

#!/bin/sh
sudo java -jar changeip.jar $1 $2

我得到了:

sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: 3 incorrect password attempts

同样,我想强调的是,网络应用程序没有获得任何su权限,我想避免向用户询问密码。

修改

我已尝试将keeboi ALL = NOPASSWD: /home/keeboi/Desktop/iptool.sh添加到/etc/sudoers,但仍需要密码。

更新

也添加了keeboi ALL = NOPASSWD: /home/keeboi/Desktop/changeip.jar,没有骰子。

1 个答案:

答案 0 :(得分:4)

只需在/ etc / sudoers中添加NOPASSWD

user     ALL = NOPASSWD: /home/keeboi/Desktop/iptool.sh

切换密码检查。