sftp的配置以及使用
一、sftp简述:
sftp(Secure File Transfer Protocol)是一种安全的文件传送协议,是ssh内含协议,也就是说只要sshd服务器启动了,sftp就可使用,不需要额外安装,它的默认端口和SSH一样为22
sftp通过使用加密/解密技术来保障传输文件的安全性,因此sftp的传输效率比普通的FTP要低,但sftp的安全性要比ftp高,因此sftp通常用于报表、对账单等对安全性要求较高的场景
二、SFTP服务配置(基于Centos 7)
1、首先用root用户查看ssh的版本,版本需要大于4.8p1,如图:

2、使用root用户创建用户组,组名为sftpgroup(可自定义),创建用户sftpuser,并设置密码,如图:

说明:
- -M表示创建用户的时候不生成home目录
- -s /sbin/nologin表示创建的用户sftp用户不能登录系统
3、 修改配置文件sshd_config,将原来的Subsystem sftp /usr/libexec/openssh/sftp-server注释掉,然后在最下方添加内容如下:

Subsystem sftp internal-sftp # 启用SFTP子系统,并使用internal-sftp命令实现SFTP服务
Match Group sftpgroup # 将用户匹配到sftpgroup组的账户,仅允许使用SFTP服务登录
X11Forwarding no # 禁用X11转发,SFTP用户无法进行X11转发
AllowTcpForwarding no # 禁用TCP转发,SFTP用户无法进行端口转发
ChrootDirectory %h # 将SFTP用户的根目录限制在其主目录内。%h表示用户主目录
ForceCommand internal-sftp # 将SFTP用户Shell设置为internal-sftp命令,只能使用SFTP不能登录Shell
4、 使用root用户新建目录/sftp/sftpuser,将其设置为sftpuser的home目录,并指定目录权限,如图:

mkdir -p /sftp/sftpuser
usermod -d /sftp/sftpuser sftpuser
chown root:sftpgroup /sftp/sftpuser
chmod 755 /sftp/sftpuser
mkdir -p /sftp/sftpuser/upload
chown sftpuser:sftpgroup /sftp/sftpuser/upload/
chmod 755 /sftp/sftpuser/upload/
说明:
- 创建文件夹 /sftp/sftpuser
- 设置sftpuser的用户家目录为/sftp/sftpuser
- 家目录权限属主设置为root,属组设置为sftpgroup
- 设置权限为755
- 在家目录下创建文件夹upload
- 设置upload的属主为sftpuser,属组为sftpgroup
- 设置权限为755
注意:上述upload文件夹权限设置的为sftpuser用户可以上传下载和修改
5、重启ssh服务:
systemctl restart sshd
6、可通过winscp登陆客户端进行登陆后上传和下载即可(不能通过浏览器访问)

备注:
upload的权限如图:

从上图中可以看出,权限设置为755,属主sftpuser具备任意权限,属组sftpgroup只有读取权限,因此如果要将设置其他任意用户只具备下载权限,可将用户加入到sftpgroup中即可,演示如下:
1、创建一个用户,加入到组sftpgroup中,命令如下:
useradd -g sftpgroup -M -s /sbin/nologin sftpTemp
2、指定用户的家目录为上面创建的/sftp/sftpuser,如下:
usermod -d /sftp/sftpuser sftpTemp
3、配置用户密码,如下:
# 只做演示用,因此通过此方式配置密码,较快
echo "sftpTemp" | passwd --stdin sftpTemp
4、通过客户端连接后,测试上传,可以发现无权限,下载正常,如图:

注意:为什么新增的用户的家目录也要设置为跟之前的一样为/sftp/sftpuser,因为在sshd_config中配置了ChrootDirectory %h,此参数的意思是限制SFTP用户能访问的路径,在这里设置为只能访问他自己的家目录,上面设置的upload目录是在/sftp/sftpuser路径下,因此只有在这个路径下活动的用户才有权限访问此路径,虽然新增用户加入了sftpgroup,但如果不设置家目录为/sftp/sftpuser,其活动范围还是/home下,会导致无法连接sftp
建议:可创建一个用户专门用来上传文件(sftpuser),其他用户加入到属组中,只提供下载功能,不能上传和修改,演示如下
sftp的重启方式:
关闭:
只需要将Subsystem所在的行注释 然后重启sshd即可,如图:

执行命令systemctl restart sshd重启即可
开启:
将Subsystem 所在的行注释取消,然后重启sshd即可

如果是通过本机连接,可通过如下命令:
sftp sftpuser@ip //输入密码即可
注:如果提示Connection closed,有可能是密码过期了,可以重置密码,或者执行命令chage -M -1 sftpuser 设置密码不过期


