I was hoping someone could help me with this problem
"Trying to setup a SFTP user with limited access."
I'm running Ubuntu 16.04.2 x64 on a DigitalOcean server. I've posted this on the DigitalOcean forums too.
Current setup
- I've setup my server using ServerPilot.
- The
system user
is calledserverpilot
serverpilot
has root privileges,- The
home
folder is located at:/srv/users/serverpilot
- The
public
folder is located at:/srv/users/serverpilot/apps/test-app/public/
What I want to do
I want to add a second user, but restrict what the user can do:
- Only access a single folder called
newsletters
, it will be in thepublic
folder. - The user needs to be able to upload, delete and rename files via SFTP
- The user must not be able to navigate away from the
newsletters
, folder
This is the full path to the newsletters
folder:
/srv/users/serverpilot/apps/test-app/public/newsletters
What I've done so far
I've followed this guide How do I restrict a user to a specific directory? by Maxamilian Demian (@Maxoplata), there's a great reply by Jonathan Tittle (@jtittle).
However, I'm still having problems logging in via SFTP
I've listed out all the steps I've done - hopefully someone with more experience will be able to spot my error(s)!
1. Created a new user
- Logged in as
root
- Created a new user called
user-sftp-only
adduser user-sftp-only
- I can check the user has been created by running
compgen -u
user-sftp-only
is at the bottom of the list- I can also see what the path of the user is and shell access by running:
grep user-sftp-only /etc/passwd
outputs:user-sftp-only:x:1004:1007:,,,:/home/user-sftp-only:/bin/bash
2. Give new user root privileges
- Give new user
user-sftp-only
root privileges gpasswd -a user-sftp-only sudo
- Logout as
root
3. Create a new directory
- Logged in as
user-sftp-only
- Create a new directory in
public
callednewsletters
: cd /srv/users/serverpilot/apps/test-app/public/
- Followed by:
sudo mkdir newsletters
4. Check directory permissions
Still inside the public
folder from the previous step, I run
$ ls -al
drwxr-xr-x+ 3 serverpilot serverpilot 4096 Mar 7 15:26 .
drwxr-xr-x+ 3 serverpilot serverpilot 4096 Mar 3 16:22 ..
-rw-r--r--+ 1 serverpilot serverpilot 3393 Mar 3 16:22 index.php
drwxrwxr-x+ 2 root root 4096 Mar 7 15:26 newsletters
From reading various DigitalOcean posts, I know I need to create a group and assign my new user user-sftp-only
to that group, Then change root root
to the name of my user and group.
5. Create a new group
- Logged in as
user-sftp-only
sudo groupadd group-sftp-only
- I can check the group has been created by running
compgen -g
group-sftp-only
is at the bottom of the list
Note: I notice my new user called user-sftp-only
is also in this list?
6. Add user to the group
- Logged in as
root
- Added the user
user-sftp-only
to a group calledgroup-sftp-only
Doing this means it's no longer possible to SSH in as user
user-sftp-only
usermod -g group-sftp-only -d /srv/users/serverpilot/apps/test-app/public/newsletters -s /sbin/nologin user-sftp-only
-g
specifies the group name-d
specifies the users home directory-s
specifies shell access (/sbin/nologin means SSH is disabled for this user)
7. Verify the changes to the user
Logged in as root
$ grep user-sftp-only /etc/passwd
user-sftp-only:x:1001:1004:,,,:/srv/users/serverpilot/apps/test-app/public/newsletters:/sbin/nologin
8. Modify SSH Configuration to allow SFTP
- Logged in as
root
nano /etc/ssh/sshd_config
- Commented out this line:
#Subsystem sftp /usr/lib/openssh/sftp-server -l INFO
At the very bottom of
sshd_config
added this:Subsystem sftp internal-sftp
Match group group-sftp-only
ChrootDirectory %h
ForceCommand internal-sftp
9. Restart SSH
- Still logged in as
root
service ssh restart
10. Modify permissions
- Still logged in as
root
- This is the home directory for user
user-sftp-only
/srv/users/serverpilot/apps/test-app/public/newsletters
Used this to make sure the home directory is owned by the user and group
chown -R user-sftp-only:group-sftp-only /srv/users/serverpilot/apps/test-app/public/newsletters
11. Verify ownership change
Still logged in as root
:
$ cd /srv/users/serverpilot/apps/test-app/public/`
$ ls -al
drwxr-xr-x+ 3 serverpilot serverpilot 4096 Mar 7 15:26 .
drwxr-xr-x+ 3 serverpilot serverpilot 4096 Mar 3 16:22 ..
-rw-r--r--+ 1 serverpilot serverpilot 3393 Mar 3 16:22 index.php
drwxrwxr-x+ 2 user-sftp-only group-sftp-only 4096 Mar 7 15:26 newsletters
$ cd /srv/users/serverpilot/apps/test-app/public/newsletters
$ ls -al
drwxrwxr-x+ 2 user-sftp-only group-sftp-only 4096 Mar 7 15:26 .
drwxr-xr-x+ 3 serverpilot serverpilot 4096 Mar 7 15:26 ..
That's where I'm up to. However, I can't login in as my new user user-sftp-only
via SFTP
No comments:
Post a Comment