sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。

在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。

SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。

配置SFTP

在centos7上配置sftp服务,并创建一个用户名为sftp_user的用户,使他能够登录sftp服务

1.创建sftp用户组,组名为 sftpusers

groupadd sftpusers

2.创建sftp_user用户,并设置为sftpusers组

useradd -g sftpusers -s /sbin/nologin -M sftp_user
# -g:加入主要组  -s:指定用户登入后所使用的shell(禁止用户ssh登录)  -M:不自动建立用户的登入目录 sftp_user为sftp用户名

3.创建密码

passwd sftp_user

4.创建sftp_user用户的根目录(/usr/sftppath)和属主属组,修改权限为755

mkdir -p /usr/sftppath
chown root:sftpusers /usr/sftppath  # 该路径所属者为root,sftp_user无权限进行写操作,只能读
chmod 755 /usr/sftppath

5.创建该用户所属的数据路径

mkdir -p /usr/sftppath/sftpdata
chown sftp_user:sftpusers /usr/sftppath/sftpdata # sftp_user用户在该路径下有读和写的权限,可进行创建和删除目录文件等操作
chmod 755 /usr/sftppath/sftpdata

6.修改 /etc/ssh/sshd_config 的配置文件
把原来的sshd_config配置文件里的subsystem行注释掉,并增加一行,如下:

# override default of no subsystems
#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp

在 sshd_config 文件最后添加以下内容:

Match Group sftpusers
        X11Forwarding no
        AllowTcpForwarding no
        ChrootDirectory /usr/sftppath # 设定属于用户组sftpusers的用户访问的根文件夹,sftp用户在根路径下只有读的权限
        ForceCommand internal-sftp

7.配置完成后,重启sshd

systemctl restart sshd

8.sftp登录

sftp sftp_user@127.0.0.1

常见问题
如果你链接服务器的时候出现下面的提示: Write failed: Broken pipe Couldn’t read packet: Connection reset by peer 这个问题的原因是ChrootDirectory的权限问题,

你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是750或者755。