我想为特定 UID 和 GID 创建并启动 LXC 容器,用于以下目的。
登录到 root 用户(sudo 用户),执行 lxc-create 容器,然后使用相同的 root 用户 id 执行 lxc-start 容器。当盯着容器时,我需要以低特权(un-priv)用户ID启动容器内的所有进程,其中对用户的访问仅限于容器而不是主机。基本上当我说 ps -axu 时,我应该是能够查看所有容器进程的低权限用户 ID。
PS:我的主机是带有 ubuntu 16.04 LTS 的虚拟机,它是 systemd init 系统,我的容器(类型 busybox)将使用 systemd 服务启动。为此,我修改了 busybox 模板,如下代码:
lxc.init_cmd=/lib/systemd/systemd
并且还删除了 busybox 默认模板中所有 rcS 和 inittab 相关脚本
对于用户 ID 映射,我在模板代码中进行了如下更改:
lxc.id_map=u 0 165536 65536
lxc.id_map=g 0 165536 65536
之后我就按照以下步骤操作
使用以下命令正常创建容器(我交叉检查了 /var/lib/lxc/testecho_uid/config 中的配置文件,以确保我的所有模板更改都得到反映,发现没问题)代码:
sudo lxc-create -n testecho_uid -t busybox_systemd_uid
输入以下命令以使用前台代码启动容器:
sudo lxc-start -n testecho_uid -F
错误是:
vijay@vijay-VirtualBox:~$ sudo lxc-start -n testecho_uid -F
lxc-start: cgfsng.c: cgfsng_create: 1072 No such file or directory - Failed to create /sys/fs/cgroup/systemd//lxc/testecho_uid: No such file or directory
lxc-start: cgfsng.c: cgfsng_create: 1072 No such file or directory - Failed to create /sys/fs/cgroup/systemd//lxc/testecho_uid-1: No such file or directory
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: start.c: lxc_spawn: 1161 failed to set up id mapping
lxc-start: start.c: __lxc_start: 1353 failed to spawn 'testecho_uid'
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/systemd//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/perf_event//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/hugetlb//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/cpu//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/memory//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/pids//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/blkio//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/cpuset//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/net_cls//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/devices//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/freezer//lxc/testecho_uid-2
lxc-start: lxc_start.c: main: 344 The container failed to start.
lxc-start: lxc_start.c: main: 348 Additional information can be obtained by setting the --logfile and --logpriority options.
谁能告诉我这里是否遗漏了什么。
以下是我的 ubuntu 16.04 uid 和 gid 代码设置:
vijay@vijay-VirtualBox:~$ sudo cat /etc/subgid
vijay:100000:65536
usrlxc:165536:65536
vijay:165536:65537
代码:
vijay@vijay-VirtualBox:~$ sudo cat /etc/subuid
vijay:100000:65536
usrlxc:165536:65536
vijay:165536:65537
如果上面我的问题不清楚,请参阅下面另一个与同一场景类似的问题。有没有办法从 root 用户或 sudo 用户访问(lxc start & Attach)非特权容器。也就是说,我已经使用 lxc 用户(不是 sudo 用户/root 用户)通过登录 lxc 用户创建、启动并附加了非特权容器,没有任何问题。现在我想从 root 用户或 sudo 用户启动并附加 lxc 用户创建的非特权容器。
那可能吗?如果是,请告诉我该怎么做?我从 sudo/root 用户检查了 lxc-ls ,它只列出了 sudo 用户创建的容器,不显示 lxc 用户创建的容器。
或者
特权容器的所有进程/线程都可以在执行 lxc-start 时或通过任何方式由 root/sudo 用户针对特定 UID(例如:lxc 用户)执行/运行?我还尝试在配置中提供以下lxc用户uid和gid(最终更改busybox模板)。它给出了上面的评论错误。代码: lxc.id_map=u 0 165536 65536 lxc.id_map=g 0 165536 65536 我尝试了所有可能的方法,但没有运气,请教我这个主题。
下面是我的 ubuntu 桌面 lxc 用户 --> “usrlxc” 中的用户详细信息,我在 un-priv 容器创建实验中创建了该用户。 Sudo 用户 --> “vijay” - 这是我的 ubuntu 16.04 虚拟机中的 sudo 用户。 root 用户 --> # 你们都知道如果我的 ubuntu 设置或 lxc 配置中有任何信息,请告诉我
答案1
到目前为止,我没有找到任何选项来映射特权容器的 UID/GIP 实验 LXC 。由此我可以理解,UID/GID 映射只能针对非特权容器完成。如果我错了,请纠正我。换句话说,我们无法从 root 用户(或 sudo 用户)访问 un-priv 容器,也就是说,如果我们执行 sudo lxc-ls ,它只会列出 root/sudo 用户创建的容器,而不会显示 un-priv 容器由低权限用户(在我的例子中为 usrlxc)创建。因此,我们不能从 root/sudo 用户执行 lxc-start/attach un-priv 容器。
所以,我正在尝试使用 systemD 服务文件来管理以实现。尚未完全完成。我可以做 lxc-create /stop 。但面临从 systemD 服务为特定用户执行 lxc-start 的问题,这个问题很快就能解决。如果您有更好的解决方案从 root/sudo 登录启动非特权容器而不是 systemD 服务方法,请告诉我。
答案2
我有类似的问题,我很难理解地图 UID/GIP。如果运行lxc-ls
,命令仅返回由执行该命令的用户创建的容器。 sudolxc-ls
仅返回由 root 或 sudoer 创建的容器列表。