A pesquisa em /etc/passwd está correta para contas de usuários locais (a menos que o administrador do sistema tenha se esforçado para dificultar as coisas). A resposta geral correta é procurar no banco de dados do usuário que contém a conta do usuário, por exemplo, LDAP. A maioria dos sistemas modernos usa NSS para listar os bancos de dados de usuários, então verifique /etc/nsswitch.conf no seu sistema se você acha que pode haver contas não locais.
Do ponto de vista de um aplicativo, a resposta correta é que o diretório inicial é qualquer que seja a variável de ambiente HOME .
Programas de login ( login , sshd , X gerenciadores de exibição, etc.) normalmente configuram a variável de ambiente HOME para o diretório inicial do usuário que está efetuando login. Programas de alteração de usuário de “alto nível”, como su e sudo change HOME para (com sudo, isso depende da configuração e das opções da linha de comandos). Então, normalmente, a definição para “diretório inicial do usuário atual” corresponde à combinação de “diretório pessoal do usuário” e “usuário atual”.
Mas chroot não muda HOME , portanto, sua sessão no chroot é herdada da variável de ambiente HOME no processo pai, o que não é surpresa /root . No bash, como qualquer outro shell, ~ se expande para o valor de HOME , padronizando a consulta do banco de dados do usuário se HOME não estiver definido.
Solução: desatualizado HOME .
env -u HOME chroot --userspec=test path/to/subsystem/ /bin/bash