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