SSH Permissions – Provide SFTP Read/Write Access to Folder and Subfolders

permissionssftpssh

I need to provide user access to Ubuntu 14.04 Server, only limited to certain folder. To enjoy the ssh security and not to open up new service and ports (ie, ftp), I'd like to stick with sftp. However, just creating a user and enabling ssh access is too generous – the user then can log on via ssh and see whatever there is that is viewable by everybody.

I need the user to find themselves in a specific directory after login, and, according to their privileges, read/write files, as well as create folders where permitted. No access to any file or directory above the user's "root" folder.

What would be the suggested method to achieve this? Is there some very restricted shell type for this? I tried with

$ usermod -s /bin/false <username>

But that does not let the user to cd into subfolders of their base folder.

Best Answer

If you want to restrict a user to SFTP, you can do it easily in the SSH daemon configuration file /etc/ssh/sshd_config. Put a Match block at the end of the file:

Match User bob
ForceCommand internal-sftp
ChrootDirectory /path/to/root
AllowTCPForwarding no
PermitTunnel no
X11Forwarding no

If the jail directory is the user's home directory as declared in /etc/passwd, you can use ChrootDirectory %h instead of specifying an explicit path. This syntax allows specifying a group of user accounts as SFTP-only — all users whose group as declared in the user database is sftponly will be restricted to SFTP:

Match Group sftponly
ForceCommand internal-sftp
ChrootDirectory %h
AllowTCPForwarding no
PermitTunnel no
X11Forwarding no
Related Question