Resposta curta
Isso não é possível, mas defina /test1
como solução alternativa.
Resposta longa
openssh
exige que os componentes ChrootDirectory
e todos os caminhos que levam a ele sejam de propriedade da raiz e não possam ser gravados por outras pessoas. Esta é uma medida de segurança para garantir que ChrootDirectory
não possa ser manipulado de forma mal-intencionada e, por exemplo, substituído por um link simbólico para outro lugar completamente diferente. Se o ChrootDirectory
ou qualquer um de seus diretórios pai não pertencerem à raiz ou forem grupo ou mundo gravável, sshd
recusará o login. Se isso acontecer, você verá algo assim em /var/log/auth.log
:
Jun 10 07:54:01 ubuntu-bionic sshd[2251]: fatal: bad ownership or modes for chroot directory "/var/base/test1"
Jun 10 07:54:01 ubuntu-bionic sshd[2173]: pam_unix(sshd:session): session closed for user test1
A mensagem de erro deve apontar você na direção certa.
Isso também é explicitamente declarado na página do manual sshd_config :
ChrootDirectory
Specifies the pathname of a directory to chroot(2) to after authentication. At session startup sshd(8) checks that all components of the pathname are root-owned directories which are not writable by any other user or group. After the chroot, sshd(8) changes the working directory to the user's home directory. [...]For safety, it is very important that the directory hierarchy be prevented from modification by other processes on the system (especially those outside the jail). Misconfiguration can lead to unsafe environments which sshd(8) cannot detect.
Solução alternativa
Você pode, no entanto, definir o diretório inicial do usuário como /test1
( sudo usermod test1 -d /test1
), assim, depois que o chroot
for aplicado, o diretório será alterado para /var/base/test1/test1
. Dessa forma, o usuário não precisa mudar para test1
, mas inicia sua sftp
session nesse diretório.
$ sftp -P 2222 test1@localhost
test1@localhost's password:
Connected to localhost.
sftp> pwd
Remote working directory: /test1