【问题标题】:Can I update Java's SecurityManager to reduce privileges after initialization?我可以在初始化后更新 Java 的 SecurityManager 以降低权限吗?
【发布时间】:2015-07-15 21:47:10
【问题描述】:

我正在编写一个调用不属于我的库代码的 Java 程序;所以我在 SecurityManager 中运行程序,只有最低要求的权限。

我只需要在 main() 方法的前几行中才需要一个特殊权限...然后再也不需要了。

是否有可能在 Java 中减少执行过程中某个点的权限?

我的理解(我希望这是正确的)是Apache httpd 这样做的,首先使用它的root 权限绑定到端口80/443 等,然后使用系统调用setuid()(或类似的)来假设程序其余部分的权限较低。原则上,我原以为在 Java VM 中也是可能的。

【问题讨论】:

  • 只需在有问题的代码行之后安装 SecurityManager。
  • 评论更新我从来没有找到一个可接受的方法来做到这一点。当使用 java.security 配置 SecurityManager 时,SecurityManager 会自动允许各种显而易见的事情,例如加载类路径中的所有类。但是在运行时引入自定义 SecurityManager 时,没有权限。你需要打开谷仓的门才能做任何事情。在我的案例中,加载和初始化类的最低要求包括允许反射和修改系统属性。所以这不值得。

标签: java securitymanager


【解决方案1】:

您可以将自定义 SecurityManager 用于您的目的,例如...

System.setSecurityManager(new SecurityManager() {
        @Override
        public void checkPermission(Permission perm) {
            ...
    });

现在基于您要检查的权限或基于您可以验证的当前线程执行。

希望这很清楚。

【讨论】:

  • 谢谢阿宁达。您的示例无法编译。它缺少一个关闭}
  • 我尝试了这个,添加了与我之前准备的java.policy 文件相同的逻辑,我看到的是这种技术不允许我的程序加载任何类。见stackoverflow.com/questions/3817330/… ...所以我认为这个解决方案肯定是“做错了”......
猜你喜欢
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多