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