Solución 1:
El comando que debe usar para cambiar el shell es chsh . El shell de nologin puede ser /sbin/nologin
o /usr/sbin/nologin
(compruebe cuál tiene mirando en /etc/shells
) pero /bin/false
probablemente sería una mejor opción.
chsh -s /bin/false user
Debería considerar configurar algo como scponly que hará exactamente lo que quieres.
Solución 2:
También debería poder hacerlo con OpenSSH 4.9 y versiones posteriores, con las que además puede chrootear al usuario para mayor seguridad.
En tu /etc/ssh/sshd_config
:
Match User user
ChrootDirectory /home/user
ForceCommand internal-sftp
AllowTcpForwarding no
Luego ejecuta:
chsh -s /bin/false user
chown root:root /home/user
mkdir /home/user/uploads
chown user /home/user/uploads
El usuario solo podrá escribir en /home/user/uploads.
https://debian-administration.org/article/590/OpenSSH_SFTP_chroot_with_ChrootDirectory
Solución 3:
Creo que la mejor manera es con mysecureshell
http://mysecureshell.sourceforge.net/en/index.html
Puede hacer chroot a un usuario con esto fácilmente e incluso limitar el ancho de banda si es necesario.