LXD/LXC 容器中的 FreeIPA - 无法切换用户

LXD/LXC 容器中的 FreeIPA - 无法切换用户

该设置由一个 FreeIPA 服务器和一个客户端组成,它们都位于同一主机上的非特权 LXD 容器中。两个容器和主机都运行 Ubuntu 16.04。所有设置基本上都是 FreeIPA 默认设置,分别由ipa-server-install或生成ipa-client-install

无法切换到在 FreeIPA 目录中创建的用户:

# su testuser setgid: Invalid argument

# sudo -s -u testuser sudo: unable to change to runas gid: Invalid argument sudo: unable to change to runas gid: Invalid argument root is not in the sudoers file. This incident will be reported

(root 在 sudoers 中并且能够与本地用户一起执行上述命令。)

测试用户是 Realm 内的有效用户,能够kinit,并且能被两个系统识别: # id testuser uid=161200001(testuser) gid=161200001(testuser) groups=161200001(testuser)

sudo 似乎没有在 auth.log 中生成任何相关条目,但是 su 却生成了:

su[1887]: root 用户成功 su testuser

su[1887]: + ??? 根:测试用户

su[1887]: 用户“testuser”的组 ID 错误“161200001”: 参数无效

谷歌搜索只显示 cygwin+sshd 问题,原因是参数无效,这似乎不太合适。FreeIPA 选择的 ID 范围低于 Linux 的 UID 限制 2^32,即使容器偏移量为 100.000。这里可能存在什么问题?有什么想法可以进一步挖掘吗?

编辑1:相同的服务器/客户端组合在两台 VirtualBox 机器上运行良好。

编辑2:我认为我将原因缩小到了容器中的 IPA 客户端,但在 LXD 之外的 IPA 服务器上运行该问题仍然存在。

答案1

解决了!分享解决方案,以防遇到同样问题的人偶然发现此帖子。

在默认配置中,LXD/主机系统没有为其容器分配足够的 UID/GID,因此您无法有效地成为 FreeIPA 随机挑选的 ID 较高的用户。

文件/etc/subuid/etc/subgid具有读取的条目root:100000:65536,其中记录了 LXD 在编写时将有效使用的 ID。范围在 100000-165536 内的主机 UID/GID 映射到 0-65536 之间的容器 ID。容器尝试使用 ID 161200001(在我的情况下),远远超出了该边界。

根据本文https://insights.ubuntu.com/2015/10/30/nested-containers-in-lxd/,我修改了映射的 ID,并指定了 FreeIPA 可以使用哪些 ID。对 sub*id-files 的更改可能仅在初始化容器之前有效。

具体来说,这个配置有效:

LXD 主机:

/etc/subuid:根:5000000:2500000

/etc/subgid:根:5000000:2500000

带有 FreeIPA 服务器的 LXD 容器:

使用以下代码初始化服务器ipa-server-install --idstart=1000000 --idmax=2000000

此处,目录 ID 的范围为 1.000.000 - 2.000.000,而客户端有 2.500.000 个可用 ID。由于偏移量为 5.000.000,主机也可能加入该 FreeIPA 目录。根据需要调整数字,YMMV。

相关内容