簡體   English   中英

如何授予對用戶應用程序的root訪問權限?

[英]How do I grant root access to a user application?

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

這樣就可以了

root身份執行:

chown -v root:root /path/to/yourapp
chmod -v 4755 /path/to/yourapp    

或者

chmod -v u+s /path/to/yourapp

或者

man chmod

不適用於腳本 是的,您應該認真對待jdizzle所說的刪除不必要的特權。

解決此問題的另一種方法是使運行應用程序的用戶成為擁有設備文件的組的成員。 例如,

ls -la /dev/devicefile
crw-rw---- 1 root printer 4, 0 may  6 10:56 /dev/devicefile

printer組的成員可以讀寫設備,因此您只需將joe添加到printer組(並重新啟動會話)。

gpasswd -a joe printer

如果需要調整devicefile權限,則可能需要編輯udev規則以使其永久化。 但是chmod應該工作。

其他值得研究的選項: setcap(8)此處有個不錯的指南)和sudo(8)

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

您也可以有一個幫助程序,它本身是setuid根-或具有適當的功能,或通過sudo啟動-與打印機通信。 您的主應用程序將分叉並執行該程序,並通過管道與之通信,因此它本身不應以root身份運行。

幫助程序是一個簡單的可執行文件(具有適當的功能),只能由您的主應用程序啟動(而不能由用戶直接啟動),並通過管道或程序參數等與之通信。

許多圖形管理程序也是這樣完成的:圖形部分是與管理部分分離的程序,它們可以適當地通信。 僅管理程序(通常是現有的命令行程序,如adduser )需要特殊特權。

您應該絕對避免以“ root”身份運行程序,因為這不僅將允許您的程序讀取/寫入/ dev / sensordevice,而且還將授予對系統上幾乎所有內容的訪問權限(包括完全將其磚化的能力)

因此,您應該嘗試使用適當的組並僅對設備文件授予組的寫訪問權限,以僅對所需的資源添加細粒度的訪問。 有關如何編寫適當的udev規則的信息,請參見(例如) udev ,該規則將特定設備的寫訪問權限授予給定組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM