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

sta*_*fry 6 chroot users arch-linux

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

我在 Arch Linux x86_64 上运行。

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

我可以使用chroot /path/to/chroot. 没问题。

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

chroot --userspec=user:group /path/to/chroot
Run Code Online (Sandbox Code Playgroud)

这也适用于 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
Run Code Online (Sandbox Code Playgroud)

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

小智 2

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