前言


虽然近几年,由于对安全性的重视,文件的上传、下载有了其他的替代方式,使用FTP的人员逐渐减少。但是仍有部分人员习惯使用FTP来上传和下载文件,下面介绍一下类似的工具SFTP的配置和使用。

为什么讲这个?因为近期有人提了个上传的小需求 。。



SFTP与FTP区别


FTP是一种文件传输协议,用来在计算机间传输文件
传输速度相对快,支持范围广
客户端传输文件时,无需再安装客户端,也可通过第三方工具连接
向服务器传输文件时,服务端要先安装配置ftp


SFTP是一种使用方式类似于FTP的更安全的文件传输协议,传输文件进行了加密,更加安全
由于加密传输,传输时相对FTP较慢
客户端传输文件时,可通过第三方工具连接
SFTP是SSH的一部分,无需额外配置,端口使用的是ssh端口



常用的几种配置



【1】某用户ssh和sftp都可登录


默认配置下,当创建了一个用户并配置密码后,该用户即可通过ssh和sftp登录


<1>创建用户并设置密码

useradd  tom -d /data/tom/
passwd tom


<2>重点配置

cat /etc/ssh/sshd_config

Subsystem sftp	/usr/libexec/openssh/sftp-server
#上方Subsystem sftp用于开启sftp

#当Subsystem sftp的配置被注释时,用户仅能ssh登录,使用sftp会报如下错误
#subsystem request failed on channel 0
#Couldn't read packet: Connection reset by peer



【2】用户仅能ssh登录



注释掉Subsystem sftp及Match User,ChrootDirectory等相关配置即可
注意修改完配置文件后,重启或重新加载ssh服务

systemctl restart sshd
or
systemctl reload sshd


【3】使某用户仅能sftp登录,ssh无法登录



如有多个用户需要配置,需要再次创建用户,指定家目录并授权和修改配置文件

如配置失败,注意权限问题



<1>创建一个用户组

groupadd sftp


<2>创建禁止登陆的用户,设置密码

useradd sftp_tom -g sftp -s /sbin/nologin -M  
passwd sftp_tom

or

useradd sftp_tom -g sftp -s /sbin/nologin -d /data/www/sftp_tom
passwd sftp_tom


-d   为创建的用户指定家目录(使用此参数,家目录前的路径的目录必须存在)
-g   为创建的用户指定用户组
-s   指定默认登录shell
-M   不创建用户的家目录(如使用此参数后期得手动创建目录及配置权限)

/bin/false,用户禁止一切服务也无法登录,并且不会有任何提示
/sbin/nologin,用户仅无法登陆系统,仍可使用其他服务


补充:

如创建用户时未添加组,或添加组失败,可使用下列命令

1、给用户增加入新的用户组中
usermod -a -G 用户组 用户

2、给用户更换组
usermod -g 新用户组 用户

3、剔除某用户组里的某个用户
gpasswd -d 用户 用户组


<3>创建用户目录并授权(当没指定家目录时,如下操作)

mkdir -p  /data/www/sftp/sftp_tom/upload
chown -R  root.sftp  /data/www/sftp/sftp_tom
chown -R  sftp_tom.sftp  /data/www/sftp/sftp_tom/upload
chmod 755  /data/www/sftp/sftp_tom


or

mkdir -p  /data/www/sftp/sftp_tom 
usermod -d  /data/www/sftp/sftp_tom  sftp_tom




<4>ssh配置文件配置(配置方法一)

vim /etc/ssh/sshd_config

#注释此行  Subsystem sftp /usr/lib/openssh/sftp-server
 
#添加以下几行
Subsystem sftp internal-sftp 

Match user sftp_tom
ChrootDirectory /data/www/sftp/sftp_tom

Match user sftp_jack
ChrootDirectory /data/www/sftp/sftp_jack

X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Match Group sftp
ChrootDirectory /data/www/sftp

#匹配单个用户 Match user,如有多个用户,也可写多个
#匹配sftp组  Match Group
#注意:ChrootDirectory设置的目录的权限及其上级所有文件夹权限属主和属组必须是root,且权限最大设置只能是755



<5>ssh配置文件配置(配置方法二)

vim /etc/ssh/sshd_config

#注释此行  Subsystem sftp /usr/lib/openssh/sftp-server
 
#添加以下几行

Subsystem       sftp    internal-sftp    
Match Group sftp    
ChrootDirectory /data/www/sftp/%u    
#or ChrootDirectory %h
ForceCommand    internal-sftp    
AllowTcpForwarding no    
X11Forwarding no
ForceCommand internal-sftp

#匹配单个用户 Match user,如有多个用户,也可写多个
#匹配sftp组  Match Group sftp 
#注意:ChrootDirectory设置的目录的权限及其上级文件夹权限属主和属组必须是root,且权限最大设置只能是755

#%u  表示与用户名同名的目录,例如:/data/www/sftp/%u时,/data/www/sftp/sftp_tom
#%h  表示用户通过sftp登录后就把根目录切换到它自己的家目录,依据/etc/passwd中的根目录


<6>测试

sftp sftp_tom@IP 
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐