Я пытаюсь запустить Java-приложение (распределенную файловую систему) внутри песочницы, вот файл политики:
keystore "/home/me/.keystore", "jks";
grant signedBy "me1", codeBase "file:file.jar" {
permission java.net.SocketPermission "*:1700-", "accept, connect, listen, resolve", signedBy "me1";
permission java.io.FilePermission "/home/me/te/-", "read,write,delete,execute", signedBy "me1";
};
Теперь, если я выполняю file.isDirectory из аргумента командной строки args [], и если этот каталог в методе isDirectory () - home / me / te, я получаю следующую ошибку:
Exception in thread "main" java.security.AccessControlException: access denied (java.io.FilePermission /home/me/te read)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:342)
at java.security.AccessController.checkPermission(AccessController.java:553)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
at java.io.File.isDirectory(File.java:769)
at SecureBoxServer.Main.main(Main.java:31)
Вот команда, которую я выполняю:
java -Djava.security.manager -Djava.security.policy==si.pol -jar file.jar 1700 /home/me/te
(1700 - это просто номер порта для подключения). si.pol - это файл выше.
Что я делаю не так?
Спасибо
[Edit] Обошел его, заменив код на accesscontrollers и прекрасно работает в песочнице. Тем не менее, все еще любопытно, почему это не работает.
[Edit2] Просто чтобы прояснить, да, это два =, использовать только разрешения внутри файла.