I recently installed a NAS server in my home and wanted to give my family and relatives access to it so that they could use it as a remote backup server for photos and stuff. To keep it as secure as possible I only wanted to give them SFTP access.
(All commands below are executed as root.)
First I created a group to group them together and then added the users to that group. I choose to disable their password as I only allow logins using SSH keys.
addgroup sftponly # Repeat the line below for each user adduser --disabled-password --ingroup sftponly ausername
As for the upload directory I wanted them to upload their data to my raid1 volume mounted under /data/pool1. Since OpenSSH has some requirements for the permission on the directories used as chroot I created the following directory layout.
cd /data/pool1 mkdir -m 751 sftp ln -s . sftp/home # Repeat the lines below for each user mkdir -m 700 sftp/ausername chmod ausername.root sftp/ausername
The home symlink is there to make the initial SFTP directory /ausername and the sftp directory is created with 751 to disallow directory listing in the top directory.
Then, as “all components of the pathname must be root-owned directories that are not writable by any other user or group” and /data/pool1 is not root owned I created a bind mount by adding the following to /etc/fstab.
/data/pool1/sftp /srv/sftp bind bind 0 0
Before the initial mount, the directory must be created.
mkdir /srv/sftp mount /srv/sftp
Then, the final part was to configure OpenSSH by adding the following lines at the end of /etc/ssh/sshd_config.
Match Group sftponly ChrootDirectory /srv/sftp ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
Remember to restart the server afterwards.
