我有一個運行強化的系統根圖我已經安裝了奧格,通量盒, 和康基一起建立一個最小的視窗管理器桌面。在這個系統中,我有 2 個主要用戶,root
以及我登入的正常運作用戶。
問題是 Conky 試圖從內部存取熱量和電池信息/sys/class/thermal/thermal_zone1/temp
,/sys/class/power_supply/BAT1/uevent
並且出現權限被拒絕錯誤,導致我想要顯示的數據顯示為空或為零值。這些是兩個檔案的權限值
File: '/sys/class/thermal/thermal_zone0/temp'
Size: 4096 Blocks: 0 IO Block: 4096 regular file
Device: 12h/18d Inode: 3719 Links: 1
Access: (0444/-r--r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-03-14 20:14:54.143855495 +0000
Modify: 2015-03-14 20:14:54.143855495 +0000
Change: 2015-03-14 20:14:54.143855495 +0000
Birth: -
File: '/sys/class/power_supply/BAT1/uevent'
Size: 4096 Blocks: 0 IO Block: 4096 regular file
Device: 12h/18d Inode: 3907 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-03-14 19:23:15.227055847 +0000
Modify: 2015-03-14 19:23:15.227055847 +0000
Change: 2015-03-14 19:23:15.227055847 +0000
Birth: -
有沒有一種方法可以讓 Conky 存取特定的特權文件,而無需透過 授予整個進程root
存取權限sudo
?我可以設定一個 sudoers 規則以允許它與 一起運行NOPASSWD
,但給予 Conky 完全 root 權限並不是我想要做的。
最好我只想授予進程對這些檔案的讀取權限。我可以簡單地使這些文件可供世界讀取而不會產生負面影響嗎?
編輯:我找到問題的根源了。問題不在於它們本身的文件,因為它們已經是世界可讀的,而是它們的包含目錄僅由用戶 drwx 。如果我允許/sys/class/thermal
和/sys/class/power_supply
以及/sys/class
目錄變得全世界可讀,是否會有任何負面影響?
Edit2:事實證明,強化功能之一可以防止一般使用者在沒有 root 權限的情況下存取這些檔案。我得出這個結論的原因是,當我ls -alh
以普通使用者身分在目錄上運行時,即使將它們設為 0704 (drwx---r--),所有 rwx 標誌仍顯示為問號。不幸的是,我現在唯一的選擇是透過 NOPASSWD sudo 規則以 root 身分執行 Conky,這樣 Fluxbox 就可以輕鬆啟動它。
答案1
如果我處於你的情況,我會考慮使用 facl's:
sudo setfacl -Rm u:1000:r /sys/class/
其中 1000 是運行 conky 的使用者的 UID。上面的範例會將 /sys/class 下的所有文件更改為可由 UID 1000 下運行的任何進程讀取,但如果選擇特定文件,則可能會受到更多限制。
如果您只是想讓上面提到的兩個文件可讀:
sudo setfacl -m u:1000:rx /sys
sudo setfacl -m u:1000:rx /sys/class/
sudo setfacl -m u:1000:r /sys/class/thermal
sudo setfacl -m u:1000:r /sys/class/power_supply
我還有一台運行 Gentoo 強化內核的機器,我不確定它如何處理存取控制列表,我將在測試後更新這個答案。
我也有 conky 運行,但我不記得我是如何繞過這些權限障礙的。