当 chroot 为 i686 时,chroot 失败并显示 --userspec

当 chroot 为 i686 时,chroot 失败并显示 --userspec

我遇到了一个问题chroot...

我在 Arch Linux x86_64 上运行。

我有一个 64 位 chroot 和一个 32 位 chroot。它们是相同的,只是一个是 32 位,一个是 64 位。

我可以使用输入其中任何一个chroot /path/to/chroot。没问题。

如果我想以特定用户身份执行此操作,则命令是:

chroot --userspec=user:group /path/to/chroot

这对于 64 位 chroot 也适用。然而,对于 32 位 chroot 来说它失败了。它失败并显示状态 125 和消息chroot: invalid user

此外,chroot --userspec=uid:gid /path/to/chroot在 32 位和 64 位 chroot 中都可以正常工作(uid并且gid是所需用户和组的数字 ID)。

我不知道我是否做错了什么。有没有人有 32 位 chroot 并可以看看上面的内容是否可以重现?

所有命令均以 root 身份发出。用于 userspec 参数的用户和组需要在 chroot 内定义。

或者,如果我遗漏了一些东西,我会很高兴知道我哪里出了问题。

更新:我正在使用解决此问题的方法。假设$useruser:group我想要的(例如john:users),我这样做:

u=$(echo $user | awk -F ":" '{print $1}')
g=$(echo $user | awk -F ":" '{print $2}')
uid=$(grep $u /opt/chroot32/etc/passwd | awk -F ":" '{print $3}')
gid=$(grep $g /opt/chroot32/etc/group  | awk -F ":" '{print $3}')
echo "Using $uid:$gid in place of $user"
chroot --userspec="$uid:$gid" /opt/chroot32

这是有效的 - 它在 chroot 的 passwd 和组文件中查找所需的内容user:group,然后将它们用于 chroot。访问 64 位 chroot 时,不需要上述解决方法。

答案1

您不能使用目标 chroot 环境未知的用户名输入 chroot。将用户身份验证所需的所有文件复制到每个 chroot:/etc/passwd/etc/shadow/etc/nsswitch.conf、 以及最终/etc/pam.d/*.我

相关内容