A diretiva ChrootDirectory espera que o diretório chroot seja de propriedade de root e não seja gravável por mais ninguém. Então você não pode jailar um usuário para um diretório e permitir que o usuário tenha permissão para gravar nesse diretório. Você pode:
Chroot para casa, faça o upload para upload/
O primeiro conjunto de comandos que você tentou está correto:
sudo chown root /home/james
sudo chmod go-w /home/james
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwX /home/james/upload
No entanto, a opção em sshd_config seria:
Match Group sshusers
ChrootDirectory %h
ForceCommand internal-sftp
( %h é substituído pelo diretório inicial do usuário que está sendo autenticado, equivalente a /home/%u na maioria dos casos.)
Além disso, para limitar a visibilidade das pastas em /home/james e restringir a permissão de gravação, use as opções recursivas para chown e chmod no primeiro comando para /home/james e remova read permissions. O conjunto modificado ficaria assim:
sudo chown root /home/james -R
sudo chmod go-rwx /home/james -R # Disallow traversing any directory in home
sudo chmod go+x /home/james # Allow traversing this directory
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwx /home/james/upload
Agora, o usuário só deve conseguir acessar /home/james/upload ou /upload .
Chroot para upload, upload para upload/some_directory
Quase o mesmo que acima, substituindo /home/james/ por /home/james/upload e /home/james/upload por /home/james/upload/some_directory . Nenhum ganho particular.
Altere o diretório inicial de james para /upload
O comportamento usual do ChrootDirectory é: "Depois do chroot, o sshd (8) altera o diretório de trabalho para o diretório pessoal do usuário."
Então, alteramos o diretório inicial de james :
usermod -d /upload user
Em seguida, defina o ChrootDirectory para /home/%u . Use as mesmas restrições na primeira opção.