该设置由一个 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。