返回

文章详情

增强 X11 应用程序的安全性与 LXC

Hacker News2026年6月27日 21:27

2025-12-05 添加一层额外的安全性到网页浏览器或基于 Electron 的即时通讯应用程序不是很好吗?毕竟,如果浏览器被破坏,用户的整个主目录可能会面临风险。让我们通过使用 LXC 将应用程序与主机系统隔离来减少这种风险。此示例中使用的系统是 Arch Linux,但该过程应易于适应其他发行版。网络功能 首先,我们需要安装并预配置 LXC。安装以下软件包:# pacman -S lxc lxcfs 接下来,我们需要给予我们的 LXC 容器网络功能。为此,编辑 /etc/default/lxc 文件并在底部添加以下行:USE_LXC_BRIDGE="true" 现在我们可以启动 LXC 桥接接口。启用并启动相应的 systemd 单元:# systemctl enable lxc-net.service --now 现在应该有一个名为 lxcbr0 的新接口可用。通过以下命令验证:# ip a show dev lxcbr0 创建容器 完成前面的步骤后,我们可以创建我们的第一个应用程序容器。让我们开始创建初始配置。导航到 /etc/lxc 并创建一个新的配置文件。由于我正在创建一个网页浏览器容器,我将其命名为 www.conf。用您喜欢的编辑器打开文件并添加以下行:lxc.net.0.type = veth lxc.net.0.link = lxcbr0 lxc.net.0.flags = up lxc.net.0.hwaddr = 10:66:6a:xx:xx:xx lxc.idmap = u 0 100000 65536 lxc.idmap = g 0 100000 65536 前四行指定容器应使用我们之前创建的网络桥接。接下来,我们定义容器的 UID 和 GID 应如何映射到主机上的那些 ID。由于我们的目标是最大化安全性,我们将使用无特权容器。为此,我们将容器的 ID 映射到主机上不存在的 ID 范围。这确保即使恶意进程逃出容器,它在主机系统上的权限也是无效的。理解 idmap 这里详细解释了 idmap 配置是如何工作的:lxc.idmap = [type] [container_id] [host_id] [range] [type] – 指定正在映射的 ID 类型。选项:u 表示 UID,g 表示 GID [container_id] – 容器内要映射的第一个 UID/GID。在我们的情况下是 0(容器的根)。[host_id] – 主机上对应 container_id 的起始 UID/GID。在这里,容器内的 0 映射到主机上的 100000。ID 逐渐增加:container_id=1 → host_id=100001 container_id=1000 → host_id=101000 [range] – 要映射的 UID/GID 块的大小。我们使用 65536 来提供完整的标准 Linux ID 范围。示例映射表:| container_id | host_id | | ------------------ | ----------- | | 0 | 100000 | | 1 | 100001 | | 1000 | 101000 | | 65535 | 165535 | 接下来,我们需要告知 LXC 使用哪些 UID/GID 映射到新的容器。我们通过在 /etc/subuid 和 /etc/subgid 中添加以下行来做到这一点:root:100000:65536 这一行的意思是主机用户 root 可以为 LXC 容器创建 UID 映射在范围 100000–165535 内。这直接对应于我们之前创建的无特权容器配置。如果您想要创建另一个具有不同映射的容器,例如,将 container_id=0 映射到 host_id=200000,只需在 subuid/subgid 文件中添加另一行:root:100000:65536 root:200000:65536 启动容器 现在我们终于准备好使用我们准备好的配置文件创建容器。对于这个例子,我将使用 debian:trixie 映像作为基础:# lxc-create --config /etc/lxc/www.conf --name www -t download --- \ -d debian -r trixie -a amd64 验证容器是否正在运行:# lxc-ls -f 完成设置后,登录到容器:# lxc-attach www /bin/bash 在容器内,您可以像在常规 Linux 系统上一样安装所需的软件。例如,要运行 Firefox:# apt update # apt-get -y install firefox-esr 许多 x11 应用程序在 root 下运行不佳,因此最好创建一个专用用户在容器内运行应用程序:# /sbin/useradd -m -s /bin/bash www 设置 x11 基本容器配置完成,因此让我们直接开始配置以托管 x11 应用程序。首先,我们必须映射 x11 套接字。如果您当前在运行一个 X 服务器,您会在 /tmp/.X11-unix 下找到它。我们还需要给容器一个 .Xauthority,以便它可以对 X 服务器进行授权。仅仅挂载主机的文件是行不通的:每个 cookie 条目都是按主机名键入的,客户端仅使用主机名与其运行的机器匹配的条目的条目——在容器内,它不会匹配。解决办法是将条目的家族字段替换为 FamilyWild 通配符 ( ffff ),使其匹配任何主机,然后将其合并到容器的新 .Xauthority 中:: > /tmp/lxc.Xauthority && xauth nlist :0 | \ sed 's/^..../ffff/' | xauth -f /tmp/lxc.Xauthority nmerge - # 将 :0 替换为您的 $DISPLAY 值 最后,我们必须确保已设置以下环境变量:DISPLAY - 设置

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡