Я недавно включил SELinux на моем RaspberryPi и получил некоторые отказы AVC.

Я читаю документацию SEL и решил некоторые из них. Но я не уверен, что сделал все правильно. Поэтому, пожалуйста, пересмотрите мое решение.

AVC:

type=AVC msg=audit(1441426438.990:26): avc:  denied { read write } for  pid=2176
 comm="ifplugd" name="ifplugd.eth0.pid" dev="tmpfs" ino=6593
 scontext=system_u:system_r:ifplugd_t:s0
 tcontext=system_u:object_r:udev_var_run_t:s0
 tclass=file permissive=1
type=AVC msg=audit(1441426438.990:27): avc:  denied  { open } for  pid=2176
 comm="ifplugd" path="/run/ifplugd.eth0.pid" dev="tmpfs" ino=6593
 scontext=system_u:system_r:ifplugd_t:s0
 tcontext=system_u:object_r:udev_var_run_t:s0
 tclass=file permissive=1
type=AVC msg=audit(1441426438.990:28): avc:  denied  { lock } for  pid=2176
 comm="ifplugd" path="/run/ifplugd.eth0.pid" dev="tmpfs" ino=6593
 scontext=system_u:system_r:ifplugd_t:s0
 tcontext=system_u:object_r:udev_var_run_t:s0
 tclass=file permissive=1
type=AVC msg=audit(1441426438.990:29): avc:  denied  { signull } for  pid=2176
 comm="ifplugd"
 scontext=system_u:system_r:ifplugd_t:s0
 tcontext=system_u:system_r:udev_t:s0-s0:c0.c1023
 tclass=process permissive=1

Во время загрузки системы udev выполняет скрипт /lib/udev/ifplugd.agent, где он запускает ifplugd deamon. Когда запускается ifplugd , он создает файлы /var/run/ifplugd. interface.pid (/var/run - символическая ссылка на /run). Но скрипт /lib/udev/ifplugd.agent работает в домене SEL udev_t . Таким образом, полученный файл имеет неверный контекст:

$ ls -lZ /run/ifplugd.eth0.pid
-rw-r--r--. 1 root root system_u:object_r:udev_var_run_t:s0 5 Sep  5 07:13 /run/ifplugd.eth0.pid

Правильный контекст должен быть:system_u:object_r:ifplugd_var_run_t:s0

Я решил, что udev должен иметь разрешение на переход домена при запуске ifplugd. Итак, я создал политику:

module rpi-ifplugd 1.0.0;
require {
   type ifplugd_t;
   type udev_t;
   type ifplugd_exec_t;
   class process transition;
}
type_transition udev_t ifplugd_exec_t : process ifplugd_t;

И это сработало!

$ ls -lZ /run/ifplugd.eth0.pid
-rw-r--r--. 1 root root system_u:object_r:ifplugd_var_run_t:s0 5 Sep  5 08:09 /run/ifplugd.eth0.pid

Но я не знаю, хорошо ли это решение. Пожалуйста, оставьте комментарий.

0