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