Certo, consegui obter alguns conselhos no canal de IRC #openssh e aqui está o que faltava na minha solução:
O diretório especificado no ChrootDirectory deve ser de propriedade de root. Como no arquivo sshd_config acima eu especifiquei a variável% u para que cada usuário tenha sua própria base de diretório raiz em seu nome de usuário (por exemplo, testuser seria / mnt / inbound / testuser /), então todos esses diretórios devem ser de propriedade root. Este é, na verdade, o padrão quando eu crio os diretórios fazendo sudo mkdir /mnt/inbound/<username>
, pois o comando mkdir
é elevar via sudo
.
Então, o que eu precisava fazer era criar um subdiretório em /mnt/inbound/<username>
e dar a permissão desse diretório para o usuário. No meu caso eu chamei este diretório uploads
.
Então minha configuração foi ligeiramente alterada:
Match Group sftponly # Chroot the connection into the specified directory ChrootDirectory /mnt/inbound/%u # Force the connection to use the built-in SFTP support ForceCommand internal-sftp -d /uploads
A linha ForceCommand
foi alterada para incluir -d /uploads
, o que significa que o diretório padrão após o login do usuário é /uploads
. Observe que é /uploads
e não /mnt/inbound/%u/uploads
porque leva em conta que /mnt/inbound/%u
foi especificado como a nova raiz na linha anterior na configuração.
Se eu ChrootDirectory /mnt/inbound/
an especificar ForceCommand internal-sftp -d /%u
, eu posso fazer com que a pasta /mnt/inbound/<username>
seja de propriedade do usuário final, pois /mnt/inbound
é agora o novo diretório raiz que deve pertencer à conta raiz. No entanto, os usuários poderão navegar até a pasta pai e ver os nomes dos diretórios de todas as outras contas. Eu decidi contra isso:)