Table of Contents
配置sftp服务有两种方式,一是可以为指定群组配置,二是可以为指定用户配置。两者有什么区别的,我的感受是为群组配置的话,后续添加新的sftp用户只要将这个用户添加到有sftp功能的群组即可,不需要再次修改配置文件,重启sshd服务。
两种配置方式的操作其实都差不多,大概都是这个流程:
创建sftp用户→修改/etc/ssh/sshd_config→重启ssd服务
下面一步步开始配置sftp服务,最终达成的效果是每个sftp用户通过sftp连接上来只能在他的家目录下操作,也就是他的活动范围只能在/home/用户名/ 内哦
1、创建群组sftps。
通过后面的配置,sftp群组内的用户将拥有连接sftps的能力。另外,你也可以自拟群组名字。
sudo groupadd sftps2、修改/etc/ssh/sshd_config配置文件。
如果是在生产环境,修改前最好备份一下
# 备份原文件cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak# 进入文件vi /etc/ssh/sshd_config翻到文件的末尾(可以在normal模式下按G,快速跳转到末尾),翻到末尾可以看到这样的内容
找到Subsystem sftp /usr/libexec/openssh/sftp-server
用井号将其注释掉: #Subsystem sftp /usr/libexec/openssh/sftp-server
在其下方添加如下字段,按你的实际情况更改群组名字哦。
Subsystem sftp internal-sftpMatch Group sftpsChrootDirectory %hForceCommand internal-sftpAllowTcpForwarding noX11Forwarding 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服务
sudo systemctl restart sshd3、创建sftp用户
上面的配置完成后,后续添加新的sftp用户只要完成下面的操作即可 例:创建sftper用户
sudo useradd -s /usr/sbin/nologin -g sftp sftper# -s /usr/sbin/nologin这个选项让sftper用户只能通过22端口进行sftp连接,不能ssh连接# -g sftp 让sftper用户归属到sftp群组,拥有sftp权限。sudo passwd sftpersudo 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/sharesudo chmod 755 /home/sftper/share这就完成sftp用户的创建啦,这个用户就能通过sftp sfpter@你的ip地址登陆上来啦。
后续要新增sftp用户也只要重复一遍第三步的创建sftp用户操作。