Статьи

Osgi, безопасность на лету


Недавно у меня возник вопрос о том, как запретить пакетам вызывать метод 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/