我正在运行一个有点信任的J2SE应用程序(Minecraft),但可能包含完全不信任(甚至可能是某些恶意)的插件。
我想创建一个可以访问Raspberry PI上的GPIO引脚的插件。
我所见过的每个解决方案都要求为这样的应用程序提供sudo-superpowers,因为gpio是通过直接内存访问来访问的。
看起来正确的解决方案是提供如下命令行选项:
-Djava.security.policy=java.policy
似乎默认您没有权限(甚至访问文件和高端口),然后使用策略文件添加您的应用程序需要的权限。
实际上你似乎在给Java" sudo"权力,然后信任java的安全模型,只给各种类提供适当的权力。我猜测这会让应用程序安全地运行sudo - 这是正确的吗?
有趣的是,自从1.0以来我几乎每天都在使用Java,而且之前从未需要过这样的...你每天都在学习新知识。
答案 0 :(得分:1)
[免责声明:我对Java安全模型并不十分信服。]
我解决这个问题的方法是让需要访问硬件的代码作为单独的特权进程运行,然后让您的Java应用程序作为非特权进程运行并连接到特权进程让它代表它执行某些行动。
在特权进程中,您应该最大限度地检查每个请求是否可以安全执行。如果您担心其他非特权进程也可能连接到该守护进程并使其执行命令,则不应该将其套接字由一个特殊组和setgid()
Java应用程序归属于该组。在启动之前用C编写的微小包装。
Unix域套接字可能是最好的选择,但是如果你想要chroot()
Java应用程序,则可能需要TCP / IP套接字。