I have followed a few examples of how to do this, all of them end up with modifying sshd_config to

Subsystem sftp internal-sftp

Match User chubbyninja
    ChrootDirectory %h
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand /usr/lib/openssh/sftp-server

When I do this, I then sshd -t to make sure there are no errors then service sshd restart

once it's restarted, I try to SFTP (with filezilla) but I keep getting

Response:   fzSftp started
Command:    open "chubbyninja@xxx.xxx.xxx.xxx" 22
Command:    Pass: ********************
Error:  Network error: Software caused connection abort
Error:  Could not connect to server

If i revert the config back to its original state, i can SFTP fine, but then i can browse any directory. Where I need users only in their home directory

My default config has this line in it:

Subsystem sftp /usr/lib/openssh/sftp-server

Which is what i'm replacing with the above details.

I only have access to this machine over ssh, although i do have root access.

UPDATE After following sam_pan_mariusz's advice it appears to get further, but now I get

Response:   fzSftp started
Command:    open "chubbyninja@xxx.xxx.xxx.xxx" 22
Error:  Network error: Connection refused
Error:  Could not connect to server


I have also followed Froggiz's advice and changed my config to this:

Subsystem sftp internal-sftp -u 0007 -f AUTH -l VERBOSE 
Match Group chubbyninja
     ChrootDirectory /home/chubbyninja
     ForceCommand internal-sftp -u 0007
     AllowTcpForwarding no
     GatewayPorts no
     X11Forwarding no

but I get the original Software cased connection abort

I monitor /var/syslog but nothing shows up to indicate why there's this error

UPDATE 3 - Added sshd_config

# Package generated configuration file
# See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes

# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 1024

# Logging
SyslogFacility AUTH
LogLevel INFO

# Authentication:
LoginGraceTime 120
#PermitRootLogin without-password
PermitRootLogin yes
StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys

# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes

# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Change to no to disable tunnelled clear text passwords
PasswordAuthentication yes

# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no

#MaxStartups 10:30:60
#Banner /etc/issue.net

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

Subsystem sftp internal-sftp -u 0007 -f AUTH -l VERBOSE

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes

Match Group chubbyninja
        ChrootDirectory /home/chubbyninja
        AllowTCPForwarding no
        X11Forwarding no
        GatewayPorts no
        ForceCommand internal-sftp -u 0007
  • Did you ever get this straightened out? I'm experiencing a similar issue. – a coder Sep 14 '16 at 14:30

this is how i set my sftp for specific user

1] create a user

 adduser {USER}

2] edit /etc/ssh/sshd_config

 PasswordAuthentication yes 

 Subsystem sftp
 internal-sftp -u 0007 -f AUTH -l VERBOSE 
 Match Group {USER}
     ChrootDirectory {FOLDER}
     ForceCommand internal-sftp -u 0007
     AllowTcpForwarding no
     GatewayPorts no
     X11Forwarding no

3] set rights for the user

 chmod -R 777 {FOLDER}

4] restart ssh

service ssh restart

replace {USER} by your user and {FOLDER} by your folder and it should works ! ;)

can you put your full ssh config ?

  • Should I be using Match Group or Match User? Match User is still giving me software aborted.. this is so confusing! - Are there any logs I can look at to see what the software aborted means? – CᴴᵁᴮᴮʸNᴵᴺᴶᴬ Feb 27 '15 at 14:51
  • when a user is created, it is created with same the groupe ({user}:{user}) – Froggiz Feb 27 '15 at 14:56
  • Ahh ok thank you, i'll try with group now.. still the same issue – CᴴᵁᴮᴮʸNᴵᴺᴶᴬ Feb 27 '15 at 14:57
  • the log are in -f VERBOSE but you have to set it in syslog : /etc/rsyslog.conf change "verbose.* /var/log/sftp.log, btw what is your error message with my conf ? – Froggiz Feb 27 '15 at 15:03
  • Froggiz - I've added the sshd_config and the error message is still Network Error: software caused abort – CᴴᵁᴮᴮʸNᴵᴺᴶᴬ Feb 27 '15 at 15:21

I don't really understand the "replacing" part in the question, but... when chroot-ing in SSH, ForceCommand should refer to the internal subsystem name. In your case, the whole line should read: ForceCommand sftp.

If you want to use executable path in Chroot, you'll have to prepare proper chroot directory (containing libraries that the executable links to, configs, etc.).

Relevant lines from my working config:

Subsystem sftp /usr/lib/openssh/sftp-server

Match User testuser1
    ChrootDirectory /one/dir/path/
    ForceCommand internal-sftp
  • Thanks for your answer - I still get the same error when changing to ForceCommand sftp though, as for the resplacing: By default I have Subsystem sftp /usr/lib/openssh/sftp-server so I delete that line and add in Subsystem sftp internal-sftp – CᴴᵁᴮᴮʸNᴵᴺᴶᴬ Feb 27 '15 at 12:24
  • After going through your answer again, I get a connection refused when trying to SFTP now.. so progress perhaps? – CᴴᵁᴮᴮʸNᴵᴺᴶᴬ Feb 27 '15 at 12:30
  • I've extended my answer with a relevant part of my working config from Ubuntu. – sam_pan_mariusz Feb 27 '15 at 16:34

Your Answer

By clicking "Post Your Answer", you agree to our terms of service, privacy policy and cookie policy

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