暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

sftp的配置以及使用

运维DevOps 2023-07-27
107

 一、sftp简述:

sftp(Secure File Transfer Protocol)是一种安全的文件传送协议,是ssh内含协议,也就是说只要sshd服务器启动了,sftp就可使用,不需要额外安装,它的默认端口和SSH一样为22

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

本例子演示的为基于Centos7

二、SFTP服务配置

1、首先用root用户查看ssh的版本,版本需要大于4.8p1,如图:

2、使用root用户创建用户组,组名为sftpgroup(可自定义),创建用户sftpuser,并设置密码,如图:

说明:

  • -M表示创建用户的时候不生成home目录

  • -s sbin/nologin表示创建的用户sftp用户不能登录系统

3、修改配置文件sshd_config,将原来的Subsystem sftp usr/libexec/openssh/sftp-server注释掉,然后在最后添加内容如下:

    Subsystem sftp internal-sftp # 启用SFTP子系统,并使用internal-sftp命令实现SFTP服务
    Match Group sftpgroup        # 将用户匹配到sftpgroup组的账户,仅允许使用SFTP服务登录
    X11Forwarding no # 禁用X11转发,SFTP用户无法进行X11转发
    AllowTcpForwarding no # 禁用TCP转发,SFTP用户无法进行端口转发
    ChrootDirectory %h # 将SFTP用户的根目录限制在其主目录内。%h表示用户主目录
    ForceCommand internal-sftp   # 将SFTP用户Shell设置为internal-sftp命令,只能使用SFTP不能登录Shell


    4、新建用户目录/sftp/sftpuser,将其设置为用户sftpuser的home目录,并指定目录权限,如图:

      mkdir -p /sftp/sftpuser                         #新建目录
      usermod -d /sftp/sftpuser sftpuser             #将此目录设置为用户sftpuser的家目录
      chown root:sftpgroup /sftp/sftpuser            #修改目录的属主和属组
      chmod 755 /sftp/sftpuser                       #修改目录权限
      mkdir -p /sftp/sftpuser/upload                 #创建一个上传目录
      chown sftpuser:sftpgroup /sftp/sftpuser/upload/ #修改目录的属主和属组
      chmod 755 /sftp/sftpuser/upload/ #修改目录权限

      5、重启sshd,执行命令如下:

        systemctl restart sshd

        6、通过客户端登录,Winscp或者Xftp都可以,协议选择SFTP,如图:

        登录后即可正常实现文件的上传与下载

        注意:上面的sshd_config配置文件中后添加的内容要放在文件的最后,否则可能出现错误如下:

          /etc/ssh/sshd_config line 145: Directive 'Ciphers' is not allowed within a Match block

          附加:

          首先观察upload的属主和属组,如图:

          从上图中可以看出,权限设置为755,属主sftpuser具备任意权限,属组sftpgroup只有读取权限,因此如果要将设置其他任意用户只具备下载权限,可将用户加入到sftpgroup中,演示如下:

          1、创建一个用户,加入到组sftpgroup中,命令如下:

            useradd -g sftpgroup -M -s /sbin/nologin sftpTemp

            2、指定用户的家目录为上面创建的/sftp/sftpuser,如图:

              usermod -d /sftp/sftpuser  sftpTemp

              3、配置用户密码,如下:

                # 只做演示用,因此通过此方式配置密码,较快
                echo "sftpTemp" | passwd --stdin sftpTemp

                4、通过客户端连接后,测试上传,可以发现无权限,下载正常,如图:

                注意:为什么新增的用户的家目录也要设置为跟之前的一样为/sftp/sftpuser,因为在sshd_config中配置了ChrootDirectory %h,此参数的意思是限制SFTP用户能访问的路径,在这里设置为只能访问他自己的家目录,上面设置的upload目录是在/sftp/sftpuser路径下,因此只有在这个路径下活动的用户才有权限访问此路径,虽然新增用户加入了sftpgroup,但如果不设置家目录为/sftp/sftpuser,其活动范围还是/home下,会导致无法连接sftp

                文章转载自运维DevOps,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论