zoukankan      html  css  js  c++  java
  • 第一章 SFTP服务的搭建

    2021-05-24-SFTP服务的搭建

    一、SFTP概述

    #1.FTP协议
    FTP是一种文件传输协议,一般是为了方便数据共享的。包括一个FTP服务器和多个FTP客户端。FTP客户端通过FTP协议在服务器上下载资源。
    
    #2.SFTP协议
    sftp(Secure File Transfer Protocol)是一种安全的文件传送协议,是ssh内含协议,只要sshd服务器启动了,sftp就可使用,不需要额外安装,它的默认端口为22。
    

    二、SFTP使用场景

    #建议:更高的效率使用FTP协议,更安全的通信使用SFTP协议。
    
    sftp通过使用加密/解密技术来保障传输文件的安全性,因此sftp的传输效率比普通的FTP要低,但sftp的安全性要比ftp高,因此sftp通常用于报表、对账单等对安全性要求较高的场景。
    

    三、Centos 7搭建SFTP

    1.查看openssh版本:版本需大于4.8

    #1.查看openssh版本:版本需大于4.8
    [root@prd-db01 ~]$ ssh -V
    OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017
    

    2.创建用户组和用户

    #1.使用root用户创建用户组,组名为sftpuser_vivaki;创建sftp用户,用户名为sftpuser_vivaki,并设置密码
    [root@prd-db01 ~]$ groupadd sftpuser_vivaki // 创建sftp组
    
    [root@prd-db01 ~]$ useradd -g sftpuser_vivaki -M -s /bin/bash sftpuser_vivaki //-M 表示创建用户时不生成对应home目录,-s /sbin/nologin 表示sftp用户不能登录系统
    
    [root@prd-db01 ~]$ passwd sftpuser_vivaki // 修改sftp用户密码
    

    3.修改配置文件sshd_config

    [root@prd-db01 ~]$ vi /etc/ssh/sshd_config
    修改如下:
    #注释掉这行
    #Subsystem sftp /usr/libexec/openssh/sftp-server
    ## 在文件末尾添加如下几行
    #指定使用sftp服务使用系统自带的internal-sftp,如果不添加,用户无法通过sftp登录。
    Subsystem sftp internal-sftp
    #匹配用户组,如果要匹配多个组,多个组之间用逗号分割
    Match Group sftpuser_vivaki
    #用chroot将指定用户的根目录,chroot的含义:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/;这里的%u指的是账号名,/data/sftpuser_vivaki/%u 含义是:/data/sftpuser_vivaki/sftpuser_vivaki
    ChrootDirectory /data/sftpuser_vivaki
    #指定sftp命令
    ForceCommand internal-sftp 
    #这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
    X11Forwarding no 
    AllowTcpForwarding no
    
    

    4.创建目录并设置Chroot目录权限

    #1.使用root用户新建目录/home/sftpfile,将其设置为/data/sftpuser_vivaki的home目录,并指定目录权限
    [root@prd-db01 ~]$ mkdir -p /data/sftpuser_vivaki //-p 表示parents,即递归创建目录
    [root@prd-db01 ~]$ usermod -d /data/sftpuser_vivaki sftpuser_vivaki // -d 表示修改用户home目录
    
    #2.设置Chroot目录权限
    [root@prd-db01 ~]$ chown root:sftpuser_vivaki /data/sftpuser_vivaki  #文件夹所有者必须为root,用户组可以不是root=
    [root@prd-db01 ~]$ chmod 755 /data/sftpuser_vivaki  #权限不能超过755,否则会导致登录报错,可以是755
    
    #3.设置sftp用户可以操作的目录
    [root@prd-db01 ~]$ mkdir /data/sftpuser_vivaki/attr_analysis
    [root@prd-db01 ~]$ chown sftpuser_vivaki:sftpuser_vivaki /data/sftpuser_vivaki/attr_analysis
    [root@prd-db01 ~]$ chmod 755 /data/sftpuser_vivaki/attr_analysis
    
    ps:
    1. ChrootDirectory所指向的文件夹,属主必须是root,属组是sftp用户所属的用户组。
    2. ChrootDirectory所指向的文件夹到系统根路径上的所有途径文件夹,属主都必须是root,且权限不允许有群组用户写入权限,即权限只能为750或755,如果任意一个是777,则会出现上述问题。
    

    5、重启SSH

    #1.重启sshd服务
    [root@prd-db01 ~]$ systemctl restart sshd.service
    
    #2.查看服务状态
    [root@prd-db01 ~]$ systemctl status sshd.service
    

    四、测试验证服务正确性

    #1.在其他服务器上进行验证,sftp用户名@ip地址
    sftp -P 22 sftpuser_vivaki@172.31.26.143
    至此已经完成了sftp创建用户,并修改权限,限制根目录。
    
    在用户登录测试过程中,可能会遇到如下错误:
    Couldn't read packet: Connection reset by peer
    是目录权限导致了该问题,具体解决方案,回看三步骤!
    

    五、最快SFTP搭建

    #1.创建相关目录
    [root@prd-databridge001 ~]$ mkdir -p /data/sftpuser_cp
    [root@prd-databridge001 ~]$ useradd sftpuser_cp -d /data/sftpuser_cp
    [root@prd-databridge001 ~]$ chown -R sftpuser_cp:sftpuser_cp /data/sftpuser_cp
    
    #2.导入用户密钥
    1.这里采用亚马逊云生成ssh密钥,上传密钥
    [root@prd-databridge001 ~]$ cd /tmp
    [root@prd-databridge001 tmp]$ rz
    
    2.切换用户登录
    [root@prd-databridge001 tmp]$ su - sftpuser_cp
    上一次登录:五 6月 18 17:24:43 CST 2021pts/0 上
    
    3.转换密钥
    [sftpuser_cp@prd-databridge001 ~]$ cd ~
    [sftpuser_cp@prd-databridge001 ~]$ ssh-keygen -y
    Enter file in which the key is (/data/sftpuser_cp/.ssh/id_rsa): /tmp/Stging-DataBridge-ContentPrism-SFTP.pem  #这里填写密钥位置
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCdSuN1X5LqDzW8a2HSCxWR+wjZO5pbAoOMcwEDIpLXVFv4pneoxzUH8+UQYtWIsMbDCEW*************************************************************************************************
    
    4.复制密钥文件
    [sftpuser_cp@prd-databridge001 ~]$ mkdir .ssh
    [sftpuser_cp@prd-databridge001 ~]$ vi .ssh/authorized_keys
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCdSuN1X5LqDzW8a2HSCxWR+wjZO5pbAoOMcwEDIpLXVFv4pneoxzUH8+UQYtWIsMbDCEW*************************************************************************************************
    
    5.修改ssh目录权限
    [sftpuser_cp@prd-databridge001 ~]$ chmod -R 500 .ssh/
    
    #6.测试登录略
    
  • 相关阅读:
    Vue- 对象语法 v-bind:class与对象语法的使用(重要)
    关于vue中$emit事件问题
    深入理解vue.js2.0指令v-for使用及索引获取
    到底vuex是什么?
    Vue.js学习系列二 —— vuex学习实践笔记(附DEMO)
    前端HTML5几种存储方式的总结
    JSON和JS对象之间的互转
    Vue2.0子父组件通信
    C#字符串和16进制转换
    C#中int32 的有效值范围
  • 原文地址:https://www.cnblogs.com/jhno1/p/14805581.html
Copyright © 2011-2022 走看看