2012-05-07 159 views
2

我有一個在Linux移動設備上運行的用戶級C++測試應用程序。其中一項測試涉及啓用/禁用需要在設備文件上寫入root權限的打印機紙張傳感器。有沒有辦法讓我的應用程序具有這種特權?如果沒有,是否有解決方法?如何授予用戶應用程序的根訪問權限?

回答

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 

成員可以讀取和寫入設備,所以你只需要添加joeprinter組(並重新啓動會話)。

gpasswd -a joe printer 

如果需要調整設備文件的權限,你可能需要編輯udev規則,使之永久化。但chmod也應該工作。

其他值得調查的選擇:setcap(8)(很好的指南here)和sudo(8)

2

您可以設置程序setuid root,這意味着它即使在用戶運行時也會始終以root身份運行。這通常需要特別小心,一旦完成需要根訪問的必要操作,就會在程序內部放棄權限。

1

你也可以有一個幫助程序,本身setuid根或具有適當的功能,或開始通過sudo - 與打印機通信。你的主應用程序將分支執行程序並通過管道與它通信,所以它不應該以root身份運行。

助手程序將是一個簡單的可執行文件(用適當的能力),這將只能通過主應用程序(用戶不能直接)啓動和通管或程序參數與它通信等

一許多圖形管理程序也是這樣做的:圖形化的部分是一個與管理部分分離的程序,並且它們適當地進行通信。只有管​​理程序(通常是現有的命令行程序adduser)需要特殊權限。

+0

幫助程序是什麼意思?你能給我一個簡單的例子嗎? :D – Owen

+0

在我編輯的答案中解釋 –

-2

您應該明確地嘗試避免以「root」身份運行程序,因爲這不僅會讓您的程序讀取/寫入/ dev/sensordevice,而且還會授予您系統中幾乎所有內容的訪問權限(包括完全磚它)

因此,你應該嘗試添加到你需要的資源的細粒度訪問,使用適當的組,並確保您的設備文件授予您的組寫入權限。 參見(例如)udev關於如何編寫適當的udev規則,該規則將特定設備的寫入訪問授予給定組。