Разрешить непривилегированному пользователю доступ к определенным привилегированным файлам

У меня есть система, на которой установлен защищенный Gentoo, и я установил Xorg, Fluxbox и Conky вместе, чтобы создать минимальный рабочий стол менеджера окон. В этой системе у меня есть 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 в каталогах как мой обычный пользователь все флаги rwx отображаются в виде вопросительных знаков даже после того, как я установил их в 0704 (drwx---r--). К сожалению, теперь я могу только запустить Conky от имени пользователя root с помощью правила sudo NOPASSWD, чтобы Fluxbox мог запускать его без проблем.

1 ответ

Если бы я был в вашей ситуации, я бы рассмотрел использование facl:

sudo setfacl -Rm u:1000:r /sys/class/

Где 1000 - UID пользователя, под которым запускается conky. Приведенный выше пример изменил бы все файлы в /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, но я не могу вспомнить, как мне удалось преодолеть эти препятствия.

Другие вопросы по тегам