Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

I have been trying to set up a SFTP server with multiple users chrooting into their home directories. I followed the advice on this guide and then executed the following commands on the user's directories

chown root:root /home/user/
chmod 755 /home/user/

There is an additional folder in every user's home directory called public which is owned by it's user so as to allow them to create directories and upload and remove files as needed. (This was advised in the guide I mentioned earlier)

Now when I execute sftp -P 435 user@localhost, I get this error:

Write failed: Broken pipe
Couldn't read packet: Connection reset by peer

How do I proceed from here? The ultimate idea is to have each user on some other machine use FileZilla to log into their chrooted home directories and then be able to upload directories and files. All this in SFTP (coz it's more secure)

share|improve this question
add comment

2 Answers

up vote 11 down vote accepted

That article also describes how to get a chrooted shell access, but since you just want a sftp-only account, just follow these instructions:

Edit /etc/ssh/sshd_config and add the lines:

SubSystem sftp internal-sftp
Match Group sftp
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Find the line UsePam yes and comment it:

#UsePam yes

Without disabling this, my SSH server would crash on reloading/ restarting. Since I do not need fancy functions of PAM, this is fine.

For extra security, restrict the users who can login. If you forget to add SFTP users to the sftp group, you give them free shell access. Not a nice scenario. Because SSH cannot combine AllowUsers and AllowGroups (a login has to fulfill both rules), you've to create an additional group, say ssh-users. Add the users who are allowed to login (youruser below) over SSH:

sudo groupadd ssh-users
sudo gpasswd -a youruser ssh-users

And add the next line to /etc/ssh/sshd_config:

AllowGroups ssh-users sftp

Now proceed with modifying the permissions of the users home directory to allow for chrooting (example user sftp-user):

sudo chown root:sftp-user /home/sftp-user
sudo chmod 750 /home/sftp-user

Create a directory in which sftp-user is free to put any files in it:

sudo mkdir /home/sftp-user/public
sudo chown sftp-user: /home/sftp-user/public
sudo chmod 750 /home/sftp-user/public

Should you run in any problems, check /var/log/syslog and /var/log/auth.log for details. Run ssh or sftp with the -vvv option for debugging messages. For sftp, the option must appear before the host as in sftp -vvv user@host.

share|improve this answer
    
The directions here did not work for me, but following the directions in this question and the answer did: askubuntu.com/questions/134425/… –  Max Masnick Nov 5 '12 at 22:02
    
To the anonymous editor: the Match block was not added just before the UsePAM line. Instead, the Match block was appended to the file and the UsePAM line was somewhere earlier. –  Lekensteyn Mar 5 at 10:25
add comment

I'm using Ubuntu LTS 12.04 and after a lot of pain, this worked for me.

My Settings for /etc/ssh/sshd_config

Subsystem sftp internal-sftp -f AUTH -l VERBOSE
UsePAM yes
Match group sftp
  ChrootDirectory %h
  ForceCommand internal-sftp
  AllowTcpForwarding no
  1. create group sftp:

    groupadd sftp

  2. Create user directly with new sftp group attached:

    sudo useradd -d /ftpusers/HomeFolder -m UserName -g sftp -s /bin/false

  3. set permissions for use with ssh for sftp:

    chown root:root HomeFolder

    chmod 755 HomeFolder

  4. restart service:

    service ssh restart

Note, the home folder for the new sftp user has to be given root owner.

share|improve this answer
    
you need a step after step 2 for sudo passwd UserName in order to set the user's password –  jnunn Dec 17 '12 at 23:49
    
I think #4 should read: service sshd restart –  user162895 May 29 '13 at 21:35
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.