2014-10-22 2 views
0

Я хочу ограничить мою JVM для выхода из vm через файл политики, но он не работает. Можете ли вы, ребята, помочь мне как ограничить доступ в java.io.RuntimePermission?Ограниченная политика безопасности Java RuntimePermission exitVM

grant { 
    permission java.io.RuntimePermission "exitVM", "none"; 
}; 
+0

Вы предоставляете разрешения, а не запрещаете их (в соответствии с этим API). Вероятно, вы не включили «SecurityManager». –

ответ

1

Посмотрите на javodoc для RuntimePermission:

Этот класс для разрешения выполнения. A RuntimePermission содержит имя (также называемое «целевым именем»), но не список действий; у вас либо имеют именованное разрешение, либо нет.

Таким образом, действие «none» неверно в настройках вашего разрешения.

Что касается exitVM разрешения:

Разрешения Target Name:. ExitVM {статуса выхода}

Что разрешение позволяет: приостановка виртуальной машины Java с указанным статусом выхода

Риски разрешения этого разрешения: Это позволяет злоумышленнику установить denia l-of-service, автоматически заставляя виртуальную машину остановиться. Примечание. Разрешение «exitVM. » автоматически предоставляется ко всему коду, загруженному из пути класса приложения, таким образом позволяет приложениям завершаться. Кроме того, разрешение «exitVM» эквивалентно «exitVM.».

Таким образом, действительный синтаксис для имени разрешения имеет либо «exitVM», «exitVM. *», «ExitVM.n» (где n обозначает код выхода).

Проблема здесь состоит в том, что, как указано в док, «exitVM. *» Разрешение автоматически предоставляется всем кодам, загруженным из класса приложения пути. Поэтому, если код, который вызывает System.exit (...), находится в основном пути к классам, который настроен в командной строке java, вы не можете помешать ему работать. Это не так, если, например, код, вызывающий System.exit (...), был загружен из отдельного загрузчика классов.

Также имейте в виду, что grant заявление на предоставление разрешения, не отрицая их. В соответствии с этим единственный способ отклонить разрешение «exitVM» - , никогда не предоставляйте его.

+0

Но по умолчанию он предоставляется! Как я могу запретить доступ к System.exit в моем коде? –