环境:我正在运行 Fedora 24,其中包含 LXC (2.0.6) 容器并启用了 SELinux。
问题lxc-attach
:设置 Linux 容器并启动它们都很好,除了那些由 LXC 的自动启动功能(lxc.start.auto = 1
在其配置文件中)启动的容器之外,通过附加到容器也是如此。
对于任何我无法附加到的自动启动容器,我可以再次lxc-stop
附加lxc-start
它,然后我可以直接lxc-attach
连接到该容器。
我尝试过的:我已经检查了建议的解决方案错误报告,其中包括 dnf 安装 container-selinux 扩展,以及将正确的标签 ( container_runtime_exec_t
) 添加到/usr/bin/lxc-*
包含lxc-attach
.尽管也提出了可能的解决方案,但我尚未将标签添加到所有容器的根文件系统的基本文件夹的上下文中(chcon -Rt container_var_lib_t /var/lib/lxc
)。
输出:对于手动启动的容器,我可以毫无问题地附加(lxc-attach -n name_of_container
),但是当我尝试附加到在系统启动时自动启动的容器时,我在终端上收到一条消息,如下所示
lxc-attach: attach.c: lxc_attach_run_shell: 1325 Permission denied - failed to exec shell
在/var/log/audit/audit.log
文件中我收到一条消息,例如
type=AVC msg=audit(1484836169.882:2969): avc: denied { entrypoint } for pid=7867 comm="lxc-attach" path="/bin/dash" dev="sda3" ino=10289 scontext=system_u:system_r:unconfined_service_t:s0 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=file permissive=0
如果我查找运行容器的进程的标签 ( ps -eZ | grep lxc
),我会得到
system_u:system_r:unconfined_service_t:s0 2794 ? 00:00:00 lxc-autostart
对于自动启动的容器,与
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 6399 ? 00:00:00 lxc-start
用于手动启动的容器。
我的问题:我对 SELinux 有点陌生,但是从上面的输出中我可以看到,容器在系统启动后运行的上下文与我lxc-attach
运行的上下文有很大不同(前者上下文始于,scontext=system_u:...
而我当前的上下文来自tcontext=unconfined_u:...
上面的audit.log)。
这就是为什么我必须请人向我解释:什么样的不匹配导致这种权限被拒绝?并且:我可以解决这个问题吗?
答案1
我看起来在这次事件发生时,您/bin/dash
与无效的 selinux 上下文关联或根本没有关联。
这里 lxc-attach 抱怨它无法执行 shell:
lxc-attach: attach.c: lxc_attach_run_shell: 1325 Permission denied - failed to exec shell
SELinux avc 的拒绝似乎证实了上述内容:
type=AVC msg=audit(1484836169.882:2969): avc: denied { entrypoint } for pid=7867 comm="lxc-attach" path="/bin/dash" dev="sda3" ino=10289 scontext=system_u:system_r:unconfined_service_t:s0 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=file permissive=0
在上述事件中,有几点需要注意:
目标文件 ( path="/bin/dash"
) 最终具有tcontext=unconfined_u:object_r:unlabeled_t:s0
SELinux 用于故障转移场景的特殊上下文 ( )。在事件中,/bin/dash
位于设备上 inode 10289 的事件sda3
要么与无效上下文关联,要么根本没有上下文。
尝试在设备上 inode 10289 处restorecon -RvF
的上下文。完成后,查看上下文是否重置为除with之外的其他内容/bin/dash
sda3
unconfined_u:object_r:unlabeled_t:s0
ls -alZ
答案2
这对我有用:
ausearch -c 'lxc-attach' --raw | audit2allow -M my-lxcattach
semodule -i my-lxcattach.pp
# or
semodule -X 300 -i my-lxcattach.pp