Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Kevin D.Ответов: 1

Учитывая, что веб-приложение не имеет привилегий 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, без кубиков.

shellsudojavaelevated-privileges

Ответы

Ответ 1 · рейтинг 4 · Igor Chubin

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы