SFTP 工具可以用来打开一次安全互动的 FTP 会话。它与 FTP 相似,只不过,它使用安全、加密的连接。它的一般语法是:sftp username@hostname.com。一旦通过验证,你可以使用一组和使用 FTP 相似的命令。

Ubuntu 云服务器开启 SFTP

  1. 确认是否已经安装 openssh-server。

    dpkg --get-selections |grep ssh
    bestp linux sftp 1

    如果没有安装,请手动执行下面的指令进行安装。

    sudo apt-get install openssh-server
  2. 新建用户组 sftp-users,并新建用户 sftp。

    sudo addgroup sftp-users
    sudo adduser sftp
    bestp linux sftp 2
  3. 给 sftp 赋权并新建用户组 ssh-users。

    1. 将 sftp 从所有其他用户组中移除并加入到 sftp-users 组,并且关闭其 Shell 访问:

      sudo usermod -G sftp-users -s /bin/false sftp
    2. 创建 SSH 用户组,并把管理员加入到该组(注意 usermod 中的 -a 参数的意思是不从其他用户组用移除)。

      sudo addgroup ssh-users
      sudo usermod -a -G ssh-users root
      bestp linux sftp 3
      bestp linux sftp 4
  4. 创建并设置 sftp 用户目录。

    sudo mkdir /home/sftp_root
    sudo mkdir /home/sftp_root/shared
    sudo chown root:sftp-users /home/sftp_root/shared
    sudo chmod 770 /home/sftp_root/shared
    bestp linux sftp 5
  5. 修改 SSH 配置文件。

    sudo vi  /etc/ssh/sshd_config

    在 sshd_config 文件的最后,添加以下内容:

    AllowGroups ssh-users sftp-users
    Match Group sftp-users
    ChrootDirectory /home/sftp_root
    AllowTcpForwarding no
    X11Forwarding no
    ForceCommand internal-sftp
    bestp linux sftp 6
  6. 重启系统使配置生效。

    sudo reboot now
    bestp linux sftp 7
  7. 验证。

    sftp sftp@192.168.8.2
    bestp linux sftp 8

CentOS 云服务器开启 SFTP。

  1. 创建用户组 sftp。

    groupadd sftp
  2. 创建用户 ftp 文件目录。

    mkdir /home/sftp
  3. 创建用户 sftpuser。

    useradd -g sftp -s /sbin/nologin -d /home/sftp/sftpuser sftpuser
说明

-g 加入到 sftp 组;-s 禁止登录;-d 指定用户的登入目录。

  1. 设置密码。

    passwd sftpuser
  2. 修改文件夹属组。

    chown -R sftpuser:sftp /home/sftp/sftpuser
    bestp linux sftp 9
  3. 修改 SSH 的配置文件。

    vi /etc/ssh/sshd_config

    注释 Subsystem 原配置

    #Subsystem sftp /usr/libexec/openssh/sftp-server

    添加下面几列:

    启用 internal-sftp
    限制用户 SFTP 访问的根目录
    限制 ftpuser1 用户的根目录
    Subsystem sftp internal-sftp
    Match User ftpuser
    ChrootDirectory /home/sftp
    ForceCommand    internal-sftp
    bestp linux sftp 10
  4. 重启 sshd 服务。

    systemctl restart sshd
  5. 验证。

    sftp sftpuser@192.168.8.2
说明

没有重启 sshd 时去连接 sftpuser,会提示 Received message too long 1416128883。

+ image::/images/cloud_service/compute/vm/bestp_linux_sftp_11.webp[]