我们有几个硬件设备需要使用原始套接字与它们进行通信。为了做到这一点,我们运行一个UDP代理将数据发送到设备。 UDP代理需要root权限才能运行。是否有启动需要root访问权限的服务的“最佳方法”?
使用REDHAWK启动此服务有哪些选择?它不应该在启动时启动,并且需要在需要时作为波形的一部分理想地启动。
我们有几个硬件设备需要使用原始套接字与它们进行通信。为了做到这一点,我们运行一个UDP代理将数据发送到设备。 UDP代理需要root权限才能运行。是否有启动需要root访问权限的服务的“最佳方法”?
使用REDHAWK启动此服务有哪些选择?它不应该在启动时启动,并且需要在需要时作为波形的一部分理想地启动。
当他开发vsftpd FTP服务器时,克里斯埃文斯对此进行了很多考虑。特别是,他的design notes值得仔细研究。
简而言之,软件以root权限启动,但立即创建一个非特权子进程,用于处理与外部世界的所有交互。子进程清理传入的请求,并将它们传递给父进程。父进程也不信任由子进程发送给它的所有内容,并且只在确定没有任何不良行为发生时才采取请求的操作。
由于外部用户只能与子进程进行交互,因此破坏父进程的特权状态要困难得多。
这确实两个部分你的问题,通用Linux一个有几个可能的答案:
我想你的问题的第二部分是你真正关心的问题,而且对谷歌来说更难,在Redhawk中看起来如何? Redhawk进程通常在用户登陆时执行,但底层传输omniORB作为Linux服务运行,并需要root访问权限来配置/启动/停止。我还没有看到一个人从一个没有特权的普通安装中用root执行单个Redhawk进程的例子,所以我不确定这是如何工作的。我不建议将Redhawk整体安装为root权限,因为这是一种公然的安全风险,完全没有必要。在任何情况下,您整合代理服务的方式大致如下:
nodeBooter -d $SDRROOT/dev/nodes/DeviceManager/DeviceManager.dcd.xml
或类似的东西会让你在那里。我知道你说应该在启动时启动而不是,但设备(驱动程序)的一般做法是它们始终可用于异步连接。无论如何,一旦运行了节点,您就可以通过python脚本或IDE在该节点/设备上启动波形。针对设备启动波形由三件事组成:满足波形依赖性,设置(Redhawk)端口连接以及分配RF调谐器(启动数据流)。我承认这似乎不是最直接的方式,但有系统级的原因为什么这样做。无论如何,这应该让你思考。我建议阅读Redhawk手册,尽管在这一点上它相当大。搜索python示例,他们是了解如何操作框架的最简单方法。要探索可用的Python函数:
$ python
>>> from ossie.utils import redhawk
>>> domain = redhawk.attach('REDHAWK_DEV')
>>> dir(domain)
我不会反对票,但这个问题没有任何关于设计和一切办通过红鹰框架启动服务。 –
@SirBedevere我曾假设你打算使用某种音频 - 二进制转换工具将外部无线电信号转换为软件指令。如果是这样,那么用这样的措施来保护你的应用程序肯定是值得的。用于与您的软件进行通信的协议在这方面与此无关。 –