当前位置: 首页 > 知识库问答 >
问题:

RMISecurityManager沙箱

丁文轩
2023-03-14

我编写了一个简单的RMI服务器,并为它提供了一个默认的rmiseCurityManager:

System.setSecurityManager (new RMISecurityManager());

以下是服务器的代码(来自Oracle RMI教程,但我添加了RMISecurityManager):

package example.hello;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.RMISecurityManager;

public class Server implements Hello {

public Server() {}

public String sayHello() {
    return "Hello, world!";
}

public static void main(String args[]) {

    try {
         Server obj = new Server();

         // * Addition *
         System.setSecurityManager (new RMISecurityManager());

         // Create object that will provide the remote service
         Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);

         // Bind the remote object's stub in the registry
         Registry registry = LocateRegistry.getRegistry();
         registry.bind("Hello", stub);
         System.err.println("Server ready");
    } catch (Exception e) {
         System.err.println("Server exception: " + e.toString());
         e.printStackTrace();
    }
}

}

我这样做:

grant codeBase "file:/path/to/classes/" {
  permission java.net.SocketPermission "127.0.0.1:1099", "connect, resolve";
};

共有1个答案

张智
2023-03-14

如果使用安全管理器,还需要提供一个。policy文件,该文件将授予您所需的权限。

除非使用codebase特性,否则不需要带有RMI的安全管理器。当使用它时,它通常向客户机提供类,而不是向服务器提供类,因此是客户机需要安全管理器,而不是服务器。您可能在不必要地安装它。

 类似资料:
  • 我想从文件客户端加载SecurityManager策略。政策我读到我能做到——贾瓦。安全策略=客户端。政策但我不想在命令行中指定这一点。我试图在属性文件中指定它。实际上我的代码抛出异常。如果没有命令行参数,我如何读取策略? 以下是我的代码片段: config.properties: 客户政策: 例外情况: JAVA安全AccessControlException:在java上拒绝访问(“java.

  • 安全是Chromium最重要的目标之一。安全的关键在于理解下面这点:在我们完整地理解了系统在所有可能的输入组合下表现出的行为之后,我们才能够真的保证系统安全。对于像Chromium这样庞大而多样化的代码库,推理它的各个部分可能的行为的组合几乎是不可能的。沙箱的目标是提供这样一种保证:不论输入什么,保证一段代码最终能或不能做的事情。 沙盒利用操作系统提供的安全性,允许不能对计算机做出持久性改变或者访

  • Jinja2 沙箱用于为不信任的代码求值。访问不安全的属性和方法是被禁止的。 假定在默认配置中 env 是一个 SandboxedEnvironment 实例,下面的代码展示 了它如何工作: >>> env.from_string("{{ func.func_code }}").render(func=lambda:None) u'' >>> env.from_string("{{ func.fu

  • Jinja2 沙箱用于为不信任的代码求值。访问不安全的属性和方法是被禁止的。 假定在默认配置中 env 是一个 SandboxedEnvironment 实例,下面的代码展示 了它如何工作: >>> env.from_string("{{ func.func_code }}").render(func=lambda:None) u&"" title="jinja2.sandbox.Security

  • 什么是沙箱? 沙箱是一个允许沙箱进程创建的C++库,沙箱进程是一种运行在非常限制性的环境中的进程。沙箱进程可以唯一自由使用的资源是CPU周期和内存。例如,沙箱进程不能写磁盘或者显示他们自己的窗口。它们真正能做的事情由一种明确的策略锁控制。Chromium渲染器都是沙箱化进程。 沙箱可以保护什么,不能保护什么? 沙箱限制了运行在沙箱中的代码的bug的危害。这些bug不能在用户的账号中安装持久性的恶意

  • 问题内容: 我想创建一个Web应用程序,该应用程序将允许用户上传一些C代码,并查看其执行结果(该代码将在服务器上编译)。用户不受信任,这显然会带来巨大的安全隐患。 因此,我需要为应用创建某种沙箱。在最基本的级别上,我想将对文件系统的访问限制在某些指定的目录中。我无法直接使用chroot jails,因为Web应用程序未以特权用户身份运行。我想设置监狱的suid可执行文件是一个选择。 上载的程序会很