我遇到了一个问题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 内定义。
或者,如果我遗漏了一些东西,我会很高兴知道我哪里出了问题。
更新:我正在使用解决此问题的方法。假设$user
有user: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/*
.我