Raspbian 中 ifplugd 和 udev 的 SELinux 策略

Raspbian 中 ifplugd 和 udev 的 SELinux 策略

我最近在我的 RaspberryPi 上启用了 SELinux 并收到了一些 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从哪里开始插件守护进程。当插件启动时,它会创建文件/var/run/ifplugd。界面.pid/var/运行是指向/跑步)但剧本/lib/udev/ifplugd.agent正在运行udev_tSEL 域。因此生成的文件具有错误的上下文:

$ 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运行时应具有域转换的权限插件。因此我制定了一项政策:

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

但我不知道这个决定是否好。请发表评论。

相关内容