系统运维 / 操作系统

SFTP服务部署配置

温馨提示:本文最后更新于2021-03-02 18:43:35,某些文章具有时效性,若有错误或已失效,请在下方留言或提交工单提交工单
浅时光 · 3月11日 · 2020年 本文2986个字,预计阅读8分钟 38058次已读

一、SFTP简介

SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议。SFTP使用加密传输认证信息和传输的数据,所以使用SFTP是非常安全的。

和ftp不同的是sftp传输协议默认是采用加密方式来传输数据的,sftp确保传输的一切数据都是加密的。而ftp一般来说允许明文传输,原文链接:https://www.dqzboy.com当然目前也有带SSL的加密的ftp,有些服务器软件也可以设置成“只允许加密连接”,但是需要我们手工调整,一般会被大多数人给忽视。

SFTP 为SSH的一部分,是一种传输档案至 Blogger 伺服器的安全方式。SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。

二、SFTP搭建

1、安装OpenSSH

  • 安装之前务必检查SELINUX状态,如果开启一定将其关闭
[root@localhost ~]# sestatus
SELinux status:                 enabled

[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# 重启服务器
[root@localhost ~]# reboot

# 重启服务器后再次确认
[root@localhost ~]# sestatus
SELinux status:                 disabled
  • 首先我们需要先确认是否安装了OpenSSH服务,默认情况下Linux发行版都安装了,我们这里再确认一下,安装则忽略,没文章来源(Source):浅时光博客安装则运行下面的命令安装
# YUM方式安装的,通过以下命令查看
[root@localhost ~]# yum list installed openssh
[root@localhost ~]# yum install openssh

# RPM包安装的,通过以下命令查看
[root@localhost ~]# rpm -qa | grep openssh

# 如果没有则通过以下命令进行安装
[root@localhost ~]# yum install openssh-client openssh-server openssh-sftp-server

2、创建用户和组

2.1:创建用户组

  • 这里创建一个单独的用户组,为了方便我们管理SFTP用户
# 我这里创建了一个名为sftp-users的用户组
[root@localhost ~]# groupadd sftp-users

2.2:创建用户

# 创建一个SFTP用户,我这里取名为admin,并指定他的属组为sftp-users
[root@localhost ~]# useradd -g sftp-users -m admin

# 为admin用户配置密码
[root@localhost ~]# echo "dqzboy123" | passwd --stdin admin 
更改用户 admin 的密码 。
passwd:所有的身份验证令牌已经成功更新。

3、配置SSH和权限

3.1:修改SSH的配置

[root@localhost ~]# vim /etc/ssh/sshd_config
99  AllowTcpForwarding no
101 X11Forwarding no

# 将默认的Subsystem注释掉,改为下面的参数
132 Subsystem       sftp    internal-sftp

# 文件末尾添加
Match Group sftp-users
     ChrootDirectory /data/app
     ForceCommand internal-sftp

参数说明:

  • AllowTcpForwarding no  用户不能使用端口转发,去除注释,将yes改为no;没有该参数则需将该参数添加至文件末尾
  • X11Forwarding no      &nbs文章来源(Source):浅时光博客p; 禁止使用X11转发;没有该参数则需将该参数添加至文件末尾
  • Subsystem   sftp   internal-sftp 指定sshd使用内置sshd的SFTP服务器代码,而不是运行另一个进程
  • Match Group sftp-users     表示下面的配置匹配该用户组,多个组用逗号分隔
  • C文章来源(Source):浅时光博客hrootDirectory /data/app  表示SFTP所访问的主目录为/data/app,表示指定上面匹配的用户组可以chroot环境路径到此目录, 如果写的是 %h,那就是指定SFTP默认的主目录为用户家目录,比如/home/admin
  • ForceCommand internal-sftp   强制执行内部sftp,并忽略任何~/.ssh/rc文件中的命令

3.2:设定SFTP的权限

# 创建SFTP指定的主目录
[root@localhost ~]# mkdir -p /data/app

# 主目录的属主必须为ROOT用户,属组改为我们上面创建的sftp的用户组
[root@localhost ~]# chown root:sftp-users /data/app/

# 设置SFTP主目录权限为755,不可以超过755否则会登入报错
[root@localhost ~]# chmod 755 /data/app/
  • 注意:目前为止,sftp的主目录只有查看权限,只能实现下载、查看,并不能上传,删除,重命名

3.3:创建SFTP子目录

# 现在在SFTP主目录下创建一个子目录,并设置子目录的属主为admin,属组为sftp-users
[root@localhost ~]# mkdir /data/app/upload
[root@localhost ~]# chown admin:sftp-users /data/app/upload/
[root@localhost ~]# chmod 755 /data/app/upload/

3.4:重启SFTP服务

原文链接:https://www.dqzboy.com
  • 配置完成后需要重新启动sshd使配置生效
[root@localhost ~]# systemctl restart sshd.service

三、SFTP登入

1、Linux环境下

[root@localhost ~]# sftp admin@127.0.0.1
sftp> ls
upload  
sftp> pwd
Remote working directory: /
sftp> cd upload/
sftp> ls
sftp> mkdir 1
sftp> ls
1  

2、Windows环境

  • 通过ftp工具或者xshell选择sftp协议连接
1611721502 7368b3910980a44
1611721502 1dc1c1f2b41ee82

四、问题总结

问题描述:

packet_write_wait: Connection to xx.xx.xx.xx port 22: Broken pipe
Couldn't read packet: Connection reset by peer

问题原因:

  • 这个问题的原因是ChrootDirectory的主目录权限问题,你设定的主目录必须是root用户所有,如果主目录的权限不是root用户就会出现问题

解决方案:

确保sftp用户根目录的所有人是root, 权限是 750 或者 755。注意以下两点原则:

  • 目录开始一直往上到系统根目录为止的目录拥有者都只能是 root,用户组可以不是 root。
  • 目录开始一直往上到系统根目录为止都不可以具有群组写入权限



本文作者:浅时光
原文链接:https://www.dqzboy.com/1850.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可
转载时请以超链接形式标明文章原始出处和作者信息

0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!