【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)

avatar
作者
猴君
阅读量:0

提示:为保证文章的正确性和实用性,文章内容可能会不定时优化改进,若您有建议或者文章存在错误请私信留言或评论指正💖😊💖。下面以Ubuntu22.04操作系统为例,介绍具体的操作步骤,如果本文对你有帮助,记得关注加收藏🤞。


1、文章前言

本文以Ubuntu22.04系统为例,介绍如何在Linux环境中,根据用户数据隔离性需求,配置独立或共享目录的sftp服务。

2、服务介绍

SFTP(SSH File Transfer Protocol)是一种通过SSH(Secure Shell)进行安全传输文件的协议。由于SFTP是基于SSH的,所以SFTP使用SSH的TCP22端口进行数据传输,具备了SSH的安全性和数据加密功能来保护文件传输过程中的数据安全。

3、操作步骤

3.1、规划配置sftp全局数据存储目录

在配置sftp之前,首先要规划并配置好sftp数据存储目录。在生产环境使用中,建议为sftp数据存储目录单独挂载一个lvm逻辑卷,而不是直接挂载使用磁盘分区,使用逻辑卷的好处是方便后期动态调整sftp数据存储目录空间大小,以及对数据进行快照等操作。
步骤一: 如下图,请参考【Liunx常用操作】LVM逻辑卷的介绍和相关操作(创建、删除、扩缩容)章节中的“创建并挂载逻辑卷”步骤,完成sftp数据存储目录的创建和挂载。
注意:sftp数据存储目录的所属用户和组要配置为“root:root”,权限配置为755
1

3.2、配置sftp用户独立目录的sftp服务

3.2.1、创建并配置sftp用户

步骤一: 执行以下命令,创建用户组“sftpusers”。

sudo groupadd -f sftpusers 

2
步骤二: 执行以下命令,创建用户“zhangsan、lisi”,并指定用户所属组为“sftpusers”。

sudo useradd -g sftpusers zhangsan sudo useradd -g sftpusers lisi 

3

步骤三: 执行以下命令,并根据提示,设置用户“zhangsan、lisi”的密码。

sudo passwd zhangsan sudo passwd lisi 

4
步骤四: 执行以下命令,设置用户“zhangsan、lisi”的密码为永不过期。

sudo chage -m 0 -M 99999 -I -1 -E -1 zhangsan sudo chage -m 0 -M 99999 -I -1 -E -1 lisi 

5
步骤五: 执行以下命令,创建用户“zhangsan、lisi”同名目录以及数据存储目录“data”。

sudo mkdir -p /sftpdata/zhangsan/data sudo mkdir -p /sftpdata/lisi/data 

6
步骤六: 执行以下命令,将“zhangsan、lisi”数据存储目录“data”的所属用户和用户组分别配置为“zhangsan:sftpusers”和“lisi:sftpusers”。

sudo chown zhangsan:sftpusers /sftpdata/zhangsan/data/ sudo chown lisi:sftpusers /sftpdata/lisi/data/ 

7
步骤七: 执行以下命令,分别修改用户“zhangsan、lisi”的主目录为“/sftpdata/zhangsan”和“/sftpdata/lisi”。

sudo usermod -d /sftpdata/zhangsan/ zhangsan sudo usermod -d /sftpdata/lisi/ lisi 

8

3.2.2、配置sshd_config文件

步骤一: 执行以下命令,查看系统内是否安装openssh-server服务。

apt list |grep openssh-server 

或者

dpkg --get-selections |grep openssh-server 

9
步骤二: 若已安装openssh-server服务,则执行步骤三配置sftp服务相关参数。若未安装openssh-server服务,则参考【Liunx常用操作】Ubuntu Server系统配置软件源章节,配置软件源并安装openssh-server服务后,再执行下面步骤。
步骤三: 执行以下命令,编辑sftp的配置文件“/etc/ssh/sshd_config”。

sudo vim /etc/ssh/sshd_config 

步骤四: 按住“Shift”+“g”键,将光标移动至配置文件最后一行,按“o”另起一行进入插入模式,并根据下表描述,复制以下内容至配置文件末尾,修改参数值为实际环境需求。
针对用户生效的sftp配置模板:

Match User zhangsan     ChrootDirectory /sftpdata/zhangsan     ForceCommand internal-sftp     PermitTunnel no     AllowTcpForwarding no  Match User lisi     ChrootDirectory /sftpdata/lisi     ForceCommand internal-sftp 

10

参数说明
MatchUser xxx或者Group xxx引入一个条件块,条件块以Match开始,以另一个Match或者文件结尾结束。Match下面的配置项针对当前Match的值生效,且比全局设置的参数优先。如果存在一个值满足多个Match,则针对该值只生效第一个Match下的参数
ChrootDirectory目录将sftp用户限制在指定的目录中,用户将无法访问该目录之外的文件系统目录
ForceCommandinternal-sftp或者cvs server或者命令脚本的绝对路径指定用户成功登录后要强制执行的命令或脚本权限。比如仅允许使用sftp协议进行文件传输操作的“internal-sftp”或者仅允许访问CVS服务器的“cvs server”又或者可以通过配置“/etc/profile”以及用户的“~/.bashrc”文件自定义限制权限的“/usr/local/bin/limited-shell
PermitTunnelyes or no是否允许用户进行进行SSH隧道链接,禁止可以防止用户在sftp会话中建立与其他服务器或设备的SSH隧道连接
AllowTcpForwardingyes or no是否允许用户进行TCP转发,禁止可以防止用户在sftp会话中建立与其他服务器或设备的TCP连接
X11Forwardingyes or no是否允许用户进行X11转发,禁止可以防止用户在sftp会话中显示远程X11图形应用程序窗口
AllowAgentForwardingyes or no是否允许用户进行代理转发,禁止可以防止用户在sftp会话中使用代理转发来访问其他系统或服务,甚至绕过网络防火墙
PermitTTYyes or no是否允许用户在sftp会话中使用TTY(终端)进行交互,默认为yes。禁止可以限制用户只能执行非交互式的命令或脚本

步骤五: 在“/etc/ssh/sshd_config”配置文件中找到如下行并取消注释(删除行首的#符号)。若没有该行则手动添加,若有该行则查看行首是否有#,有则去掉#,没有则跳过该步骤。

Subsystem sftp /usr/lib/openssh/sftp-server 

11
步骤六: sftp相关配置修改完成后,按“Esc”键退出vim文本编辑器的插入模式,按住“Shift”+“:”键进入vim文本编辑器的命令行模式,输入“wq”保存修改并退出编辑。
12
步骤七: 执行以下命令,重启ssh服务使配置生效。

sudo systemctl restart ssh 

步骤八: 执行以下命令,确认ssh服务状态为“active (running)”。

sudo systemctl status  ssh 

13

3.2.3、验证sftp连接

步骤一: 本地执行以下命令,输入密码分别用“zhangsan、lisi”用户登录sftp服务器,执行如下图中命令,查看sftp目录下数据,并分别创建一个“welcome_用户名_sftp”的文件夹,然后输入“exit”退出sftp服务器。

sftp zhangsan@127.0.0.1 sftp lisi@127.0.0.1 

14
步骤二: 执行以下命令,可以看到各用户目录下的“welcome_用户名_sftp”文件夹。

sudo ls -l /sftpdata/*/data 

15
说明:sftp用户空间独立的使用场景下,各个用户在“/etc/ssh/sshd_config”配置文件中需独立配置Match条件块,从而实现每个用户的数据存储目录独立,彼此间不可见。

3.3、配置sftp用户共享目录的sftp服务

3.3.1、创建并配置sftp用户

步骤一: 执行以下命令,创建用户组“sftpusers”。

sudo groupadd -f sftpusers 

16
步骤二: 执行以下命令,创建用户“zhangsan、lisi”,并指定用户所属组为“sftpusers”。

sudo useradd -g sftpusers zhangsan sudo useradd -g sftpusers lisi 

17
步骤三: 执行以下命令,并根据提示,设置用户“zhangsan、lisi”的密码。

sudo passwd zhangsan sudo passwd lisi 

18
步骤四: 执行以下命令,设置用户“zhangsan、lisi”的密码为永不过期。

sudo chage -m 0 -M 99999 -I -1 -E -1 zhangsan sudo chage -m 0 -M 99999 -I -1 -E -1 lisi 

19
步骤五: 执行以下命令,创建共享的“share”目录。

sudo mkdir /sftpdata/share/ 

20
步骤六: 执行以下命令,将“share”目录的所属用户和用户组配置为“zhangsan:sftpusers”,并把权限设置为“777”。

sudo chown zhangsan:sftpusers /sftpdata/share/ sudo chmod 777 /sftpdata/share/ 

21
步骤七: 执行以下命令,分别修改用户“zhangsan、lisi”的主目录为“/sftpdata/share”。

sudo usermod -d /sftpdata/share/ zhangsan sudo usermod -d /sftpdata/share/ lisi 

22

3.3.2、配置sshd_config文件

步骤一: 执行以下命令,查看系统内是否安装openssh-server服务。

apt list |grep openssh-server 

或者

dpkg --get-selections |grep openssh-server 

23
步骤二: 若已安装openssh-server服务,则执行步骤三配置sftp服务相关参数。若未安装openssh-server服务,则参考【Liunx常用操作】Ubuntu Server系统配置软件源章节,配置软件源并安装openssh-server服务后,再执行下面步骤。
步骤三: 执行以下命令,编辑sftp的配置文件“/etc/ssh/sshd_config”。

sudo vim /etc/ssh/sshd_config 

步骤四: 按住“Shift”+“g”键,将光标移动至配置文件最后一行,按“o”另起一行进入插入模式,并根据下表描述,复制以下内容至配置文件末尾,修改参数值为实际环境需求。
针对sftpusers用户组生效的sftp配置模板:
说明:使用“针对sftpusers用户组生效的sftp配置模板”配置“/etc/ssh/sshd_config”文件时,如果后期需要新增sftp用户,只需参考上面步骤创建新的sftp用户并加入sftpusers用户组即可,无需再次修改“/etc/ssh/sshd_config”配置文件。

Match Group sftpusers     ChrootDirectory /sftpdata/     ForceCommand internal-sftp     PermitTunnel no     AllowTcpForwarding no     X11Forwarding no     AllowAgentForwarding no 

24

参数说明
MatchUser xxx或者Group xxx引入一个条件块,条件块以Match开始,以另一个Match或者文件结尾结束。Match下面的配置项针对当前Match的值生效,且比全局设置的参数优先。如果存在一个值满足多个Match,则针对该值只生效第一个Match下的参数
ChrootDirectory目录将sftp用户限制在指定的目录中,用户将无法访问该目录之外的文件系统目录
ForceCommandinternal-sftp或者cvs server或者命令脚本的绝对路径指定用户成功登录后要强制执行的命令或脚本权限。比如仅允许使用sftp协议进行文件传输操作的“internal-sftp”或者仅允许访问CVS服务器的“cvs server”又或者可以通过配置“/etc/profile”以及用户的“~/.bashrc”文件自定义限制权限的“/usr/local/bin/limited-shell
PermitTunnelyes or no是否允许用户进行进行SSH隧道链接,禁止可以防止用户在sftp会话中建立与其他服务器或设备的SSH隧道连接
AllowTcpForwardingyes or no是否允许用户进行TCP转发,禁止可以防止用户在sftp会话中建立与其他服务器或设备的TCP连接
X11Forwardingyes or no是否允许用户进行X11转发,禁止可以防止用户在sftp会话中显示远程X11图形应用程序窗口
AllowAgentForwardingyes or no是否允许用户进行代理转发,禁止可以防止用户在sftp会话中使用代理转发来访问其他系统或服务,甚至绕过网络防火墙
PermitTTYyes or no是否允许用户在sftp会话中使用TTY(终端)进行交互,默认为yes。禁止可以限制用户只能执行非交互式的命令或脚本

步骤五: 在“/etc/ssh/sshd_config”配置文件中找到如下行并取消注释(删除行首的#符号)。若没有该行则手动添加,若有该行则查看行首是否有#,有则去掉#,没有则跳过该步骤。

Subsystem sftp /usr/lib/openssh/sftp-server 

25
步骤六: sftp相关配置修改完成后,按“Esc”键退出vim文本编辑器的插入模式,按住“Shift”+“:”键进入vim文本编辑器的命令行模式,输入“wq”保存修改并退出编辑。
26
步骤七: 执行以下命令,重启ssh服务使配置生效。

sudo systemctl restart ssh 

步骤八: 执行以下命令,确认ssh服务状态为“active (running)”。

sudo systemctl status  ssh 

27

3.3.3、验证sftp连接

步骤一: 本地执行以下命令,输入密码分别用“zhangsan、lisi”用户登录sftp服务器,执行如下图中命令,查看sftp目录下数据,并分别创建一个“用户名_create_welcome”的文件夹,然后输入“exit”退出sftp服务器。

sftp zhangsan@127.0.0.1 sftp lisi@127.0.0.1 

28
步骤二: 执行以下命令,可以看到“share”目录下各个“用户名_create_welcome”文件夹,。

sudo ls -l /sftpdata/share/ 

29
说明:sftp用户空间共享的使用场景下,各个用户在“/etc/ssh/sshd_config”配置文件中共用sftpusers用户组的Match条件块,从而实现每个用户的可见权限相同,彼此数据共享,其他用户可以看见但默认不可修改。

4、总结

sftp服务的配置流程大致为:规划配置sftp全局数据存储目录 > 检查或安装openssh-server服务 > 创建sftp用户及其数据存储目录 > 配置“/etc/ssh/sshd_config文件” > 重启ssh服务 > 用户登录测试

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!