我們有幾個硬件設備需要使用原始套接字與它們進行通信。爲了做到這一點,我們運行一個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我曾假設你打算使用某種音頻 - 二進制轉換工具將外部無線電信號轉換爲軟件指令。如果是這樣,那麼用這樣的措施來保護你的應用程序肯定是值得的。用於與您的軟件進行通信的協議在這方面與此無關。 –