2

我正在运行一个有点受信任的 J2SE 应用程序(Minecraft),但可能包含完全不受信任的(甚至可能是一些敌对的)插件。

我想创建一个可以访问 Raspberry PI 上的 GPIO 引脚的插件。

我见过的每个解决方案都需要为这样的应用程序提供 sudo-superpowers,因为 gpio 是通过直接内存访问来访问的。

看起来正确的解决方案是提供这样的命令行选项:

-Djava.security.policy=java.policy

这似乎默认您没有权限(甚至访问文件和高端口),然后将您的应用程序需要的权限添加回策略文件中。

实际上,您似乎在赋予 Java“sudo”权力,然后信任 java 的安全模型只为各种类赋予适当的权力。我猜这使得应用程序可以安全地使用 sudo 运行——这是正确的吗?

有趣的是,自从 1.0 以来,我几乎每天都在使用 Java,而以前从未需要过它……你每天都会学到新东西。

4

1 回答 1

1

[免责声明:我不太相信 Java 安全模型。]

我解决这个问题的方法是让需要访问硬件的代码作为单独的特权进程运行,然后让您的 Java 应用程序作为非特权进程运行并连接到特权进程以让它代表它执行某些操作。

在特权进程中,您应该以最大的不信任来检查每个请求是否可以安全执行。如果您担心其他非特权进程也可能连接到守护程序并使其执行不应执行的命令,您可以将其套接字设置为一个特殊组,setgid()并将 Java 应用程序设置为该组的一个用 C 编写的小型包装器在它之前已启动。

Unix 域套接字可能是最好的选择,但如果您想要chroot()Java 应用程序,可能需要 TCP/IP 套接字。

于 2016-02-15T21:56:38.827 回答