操作系统 / 系统运维

SFTP服务部署配置

浅时光 · 3月11日 · 2020年 8652次已读

一、SFTP简介

SFTP是Secure 文章来源(Source):https://www.dqzboy.com文章来源(Source):https://www.dqzboy.comFile Transfer Protocol的缩写,安全文件传送协议。SFTP使用加密传输认证信息和传输的数据,所以使用SFTP是非常安全的。

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

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

二、SFTP搭建

1、安装OpenSSH

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

[[email protected] ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# 重启服务器
[[email protected] ~]# reboot

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

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

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

2、创建用户和组

2.1:创建用户组

  • 这里创建一个单独的用户组,为了方便我们管理SFTP用户
文章来源(Source):https://www.dqzboy.com
# 我这里创建了一个名为sftp-users的用户组
[[email protected] ~]# groupadd sftp-users

2.2:创建用户

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

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

3、配置SSH和权限

3.1:修改SSH的配置

[[email protected] ~]# 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 禁止使用X11转发;没有该参数则需将该参数添加至文件末尾
  • Subsystemsftpinternal-sft文章来源(Source):https://www.dqzboy.comp 指定sshd使用内置sshd的SFTP服务器代码,而不是运行另一个进程
  • Match Group sftp-users 表示下面的配置匹配该用户组,多个组用逗号分隔
  • ChrootDirectory /data/app 表示SFTP所访问的主目录为/data/app,表示指定上面匹配的用户组可以chroot环境路径到此目录, 如果写的是 %h,那就是指定SFTP默认的主目录为用户家目录,比如/home/admin
  • ForceCommand internal-sftp 强制执行内部sftp,并忽略任何~/.ssh/rc文件中的命令

3.2:设定SFTP的权限

# 创建SFTP指定的主目录
[[email protected] ~]# mkdir -p /data/app

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

# 设置SFTP主目录权限为755,不可以超过755否则会登入报错
[[email protected] ~]# chmod 755 /data/app/
  • 注意:目前为止,sftp的主目录只有查看权限,只文章来源(Source):https://www.dqzboy.com能实现下载、查看,并不能上传,删除,重文章来源(Source):https://www.dqzboy.com命名

3.3:创建SFTP子目录

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

3.4:重启SFTP服务

  • 配置完成后需要重新启动ss文章来源(Source):https://www.dqzboy.comhd使配置生效
[[email protected] ~]# systemctl restart sshd.service

三、SFTP登入

1、Linux环境下

[[email protected] ~]# sftp [email protected]
sftp> ls
upload  
sftp> pwd
Remote working directory: /
sftp> cd upload/
sftp> ls
sftp> mkdir 1
sftp> ls
1  

2、Windows环境

  • 通过ftp工具或者xshell选择sftp协议连接
SFTP服务部署配置-浅时光博客
SFTP服务部署配置-浅时光博客

四、问题总结

问题描述:

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。
  • 目录开始一直往上到系统根目录为止都不可以具有群组写入权限
SFTP服务部署配置-浅时光博客
0 条回应
    本站已安全运行: | 耗时 0.414 秒 | 查询 110 次 | 内存 18.49 MB