chroot가 i686인 경우 --userspec으로 인해 chroot가 실패합니다.

chroot가 i686인 경우 --userspec으로 인해 chroot가 실패합니다.

문제가 발생했습니다 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( uidgid필수 사용자 및 그룹의 숫자 ID) 모두에서 잘 작동합니다.

내가 뭔가 잘못하고 있는지 모르겠습니다. 32비트 chroot를 가지고 있고 위의 내용이 재현 가능한지 확인할 수 있는 사람이 있습니까?

모든 명령은 루트로 실행됩니다. userspec 매개변수에 사용되는 사용자 및 그룹은 chroot 내에 정의되어야 합니다.

아니면 내가 뭔가를 놓친 경우 내가 어디에서 잘못되었는지 알고 싶습니다.

업데이트: 저는 이 문제에 대한 해결책을 사용하고 있습니다. 내가 원하는 것이 $user있다고 가정하면 (예를 들어 ) 다음과 같이 합니다.user:groupjohn: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 및 group 파일에서 필요한 것을 찾은 다음 user:groupchroot에 사용합니다. 64비트 chroot에 액세스하는 경우 위의 해결 방법은 필요하지 않습니다.

답변1

대상 chroot 환경에 알려지지 않은 사용자 이름으로 chroot를 입력할 수 없습니다. 사용자 인증에 필요한 모든 파일을 각 chroot에 복사합니다: /etc/passwd, /etc/shadow, /etc/nsswitch.conf, 및 /etc/pam.d/*finally.i

관련 정보