zoukankan      html  css  js  c++  java
  • SFTP 安装与配置

    SFTP 安装与配置

    sftp 是 Secure File Transfer Protocol 的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。SFTP 为 SSH 的一部分,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的 FTP 要低得多,如果您对网络安全性要求更高时,可以使用 SFTP 代替 FTP。

    一、sftp 搭建

    (1) 创建 sftp 组

    groupadd sftp
    # -g 用户组; -d 指定家目录; -s 不登陆; -M 不创建家目录 
    useradd -g sftp -d /data/sftp/sftpuser -s /sbin/nologin sftpuser
    echo 123456 | passwd --stdin sftpuser
    

    (2) 修改 sshd_config 配置

    vim /etc/ssh/sshd_config
    
    #Subsystem      sftp    /usr/libexec/openssh/sftp-server
    Subsystem sftp internal-sftp
    Match Group sftp
    ChrootDirectory /data/sftp/%u
    ForceCommand internal-sftp
    
    # 下面两项是与安全有关
    AllowTcpForwarding no
    X11Forwarding no
    
    • Match Group sftp 这一行是指定以下的子行配置是匹配 sftp 用户组的。Match user userA,userB 则是匹配用户。
    • ChrootDirectory /data/sftp/%u 设定属于用户组 sftp 的用户访问的根文件夹。%h 代表用户 home 目录,%u 代表用户名。
    • ForceCommand internal-sftp 该行强制执行内部 sftp,并忽略任何 ~/.ssh/rc 文件中的命令。
    • AllowTcpForwarding no 是否允许 TCP 转发,默认值为 "yes", 禁止 TCP 转发并不能增强安全性,除非禁止了用户对 shell 的访问,因为用户可以安装他们自己的转发器。
    • X11Forwarding no 是否允许进行 X11 转发。默认值是 "no",设为 "yes" 表示允许。如果允许 X11 转发并且 sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。那么将可能有额外的信息被泄漏。由于使用 X11 转发的可能带来的风险,此指令默认值为"no"。需要注意的是,禁止 X11 转发并不能禁止用户转发 X11 通信,因为用户可以安装他们自己的转发器。

    (3) 权限设置

    要实现 Chroot 功能, 目录权限的设置非常重要 。否则无法登录,给出的错误提示也让人摸不着头脑,无从查起。我在这上面浪费了很多时间。

    ChrootDirectory:定义了用户通过认证以后的 chroot 目录,此目录及其所有子目录的属主必须是 root,且这些目录只有 root 帐号可以进行写操作,其他任何组和帐号都不可写。chroot 以后,sshd 会将用户的工作目录转到 chroot 目录中用户自己的主目录。如果 ChrootDirectory 定义的目录下没有相应的 /home/username 目录,则会直接转到 chroot 的 / 目录下。

    chown root:root /data/sftp/sftpuser
    chmod 755 /data/sftp/sftpuser
    

    目录权限设置上要遵循2点:

    • ChrootDirectory 设置的目录权限及其所有的上级文件夹权限,属主和属组必须是 root;
    • ChrootDirectory 设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,权限最大设置只能是 755。

    (4) 建立 SFTP 用户可写目录

    由于 /data/sftp/sftpuser 的用户是 root,其它用户都没有写的权限,所有要有该目录下新建一个目录用于文件的上传下载。

    mkdir -p /data/sftp/sftpuser/upload
    chown sftpuser:sftp /data/sftp/sftpuser/upload
    chmod 755 /data/sftp/sftpuser/upload
    

    (5) 测试

    sftp -P2022 sftpuser@172.16.16.126
    sftp> pwd
    Remote working directory: /upload
    sftp> lls
    1  anaconda-ks.cfg  zookeeper.out
    sftp> put anaconda-ks.cfg 
    Uploading anaconda-ks.cfg to /upload/anaconda-ks.cfg
    anaconda-ks.cfg                                         100% 1839    39.4KB/s   00:00    
    

    二、SFTP 配置

    2.1 MaxStartups 1000:30:3000

    同时允许几个尚未登入的联机画面,所谓联机画面就是在你 ssh 登录的时候,没有输入密码的阶段

    MaxStartups 10:30:100    # start:rate:full
    
    • start:表示未完成认证的连接数
    • rate:当未完成认证的连接数超过 start 时,rate/100 表示新发起的连接有多大的概率被拒绝连接。
    • full:如果未完成认证的连接数达到 full,则新发起的连接全部拒绝。

    查看 sshd 配置参数:

    sshd -T | grep -i startup
    

    2.2 maxsessions 1000

    同一地址的最大连接数,也就是同一个 IP 地址最大可以保持多少个链接。

    如下以上两个参数配置不正确,可能出现如下错误:

    ssh_exchange_identification: Connection closed by remote host
    

    《SSH 服务的几个超时参数配置》: https://yq.aliyun.com/articles/57903?spm=5176.11156381.0.0.68684403ani1fa

    三、踩过的坑

    问题 1: Couldn't read packet: Connection reset by peer

    sftp 输入密码后报错:

    [root@sdw1 ~]# sftp sftpuser@sdw1
    sftpuser@sdw1's password: 
    packet_write_wait: Connection to 192.168.2.111 port 22: Broken pipe
    Couldn't read packet: Connection reset by peer
    [root@sdw1 ~]# sftp sftpuser@sdw1
    sftpuser@sdw1's password: 
    Connected to sdw1.
    

    原因:/data/sftp/sftpuser(ChrootDirectory) 的用户必须为 root,参考 sftp 安装 (3)

    chown root:sftp /data/sftp/sftpuser
    

    问题 2: remote readdir("/"): Permission denied

    sftp 登陆成功后,没有读的权限

    sftp> ls
    remote readdir("/"): Permission denied
    

    原因:/data/sftp/sftpuser(ChrootDirectory) 组 sftp 必须要有读的权限,参考 sftp 安装 (3)

    chmod 755 /data/sftp/sftpuser
    

    每天用心记录一点点。内容也许不重要,但习惯很重要!

  • 相关阅读:
    PHP 获取完整URL地址
    竖向 两级手风琴 TAB 栏
    Log4Net 用法记录
    C# 正整数和非零正整数校验
    NewtonSoft对象转json时,把 NULL 转 "" , 过滤 NULL, DateTime 时间类型去除 T
    SQL 事务
    SQL insert 主键冲突
    【记录】无法读取配置节“AppSettings”,因为它缺少节声明
    asp.net 前后台数据交互方式(转)
    php 生成文件txt到指定目录
  • 原文地址:https://www.cnblogs.com/binarylei/p/9201975.html
Copyright © 2011-2022 走看看