允许非特权用户访问特定的特权文件

允许非特权用户访问特定的特权文件

我有一个运行强化的系统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,但我不记得如何绕过这些权限障碍。

相关内容