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

724
user428531

У меня есть система, на которой установлен защищенный 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 мог запускать его без проблем.

2
Имейте в виду, что `sudoers` допускает очень мелкозернистую конфигурацию. Вы должны ограничить доступ к любому скрипту / бинарному файлу (или его оболочке). Возможности могут быть другим маршрутом, но я не нашел ни одного, который бы отвечал вашим насущным потребностям (также у переводчика должна быть возможность, а не сценарий). И последнее, но не менее важное: вы рассматривали возможность запуска задания CRON или около того, чтобы установить ACL для этих pdeudo-файлов, предполагая, что это разрешено ядром. Таким образом, вы можете иметь тесно связанный контроль доступа, не выдавая root через `sudoers`. 0xC0000022L 9 лет назад 0
@ 0xC0000022L Есть ли документация или sudo может ограничить процесс, запускаемый с помощью sudo, таким образом, что он может получить доступ только к определенным файлам, не допуская его запуска приложений, или имея разрешение на что-либо, что ему не разрешено специально читать? Если это так, это немедленно решит мою проблему. user428531 9 лет назад 0

1 ответ на вопрос

0
Jacob Margason

Если бы я был в вашей ситуации, я бы рассмотрел использование 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, но я не могу вспомнить, как я преодолел эти препятствия с разрешениями.

Похожие вопросы