Permitir que un servicio systemd acceda a /sys/…/energy_uj: ¿el cambio de propietario de la regla udev no tiene ningún efecto?

Permitir que un servicio systemd acceda a /sys/…/energy_uj: ¿el cambio de propietario de la regla udev no tiene ningún efecto?

Me gustaría recopilar el uso de energía de mi CPU en algunas cajas de Linux "simples" (es decir, sin cosas sofisticadas como máquinas virtuales o mucho menos K8) a través de scaphandre o prometheus_node_exporter, ejecutándose como servicio systemd y no como root.

El problema: los /sys/…/energy_ujmódulos expuestos por el kernel intel_rapl_commonson propiedad predeterminada de root y modo 0400.

Mi primer acercamiento fue

ExecStartPre=-+/usr/bin/modprobe intel_rapl_common
ExecStartPre=+/usr/bin/find /sys/devices/virtual/powercap -name energy_uj -exec chmod g+r -R {} + -exec chown root:powercap {} +
DynamicUser=yes
Group=powercap

Si bien esto funciona (systemd aparentemente "crea" un grupo efímero (primario) basándose únicamente en la existencia de este archivo de servicio, que chmod puede utilizar), me gustaría un enfoque más limpio.

Entonces, creé las entradas necesarias en /usr/lib/sysusers.d/, /usr/lib/modules-load.d/para tener un grupo powercapy cargar el módulo del kernel automáticamente, y también agregué una regla udev:

ENV{SUBSYSTEM}=="powercap", ACTION=="add|change", MODE="0440", OWNER="root", GROUP="powercap"

pero esta regla parece no tener ningún efecto, los permisos y el propietario de todas las carpetas relacionadas son los mismos que antes. Sin embargo, parece que la regla se aplica correctamente, porque cuando lo hago:

ENV{SUBSYSTEM}=="powercap", ACTION=="add|change", OWNER="root", PROGRAM+="/usr/bin/find /sys$env{DEVPATH} -name energy_uj -exec chmod g+r -R {} + -exec chown root:powercap {} +"

esa regla funciona. Pero parece que he retrocedido hacia la solución original basada en systemd/ExecStartPre.

Entonces, lo siento, estoy haciendo dos preguntas en una:

  • ¿Hay alguna manera de hacer que la regla udev sea "limpia" sin PROGRAMcambiar los permisos ni la propiedad?
  • O, alternativamente, ¿existe otra forma igualmente "limpia" de obtener permisos de lectura?

información relacionada