2010-02-02 66 views
2

我有一个使用Bluecove库的Java项目,该库需要root权限才能执行我在项目中需要的某些操作。我应该在这里注意到,尽管项目是基于Java的,但仅适用于Linux。保持我的Java程序安全

该项目将有许多功能,不需要root权限,其中一些将不得不与root权限功能进行交互,一些不会。

此外,项目将使用用户输入的数据以root权限执行程序,例如hciconfig

所有这些根本活动导致我担心我的系统的安全性。目标机器是用户自己的计算机,并且无意在某些公共终端上运行该系统,但安全性仍然很重要,因为未知的外部蓝牙设备将能够与该系统进行交互。

到目前为止,我的安全措施涉及大量过滤用户输入,并非常注意外部蓝牙设备将导致系统执行的所有操作,但我越来越不满意这一点。

人们会推荐什么?一个想法是将系统分成两个或三个模块,其中一个包含GUI和非根后端,一个包含Bluecove根后端,可能还有一个用于hciconfig和其他工具的根包装。

我注意到一些程序,例如Apache,一旦运行“下拉”他们的权限。这是如何实现的,这是否有效?

回答

3

apache是​​否会执行setuid系统调用(在libc中),如您所述,它有效地降低了进程的权限。您可以通过JNI或JNA进行libc调用。

即使对于Java程序,它也可以很好地工作,除非一旦您从根目录迁移到非根目录,您将无法执行任何需要提升特权的操作。因此,只有在所有特权操作都可以事先完成的情况下才能使用该技术,就像Apache一样。

另一种可能性是将程序分成两个进程 - 启动时,程序会分叉另一个以root身份运行的程序,然后将原始程序降级到非根目录。两个进程可以通过它们的stdin/stdout进行通信。

+0

太好了,谢谢你的澄清! – 2010-02-03 10:50:19