我有一個在Linux移動設備上運行的用戶級C++測試應用程序。其中一項測試涉及啓用/禁用需要在設備文件上寫入root權限的打印機紙張傳感器。有沒有辦法讓我的應用程序具有這種特權?如果沒有,是否有解決方法?如何授予用戶應用程序的根訪問權限?
2
A
回答
3
這將做,
作爲root
執行:
chown -v root:root /path/to/yourapp
chmod -v 4755 /path/to/yourapp
或替代地
chmod -v u+s /path/to/yourapp
或替代地
man chmod
這將不適用於腳本。是的,你應該認真對待什麼jdizzle說關於放棄不必要的特權。
解決此問題的另一種方法是使運行應用程序的用戶成爲擁有設備文件的組的成員。例如,printer
組
ls -la /dev/devicefile
crw-rw---- 1 root printer 4, 0 may 6 10:56 /dev/devicefile
成員可以讀取和寫入設備,所以你只需要添加joe
到printer
組(並重新啓動會話)。
gpasswd -a joe printer
如果需要調整設備文件的權限,你可能需要編輯udev規則,使之永久化。但chmod
也應該工作。
2
您可以設置程序setuid root,這意味着它即使在用戶運行時也會始終以root身份運行。這通常需要特別小心,一旦完成需要根訪問的必要操作,就會在程序內部放棄權限。
1
你也可以有一個幫助程序,本身setuid根或具有適當的功能,或開始通過sudo
- 與打印機通信。你的主應用程序將分支執行程序並通過管道與它通信,所以它不應該以root身份運行。
助手程序將是一個簡單的可執行文件(用適當的能力),這將只能通過主應用程序(用戶不能直接)啓動和通管或程序參數與它通信等
一許多圖形管理程序也是這樣做的:圖形化的部分是一個與管理部分分離的程序,並且它們適當地進行通信。只有管理程序(通常是現有的命令行程序adduser
)需要特殊權限。
-2
您應該明確地嘗試避免以「root」身份運行程序,因爲這不僅會讓您的程序讀取/寫入/ dev/sensordevice,而且還會授予您系統中幾乎所有內容的訪問權限(包括完全磚它)
因此,你應該嘗試添加到你需要的資源的細粒度訪問,使用適當的組,並確保您的設備文件授予您的組寫入權限。 參見(例如)udev關於如何編寫適當的udev規則,該規則將特定設備的寫入訪問授予給定組。
相關問題
- 1. 授予iPhone應用程序根權限
- 2. 如何授予我的COM +應用程序訪問權限?
- 3. 授予用戶權限來訪問表
- 4. 如何識別未授予應用程序訪問權限的用戶?
- 5. 授予用戶訪問權
- 6. 授予管理員訪問Android應用程序的權限
- 7. 授予應用程序的root權限
- 8. 如何授予用戶特定時間的訪問權限?
- 9. 授予Android應用根權限
- 10. 如何檢查用戶是否授予Facebook訪問權限?
- 11. Oracle - 授予用戶權限
- 12. MySql授予用戶權限
- 13. MySQL授予用戶權限
- 14. 授予用戶創建應用程序角色的權限
- 15. 如何授予用戶權限
- 16. 我如何向用戶授予權限?
- 17. 如何向用戶授予權限
- 18. 如何獲取應用程序的所有授予的權限
- 19. CryptographicException:拒絕訪問 - 如何授予用戶存儲上的訪問權限?
- 20. 如何授予粉絲頁面權限的應用程序
- 21. 如何將系統權限授予我的Android應用程序?
- 22. 如何爲LDAP用戶授予Collabnet SubVersion的用戶訪問權限
- 23. 授予訪問Outlook應用程序
- 24. 如何爲用戶授予遠程訪問mysql服務器的權限?
- 25. 如何授予帳戶訪問證書的權限?
- 26. 用戶如何授予我的應用users_posts權限?
- 27. 授予用戶訪問簽署文件的權限
- 28. 授予對一組用戶訪問Firebase位置的權限
- 29. winhttpcertcfg在Windows 7中授予對iiS用戶的訪問權限
- 30. 授予合適的用戶代理訪問權限
幫助程序是什麼意思?你能給我一個簡單的例子嗎? :D – Owen
在我編輯的答案中解釋 –