Estou com um problema com chroot
...
Estou rodando no Arch Linux x86_64.
Eu tenho um chroot de 64 bits e um chroot de 32 bits. Eles são idênticos, exceto que um é de 32 bits e um é de 64 bits.
Eu posso inserir qualquer um deles usando chroot /path/to/chroot
. Sem problemas.
Se eu quiser fazer isso como um usuário específico, o comando é:
chroot --userspec=user:group /path/to/chroot
Isso também funciona bem para o chroot de 64 bits. No entanto, ele falha para o chroot de 32 bits. Ele falha com status 125 e a mensagem chroot: invalid user
Além disso, fazer chroot --userspec=uid:gid /path/to/chroot
funciona bem em chroots de 32 e 64 bits ( uid
e gid
são os IDs numéricos do usuário e grupo requeridos).
Não sei se estou fazendo algo errado. Existe alguém que tenha um chroot de 32 bits e possa ver se o acima pode ser reproduzido?
Todos os comandos são emitidos como root. O usuário e o grupo usado para o argumento userspec precisam ser definidos dentro do chroot.
Ou se eu estiver sentindo falta de algo, por favor, gostaria de saber onde estou indo errado.
Atualização: estou usando uma solução alternativa para esse problema. Supondo que $user
tenha o user:group
desejado (por exemplo, john:users
), eu faço isso:
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
Isso funciona - ele procura o user:group
desejado dentro dos arquivos passwd e group do chroot e então usa aqueles para o chroot. E a solução acima não é necessária ao acessar um chroot de 64 bits.