【问题标题】:Elasticsearch 2.2.0 Plugin Security grantsElasticsearch 2.2.0 插件安全授权
【发布时间】:2016-05-27 14:51:39
【问题描述】:

我有一个 Elasticsearch opensource plugin 需要反射来检查 HTTP 请求的原始地址。

在 ES 2.2 中,他们为插件引入了安全权限,在 instructions 之后,我在 plugin-security.policy 文件中添加了以下内容:

grant {
  permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
};

现在安装插件后,我可以看到这一点(正如文档中所预期的那样)。所以我假设许可请求已成功启动。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: plugin requires additional permissions     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.reflect.ReflectPermission suppressAccessChecks
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
Installed readonlyrest into /elasticsearch/plugins/readonlyrest

但是,从我实际使用反射的函数中,仍然看到这个错误...

java.security.AccessControlException: access denied ("java.lang.reflect.ReflectPermission" "suppressAccessChecks")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
    at java.security.AccessController.checkPermission(AccessController.java:884)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:128)
    at org.elasticsearch.plugin.readonlyrest.acl.blocks.rules.impl.HostsRule.getAddress(HostsRule.java:76)
    at org.elasticsearch.plugin.readonlyrest.acl.blocks.rules.impl.HostsRule.match(HostsRule.java:130)
    at org.elasticsearch.plugin.readonlyrest.acl.blocks.Block.check(Block.java:104)
    at org.elasticsearch.plugin.readonlyrest.acl.ACL.check(ACL.java:48)
    at org.elasticsearch.plugin.readonlyrest.ReadonlyRestAction$1.process(ReadonlyRestAction.java:60)
    at org.elasticsearch.rest.RestController$ControllerFilterChain.continueProcessing(RestController.java:265)

有什么遗漏吗?我不知道。

【问题讨论】:

    标签: java elasticsearch elasticsearch-plugin java-security


    【解决方案1】:

    我需要将反射代码包装在AccessController.doPrivileged() 中:)

    【讨论】:

    • 在哪个文件中?
    • 在 Java 源代码中,您只需要在 AccessController.doPrivileged(... 一些执行代码的 lambda...) 中包装任何使用权限的代码。 @MathiasConradt 您是否正在开发 ES 插件?哪一个?
    【解决方案2】:

    对我有用的是从 Open JDK 切换到 oracle JDK

    【讨论】:

      猜你喜欢
      • 2015-09-01
      • 2017-05-10
      • 2012-04-07
      • 2013-01-22
      • 1970-01-01
      • 2015-02-20
      • 2017-01-18
      • 2021-03-06
      相关资源
      最近更新 更多