Sudo в Java Runtime.exec и gksu для размонтирования

1

Я пишу приложение Java, в котором (среди прочего) я монтирую внешнее устройство, делаю некоторое копирование, а затем размонтирую его.

//I am mounting several devices in created dirs named sdb, sdc... according to the partitions
String[] command = {"gksu", "mount", "/dev/sd" + letter + "1", "mounter/sd" + letter};
Runtime.getRuntime().exec(command);

Это прекрасно работает как в терминале, так и в моей программе.

Чтобы размонтировать быстрее, я подумал об использовании umount -a но gksu umount -a не работает в терминале и, следовательно, не в программе Java. sudo umount -a работает в терминале, но не в приложении. Между тем, я получил его для работы, разобрав устройства 1 на 1, но было бы более чистым, если бы я мог работать с umount -a чтобы работать.

Если вы понимаете, почему gksu не работает с umount или sudo с Runtime.exec(), я бы принял ваше объяснение.

благодаря

  • 0
    Какое сообщение об ошибке вы получаете в команде sudo per Runtime.exec() ?
  • 0
    Ничего не печатается в консоли. Вывод команды exec () говорит об ошибке?
Показать ещё 2 комментария
Теги:
sudo
runtime.exec
gksudo
umount

1 ответ

1
Лучший ответ

Я чувствую, что проблема заключается в том, что sudo не спрашивает у меня пароль, как это делает gksu. Но я не знаю, как дать ему пароль.

Это очень вероятно. Здесь есть пара различных возможных ситуаций, и каждый из них, по моему мнению, имеет собственное решение:

  1. У пользователя, запускающего программу (в случае настольного приложения), уже есть привилегии для запуска необходимых команд. - Попросите пользователя ввести свой пароль и передать его в sudo через stdin, используя флаг -s. Посмотрите страницу руководства sudo для получения дополнительной информации. Это просто и гарантирует, что ваше приложение не имеет большего доступа, чем пользователь, который его запускает.

  2. Если ваше приложение должно запускаться с разными правами, чем у пользователя, или если оно выполняется на сервере, приложение должно запускаться в качестве собственного пользователя системы. Затем вы можете использовать visudo, чтобы дать пользователю этой системы возможность запускать ТОЛЬКО команды, которые вам нужны, не требуя пароля. Просто будьте очень осторожны в редактировании файла sudoers. Я рекомендую добавить его как отдельный файл и просто связать его с реальными sudoers, чтобы его было легче отменить позже.

  • 0
    Sudo-s работал, спасибо большое! :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню