我忙於在Linux計算機上用C++開發應用程序。該應用程序使用使用以太網適配器和網絡的第三方庫。該庫是GigE Vision相機的庫。在啓動時,我的應用程序會嘗試連接到相機,然後它會返回有關相機的信息,之後它會開始將流視頻傳輸到應用程序。應用程序的網絡功能
經過一段時間,應用程序無法連接或從相機獲取相機信息,但以root身份運行應用程序(sudo)解決了此問題。
我所接觸的庫的供應商,他們均表示,我應該做到以下幾點:
用戶誰覺得作爲root運行,損害了他們的系統的安全性可能會發現下面的實現滿意:
- 將可執行的所有者設置爲root。
- 設置「setuid的」許可位上的可執行代碼
- ,當應用程序啓動時使用capset()釋放所有,但這些特權:CAP_SYS_NICE,CAP_NET_ADMIN,CAP_NET_BROADCAST,CAP_NET_RAW的應用程序將啓動所有的root權限,但它會在啓動後立即刪除它們。
這並不工作,但不是對我有另一種方式做到這一點不改變可執行文件?我正在考慮將我的用戶添加到某個允許我訪問這些權限的組,我們將不勝感激任何幫助。
上述解決方案並不是最佳的,因爲在每次編譯之後,我需要更改所有者並設置權限。該應用程序用於記錄視頻和捕獲圖像。對於上述解決方案,這些記錄和捕獲也由root用戶擁有,並且在分發文件時需要將用戶改回。
操作系統:Ubuntu Linux操作系統的11.10 環境:C++使用Qt