/etc/passwd
devem refletir os caminhos não-chrooted, ou você terá problemas em geral. Nesse caso, sshd
verifica as chaves autorizadas antes de executar o chroot, portanto, ele precisa encontrá-las usando um caminho não chroot. É por isso que sua primeira tentativa não funciona.
Segunda coisa a ser notada: Em sua primeira configuração, quando david se conecta, ele inicia em /var/chroot-home/david
, mas na verdade ele é chrooted para /var/chroot-home
, o que significa que se ele digitar cd ..
, ele poderá ver todos os outros diretórios (embora não o seu conteúdo, se as permissões estiverem corretas). Isso pode ou não ser um problema para você, mas é bom estar ciente disso.
Se estiver acima, você pode usar o seu primeiro sshd_config, configurar o diretório home do david para /var/chroot-home/david
no arquivo passwd
e adicionar o seguinte link simbólico para que o david ainda inicie em seu diretório home:
cd /var/chroot-home
mkdir var
ln -s .. var/chroot-home
Esse link simbólico irá garantir que você possa acessar um diretório inicial usando o mesmo caminho, esteja ou não no chroot.
No entanto, se você não quiser que os clientes vejam os nomes dos diretórios pessoais uns dos outros, será necessário fazer o chroot no próprio diretório inicial, como em sua segunda solução. Mas, como você viu, sshd
não gosta disso (porque, por várias razões sutis, é perigoso permitir que um usuário grave acesso à raiz de um sistema de arquivos). Infelizmente, você está quase sem sorte aqui. Uma (kludgy) solução para isso é criar um subdiretório files/
em cada diretório inicial e fornecer ao cliente acesso de gravação para ele.
Outra opção pode ser chroot para / var / chroot-home de qualquer maneira e nomear os diretórios base de forma diferente, por exemplo, usando o número de ID do usuário em vez do nome.