我有一个使用Bluecove库的Java项目,这个库需要root权限才能执行我在项目中需要的某些操作。我应该在这里注意,尽管该项目是基于Java的,但它仅适用于Linux。
该项目将有许多不需要root权限的函数,其中一些必须与root权限函数交互,而另一些则不需要。
此外,项目将使用root权限下的用户输入数据执行hciconfig等程序。
所有这些root活动都让我担心系统的安全性。目标机器将是用户自己的计算机,并且无意在某些公共终端上运行该系统,但安全性仍然很重要,因为未知的外部蓝牙设备将能够与该系统交互。
到目前为止,我的安全措施涉及大量过滤用户输入,并且非常注意外部蓝牙设备将导致系统执行的所有操作,但我越来越不满意。
人们会推荐什么?一种想法是将系统分成两个或三个模块,一个包含GUI和非根后端,一个包含Bluecove根后端,可能还有hciconfig的根包装和其他使用的工具。
我注意到一些程序,例如Apache,一旦运行“下拉”他们的权限。这是如何实现的,这是否有效?
答案 0 :(得分:3)
setuid系统调用(在libc中)是什么apache,正如您所指出的,它有效地降低了进程的权限。您可以通过JNI或JNA进行libc调用。
这种方法非常有效,即使对于Java程序也是如此,除了从root用户到非root用户之外,您将无法执行任何需要提升权限的操作。因此,只有在所有特权操作都可以预先完成的情况下才能使用该技术,例如Apache。
另一种可能性是将程序划分为两个进程 - 启动时,程序会分叉另一个以root身份运行的程序,然后将原始程序降级为非root用户。两个进程可以通过stdin / stdout进行通信。