我有一个运行强化的系统Gentoo我已经安装了韓國,Fluxbox, 和康基一起创建一个最小窗口管理器桌面。在这个系统中,我有 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: -
root
有没有办法允许 Conky 访问特定的特权文件,而无需通过授予整个进程访问权限sudo
?我可以设置 sudoers 规则以允许它使用 运行NOPASSWD
,但授予 Conky 完全 root 权限并不是我想要做的。
我最好只授予进程对这些文件的读取权限。我能否简单地让这些文件可供所有人读取而不会产生负面影响?
编辑:我找到了问题的根源。问题不在于文件本身,因为它们已经是全球可读的,而是它们包含的目录,只有用户才能 drwx。如果我允许/sys/class/thermal
和/sys/class/power_supply
以及/sys/class
目录成为全球可读的,会有什么负面影响吗?
编辑 2:事实证明,其中一项强化功能阻止普通用户在非 root 身份的情况下访问这些文件。我得出这个结论的原因是,当我ls -alh
以普通用户身份在目录上运行时,所有 rwx 标志都显示为问号,即使我将它们设置为 0704 (drwx---r--)。不幸的是,我现在唯一的选择是通过 NOPASSWD sudo 规则以 root 身份运行 Conky,这样 Fluxbox 就可以轻松启动它。
答案1
如果我处于你的情况,我会考虑使用 facl:
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,但我不记得如何绕过这些权限障碍。