skip to content
Logo Hetai's blog

Linux配置sftp服务

/ 6 min read

Table of Contents

配置sftp服务有两种方式,一是可以为指定群组配置,二是可以为指定用户配置。两者有什么区别的,我的感受是为群组配置的话,后续添加新的sftp用户只要将这个用户添加到有sftp功能的群组即可,不需要再次修改配置文件,重启sshd服务。

两种配置方式的操作其实都差不多,大概都是这个流程:

创建sftp用户→修改/etc/ssh/sshd_config→重启ssd服务

下面一步步开始配置sftp服务,最终达成的效果是每个sftp用户通过sftp连接上来只能在他的家目录下操作,也就是他的活动范围只能在/home/用户名/ 内哦

1、创建群组sftps。

通过后面的配置,sftp群组内的用户将拥有连接sftps的能力。另外,你也可以自拟群组名字。

Terminal window
sudo groupadd sftps

2、修改/etc/ssh/sshd_config配置文件。

如果是在生产环境,修改前最好备份一下

Terminal window
# 备份原文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
# 进入文件
vi /etc/ssh/sshd_config

翻到文件的末尾(可以在normal模式下按G,快速跳转到末尾),翻到末尾可以看到这样的内容

sshd_config

找到Subsystem sftp /usr/libexec/openssh/sftp-server

用井号将其注释掉: #Subsystem sftp /usr/libexec/openssh/sftp-server

在其下方添加如下字段,按你的实际情况更改群组名字哦。

Terminal window
Subsystem sftp internal-sftp
Match Group sftps
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
# ChrootDirectory /you_dir/%u 也可以这样,只要你保证%u这个文件夹owner为root,权限为755即可

[ MatchGroup sftps ]字段意思是匹配sftps这个群组的用户,让这组用户有sftp权限。

[ ChrootDirectory ]字段的功能是限制用户连接上sftp后的活动范围,使用户只能在指定目录下操作文件。效果就是用户sftp连接上来只看到一个虚拟的根目录,就跟linux系统的根目录符号一样,一个符号 ‘ / ’ 。为什么说事虚拟的呢,因为他实际上在系统里对应着的是ChrootDirectory指定的目录,在本文指定的是%h,%h代表用户的家目录,默认就是/home/[用户名]。比如,user1通过sftp user1@192.168.5.0连接上来,他看到的只有一个斜杠,也就是根目录,他只能在这个根目录下活动。但实际在系统中,他的活动范围在/home/user1/内。

ChrootDirectory字段共有两个变量可以使用,一个是%h,代表用户的家目录;还有%u,代表登陆sftp的用户名。使用这两个变量可以轻松的批量限制每个sftp用户的活动范围。

接着继续配置吧,上面的配置保存退出后,重启sshd服务

Terminal window
sudo systemctl restart sshd

3、创建sftp用户

上面的配置完成后,后续添加新的sftp用户只要完成下面的操作即可 例:创建sftper用户

Terminal window
sudo useradd -s /usr/sbin/nologin -g sftp sftper
# -s /usr/sbin/nologin这个选项让sftper用户只能通过22端口进行sftp连接,不能ssh连接
# -g sftp 让sftper用户归属到sftp群组,拥有sftp权限。
sudo passwd sftper
sudo chown root /home/sftper
# 将家目录/home/sftper的拥有者改为root,这点是必须的,用户的家目录一定得是root为owner,且权限为755。
# 改成其他比如777sftp登录就会报错了。
sudo chmod 755 /home/sftper
# 对于这个sftper目录来说,sftper这个用户是属于其他人,因为上面的操作已经将归属人
# 设置为root了。那么755的权限,5代表对这个目录只有r-x,没有w。也就是sftp用户登录
# 上来在sftper这个目录下只能查看这个目录下的文件,无法上传/修改/删除这个目录下的
# 文件。所以后面的步骤就要创建一个文件夹用于文件的上传和下载
sudo mkdir /home/sftper/share
# 在sftper的家目录下创建一个文件夹share用于上传/下载/删除文件
sudo chown sftper /home/sftper/share
sudo chmod 755 /home/sftper/share

这就完成sftp用户的创建啦,这个用户就能通过sftp sfpter@你的ip地址登陆上来啦。

后续要新增sftp用户也只要重复一遍第三步的创建sftp用户操作。