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

提示:为保证文章的正确性和实用性,文章内容可能会不定时优化改进,若您有建议或者文章存在错误请私信留言或评论指正。下面以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
【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第1张图片

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

3.2.1、创建并配置sftp用户

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

sudo groupadd -f sftpusers

【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第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

【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第3张图片
步骤五: 执行以下命令,创建用户“zhangsan、lisi”同名目录以及数据存储目录“data”。

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

【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第4张图片
步骤六: 执行以下命令,将“zhangsan、lisi”数据存储目录“data”的所属用户和用户组分别配置为“zhangsan:sftpusers”和“lisi:sftpusers”。

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

【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第5张图片
步骤七: 执行以下命令,分别修改用户“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

【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第6张图片

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

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

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

【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第7张图片
步骤六: sftp相关配置修改完成后,按“Esc”键退出vim文本编辑器的插入模式,按住“Shift”+“:”键进入vim文本编辑器的命令行模式,输入“wq”保存修改并退出编辑。
【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第8张图片
步骤七: 执行以下命令,重启ssh服务使配置生效。

sudo systemctl restart ssh

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

sudo systemctl status  ssh

【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第9张图片

3.2.3、验证sftp连接

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

sftp [email protected]
sftp [email protected]

【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第10张图片
步骤二: 执行以下命令,可以看到各用户目录下的“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

【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第11张图片
步骤二: 执行以下命令,创建用户“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

【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第12张图片
步骤五: 执行以下命令,创建共享的“share”目录。

sudo mkdir /sftpdata/share/

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

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

【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第13张图片
步骤七: 执行以下命令,分别修改用户“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

【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第14张图片

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

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

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

【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第15张图片
步骤六: sftp相关配置修改完成后,按“Esc”键退出vim文本编辑器的插入模式,按住“Shift”+“:”键进入vim文本编辑器的命令行模式,输入“wq”保存修改并退出编辑。
【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第16张图片
步骤七: 执行以下命令,重启ssh服务使配置生效。

sudo systemctl restart ssh

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

sudo systemctl status  ssh

【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第17张图片

3.3.3、验证sftp连接

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

sftp [email protected]
sftp [email protected]

【Liunx常用操作】配置sftp服务器(用户独立目录&用户共享目录)_第18张图片
步骤二: 执行以下命令,可以看到“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服务 > 用户登录测试

你可能感兴趣的:(Linux,服务器,运维,linux)