Недавно у меня возник вопрос о том, как запретить пакетам вызывать метод System.exit и завершать работу всей системы. Первое решение — сделать со старыми статическими Java-приложениями:
-
Делегирует безопасность в OSGI Framework:
java -jar framework.jar -init -Djava.security.manager -Djava.security.policy=all.policy
all.policy
grant { permission java.security.AllPermission;
};
-
Запретите все вызовы метода выхода, используя API безопасности Java, и разверните его, используя один пакет с активатором, например:
import org.osgi.framework. {BundleActivator ,BundleContext }
class Activator extends BundleActivator {
@throws (classOf[ java.lang.Exception])
def start( context:BundleContext){
System setSecurityManager new SecurityManager() {
override def checkExit( status:Int) {
throw new SecurityException("Reject System.exit(" + status + ")!");
}
}
}
@throws (classOf[ java.lang.Exception])
def stop( context:BundleContext) {}
}
Этот блог покажет, как изменить разрешение безопасности на лету, используя консоль и пакет per osgi. Osgi более гибок, чем стандартные Java-приложения, и безопасность внутри Osgi не является исключением. Использование администратора разрешений делает безопасность более динамичной.
Для обеспечения безопасности на лету мы будем использовать sosgi secure scala-модули.
https://github.com/ouertani/sosgi, пока этот модуль находится в стадии разработки, с ним можно многое сделать.
Предварительное условие:
- scala-library-2.8.1.jar -> на основе языка scala
- scalamodules-core_2.8.1-2.0.4-SNAPSHOT.jar -> умный осги dsl
- slf4s_2.8.1-1.0.3.jar -> scala logging dsl
- slf4j-api-1.6.1.jar с реализацией как slf4j-simple-1.6.1.jar -> фасад ведения журнала и реализация
- sbt-launch-0.7.4.jar -> для компиляции и упаковки пакета
- org.eclipse.osgi_3.6.2.jar -> в настоящий момент основывается на равноденствии и его командном интерпретаторе
установка:
запустите фреймворк, используя файл all.policy как:
java -Djava.security.manager -Djava.security.policy=all.policy -jar org.eclipse.osgi_3.6.2.R36x_v20110210.jar -console
-
установить базовые комплекты, такие как:
- я файл: ./ admin / scala-library-2.8.1.jar
- я файл: ./ admin / slf4j-api-1.6.1.jar
- я файл: ./ admin / slf4j-simple-1.6.1.jar
- я файл: ./ admin / slf4s_2.8.1-1.0.3.jar
- я файл: ./ admin / scalamodules-core_2.8.1-2.0.4-SNAPSHOT.jar
- я файл: ./ admin / osgi_2.8.1-1.0.jar
Теперь, например, установите пакеты, чтобы проиллюстрировать использование:
class Activator extends BundleActivator {
@throws (classOf[ java.lang.Exception])
def start( context:BundleContext){
try{
System exit 0
}catch {
case e => println (e)
}
}
.....
Бег :
-
список связок
osgi> ss
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.6.2.R36x_v20110210
1 INSTALLED scala-library_2.8.1
2 INSTALLED slf4j.api_1.6.1
3 INSTALLED slf4j.simple_1.6.1
4 INSTALLED com.weiglewilczek.slf4s_1.0.3
5 INSTALLED com.weiglewilczek.scalamodules.core_2.0.4.SNAPSHOT
6 INSTALLED com.ouertani.osgi_1.0.0
7 INSTALLED com.osgi.1e_1.0.0.SNAPSHOT
- запустить пакет безопасности
start 6
- обновить admin dir
setprop ADMIN_DIR="*/admin/*"
- пакет безопасности init
sosgi !
-
попробуй позвонить стартовый комплект 7
start 7
java.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.0)
==> Отличный system.exit не разрешен для этого пакета.
-
чтобы позволить 7-му пакету вызвать выход и завершить работу виртуальной машины
sosgi + 7 ( java.lang.RuntimePermission ""exitVM.*"" )
-
добавить разрешения для пакета 7
sosgi + 7 ( org.osgi.framework.PackagePermission ""*"" ""import"" )
sosgi + 7 ( java.lang.RuntimePermission ""exitVM.*"" )
-
запустить комплект 7 или обновить его
start 7
great ! VM is shuting down
Больше :
-
дисплей безопасности
sosgi ?
FOR + [генерированный_1301865364030] Если org.osgi.service.condpermadmin.BundleLocationCondition * / admin / * Тогда org.osgi.framework.ServicePermission org.eclipse.osgi.framework.console.CommandProvider зарегистрироваться И java.security.AllPermission * * .osgi.framework.AdminPermission * * AND org.osgi.framework.PackagePermission * * END FI
-
очистить всю безопасность
sosgi !!
источник:
http://ouertani.com/2011/04/osgi-security-on-the-fly/