文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-12-23 22:16

关注

提示:为保证文章的正确性和实用性,文章内容可能会不定时优化改进,若您有建议或者文章存在错误请私信留言或评论指正💖😊💖。下面以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 zhangsansudo useradd -g sftpusers lisi

3

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

sudo passwd zhangsansudo passwd lisi

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

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

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

sudo mkdir -p /sftpdata/zhangsan/datasudo 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/ zhangsansudo 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 noMatch 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.1sftp 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 zhangsansudo useradd -g sftpusers lisi

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

sudo passwd zhangsansudo passwd lisi

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

sudo chage -m 0 -M 99999 -I -1 -E -1 zhangsansudo 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/ zhangsansudo 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.1sftp 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服务 > 用户登录测试

来源地址:https://blog.csdn.net/qq_42557240/article/details/132577510

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯