Я использую полностью установленную по умолчанию версию Debian Buster. Я установил munin-node, который сообщает о себе как версию 2.0.49.
У меня есть собственный плагин /etc/munin/plugins
. Это сценарий оболочки, который просто выводит значение из файла в домашний каталог пользователя: /home/peter/value.txt
.
Я могу netcat localhost 4949
для взаимодействия с узлом munin.
Если я выпущу list
команда, затем мой плагин является включен вместе со всеми значениями по умолчанию, поэтому munin-node распознает, что плагин существует и является исполняемым, и т. д. Но когда я пытаюсь запустить плагин, выдавая fetch
, я получаю ошибку отказа в разрешении, когда плагин пытается открыть файл в домашнем каталоге пользователя. Чтобы повторить; плагин сам выполняется, но не может прочитать файл в домашнем каталоге.
Некоторые факты:
Работает на Debian 9 (Джесси), где munin-node сообщает о себе как о версии 2.0.33-1.
Если я взломаю плагин, чтобы напечатать жестко запрограммированное значение, он заработает.
Файл в домашнем каталоге пользователя имеет разрешения -rw-r--r--
. Сам домашний каталог имеет разрешения drwxr-xr-x
.
Если я munin-run
плагин из командной строки как root, он работает правильно.
Если я перееду value.txt
к /etc/munin/plugins
или usr/share/munin/plugins
тогда это работает.
Google предполагает, что если плагин работает с munin-run
а не с munin-node
то скорее всего виноват SELinux. Я не использую SELinux, AFAIK.
Если я service munin-node stop
и беги munin-node
вручную в командной строке как root, он работает правильно.
htop
показывает, что плагин запущен от имени root. Я могу добавить запись в /etc/munin/plugin.conf.d
и запустить его от имени пользователя, чей это домашний каталог, но это не имеет никакого эффекта. (Под этим я подразумеваю; я вижу, что плагин сейчас работает как этот пользователь, но по-прежнему возникает ошибка отказа в разрешении).
Я считаю, что есть что-то в том, как служба запускается Debian /etc/init.d/munin-node
скрипты, вызывающие это. Возможно AppArmour?
Ответ заключается в том, что пакет munin-node в Debian 10 включает /lib/systemd/system/munin-node.service
, который устанавливает ProtectHome=true
. В пакете munin-node Debian 9 нет этого файла.
Настройка ProtectHome=read-only
это одно решение, или даже ProtectHome=false
чтобы включить доступ для записи. Однако ProtectHome
флаг существует не зря. Настройка плагина для чтения данных из другого места (за пределами /home
) возможно лучшее решение.
Видеть Вот для обсуждения проблемы, а также компромисса между безопасностью и удобством.