Я недавно включил 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
Но я не знаю, хорошо ли это решение. Пожалуйста, оставьте комментарий.