Выполнение сценария оболочки, для которого требуется sudo из веб-приложения

Учитывая, что веб-приложение не имеет привилегий su, я хотел бы выполнить сценарий оболочки, для которого требуется sudo. Я также хотел бы, чтобы пользователь не вводил пароль. Каковы мои варианты? Это в основном то, что я пытаюсь сделать.

Wicket Application (Форма для смены 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 запускает исполняемую банку.

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, без кубиков.


person Kevin D.    schedule 05.07.2012    source источник


Ответы (1)


просто добавьте NOPASSWD в /etc/sudoers:

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

Это отключает проверку пароля.

person Igor Chubin    schedule 05.07.2012
comment
Нет, это не важно; но вы допустили еще одну ошибку: вы должны добавить java, а не .jar файл в sudoers. Или лучше создайте сценарий оболочки, содержащий строку java ..., и добавьте сценарий. - person Igor Chubin; 05.07.2012
comment
Однако я хотел бы уточнить: как я решил это, добавив keeboi ALL = NOPASSWD: /usr/bin/java к моему /etc/sudoers. Мой iptool.sh, содержащий команду java, уже добавлен в sudoers, зачем мне добавлять /usr/bin/java? - person Kevin D.; 06.07.2012
comment
@BroKevinD.: Нет, это неправильно. Вам не нужно добавлять /usr/bin/java, достаточно добавить только скрипт, который вы хотите запустить. Когда вы добавили скрипт, вы можете запустить его с помощью sudo. - person Igor Chubin; 09.07.2012
comment
хм... в настоящее время не на моей машине разработки, так что я проверю это завтра. Вероятно, неверный путь к скрипту. - person Kevin D.; 10.07.2012