【问题标题】:Can I use a java policy file to safely run an un-trusted app with sudo我可以使用 java 策略文件通过 sudo 安全地运行不受信任的应用程序吗
【发布时间】:2016-05-26 22:48:29
【问题描述】:

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

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

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

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

-Djava.security.policy=java.policy

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

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

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

【问题讨论】:

    标签: java linux raspberry-pi minecraft java-security


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 这也是我的第一个想法,但由于我在 Raspberry pi 上运行并且内存是一种稀缺资源,我试图避免启动多个 JVM。如果安全模型不起作用,我可能会尝试使用 C 应用程序来执行您所说的操作,但我更喜欢 java。您对 Java 安全模型有什么具体的问题经验吗?还是不错的建议,我会投票的:)
    • 我的假设是守护进程将用 C 语言编写,因此它的开销应该相对较低。无论如何,您不必去C进行硬件访问吗?我没有任何可以引用的负面经验,但我认为如果存在操作系统级别的安全机制,则应该使用它,并且在应用程序级别模仿它是一个较差的解决方案。与此有关的人非正式地告诉我,打破 JVM 限制“很容易”,但我没有能力谈论这个。
    • 硬件访问似乎是通过 /dev/mem 并且已经在 java 库中实现。当然,它也在 C 库中实现——甚至可能作为某种类型的服务,但如果这种内存保护的东西确实有效,我宁愿留在 Java 上——更少的移动部件,更简单的构建,而且我可以学到一些东西新的:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 2011-12-16
    • 2013-10-02
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多