我最近在我的 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
但我不知道这个决定是否好。请发表评论。