Вызывать сценарий оболочки в Java? - PullRequest
3 голосов
/ 19 сентября 2010

можно ли назвать шеллскрипт или шелл-код в java классе?

Мой код (в статическом методе):

Runtime rtime = Runtime.getRuntime();
Process child = rtime.exec("/bin/bash");
BufferedWriter outCommand = new BufferedWriter(new
OutputStreamWriter(child.getOutputStream()));
outCommand.write("streamer -c /dev/video0 -b32 -o test.jpeg");
outCommand.flush();
outCommand.close();
child.destroy();

Но я получаю эту ошибку, если я попробую этот код на моей странице jsp (tomcat6):

java.security.AccessControlException: доступ запрещен (выполнение java.io.FilePermission / bin / bash)

Есть ли решение этой проблемы?

EDIT : ls -l / bin / bash показывает мне следующую строку:

-rwxr-xr-x 1 корневой корень 875596 2009-09-14 07:09 / bin / bash

Спасибо

Ответы [ 3 ]

3 голосов
/ 19 сентября 2010

Если вы хотите, чтобы диспетчер безопасности работал, и у вас могут быть веские причины для этого, вы можете просто изменить файл политики, который использует Tomcat.Файлы могут быть расположены в /var/lib/tomcat6/conf/policy.d.

Хороший SO поток обсуждает это уже.Даже если вы предоставите AllPermissions своему приложению, запуск с SecurityManager позволит вам использовать песочницы с ограниченной безопасностью.Возможно, вы захотите сделать это, скажем, для запуска JavaScript, который может быть загружен во время выполнения или что-то подобное, или в вашем приложении может быть какой-то другой код, которому вы по какой-то причине не доверяете.

1 голос
/ 19 сентября 2010

Также, если возможно, попытайтесь запустить его в одном вызове exec.

Process p = Runtime.getRuntime().exec(args);

где args - строковый массив аргументов.

String[] args = new String[] {"/bin/bash", "streamer", "-c", "/dev/video0", "-b32", "-o", "test.jpeg" };
1 голос
/ 19 сентября 2010

Попробуйте отключить диспетчер безопасности.Отредактируйте /etc/init.d/tomcat6 и измените:

TOMCAT_SECURITY=yes

Измените его на:

TOMCAT_SECURITY=no

И затем перезапустите Tomcat:

/etc/init.d/tomcat6 restart

Если это работает, это дочтобы увидеть, является ли полное отключение диспетчера безопасности приемлемым или нет (использовать его на самом деле необычно для IMO).

...