如何允许在启用 SELinux 的情况下访问特定 docker 容器的特定 X unix 套接字?我更喜欢设置为docker run --security-opt
.
在 Fedora 25 上,我发现 docker 守护进程--selinux-enabled
默认运行。从主机访问共享文件--volume
被拒绝。可以允许访问设置标志z
。例子:--volume $HOME:$HOME:rw,z
。到目前为止,这适用于常规文件。
比较原子博客:在 Docker 中使用 Volumes 会导致 SELinux 出现问题
该z
标志不足以允许连接到 X unix 套接字。
目前找到的解决方法:
--security-opt label=disable
。优点:这很简单,效果很好,而且我不需要更改主机上的 SELinux 策略。反对:针对这一容器的 SELinux 保护完全被禁用。(到目前为止,最好的解决方案)--ipc=host
。优点:简单,有效,SELinux 保持启用状态,无需更改策略。反对:禁用 IPC 命名空间,从而引发另一个安全问题并减少容器隔离。ausearch -c 'xfce4-about' --raw | audit2allow -M my-xfce4about
. 下面引用了创建的模块。亲:它有效。反对:所有容器都可以永远访问所有 X unix 套接字,我必须更改 SELinux …我想从已经运行的 X 会话中启动第二个 X 服务器。
在 debian 8 之前,我可以编辑/etc/X11/Xwrapper.config
并将行更改allowed_users=console
为allowed_users=anybody
. 这允许我作为非特权用户从 X 中运行 X。X 是 Xorg 的 setuid 包装器。
在 debian 9 中发生了变化,X 不再是 setuid 包装器,而是由 systemd 控制 X 所需的权限。该文件/etc/X11/Xwrapper.config
不再存在。
可以使用 package 恢复旧行为xserver-xorg-legacy
。然后/etc/X11/Xwrapper.config
必须包含行
allowed_users=anybody
needs_root_rights=yes
Run Code Online (Sandbox Code Playgroud)
另一种可能性是切换到 tty1...tty6 之一并运行 X,xinit xterm -- :1 vt1
而 vt1...vt6 必须遵守 tty1...tty6。(tty8...tty12 / vt8...vt12 不再可用。)
我想避免使用旧设置并避免切换到控制台。我想找回xinit xterm -- :1 vt8
.
如何设置 systemd 以允许非特权用户从已经运行的 X 中启动第二个 X 服务器?