SFTP配置

SFTP = SSH File Transfer Protocol, 属于SSH协议的一部分, 具备sshd服务即可提供SFTP功能, 不需要额外安装

VSFTPD支持开启ssl, 但不等价于SFTP

1 新建用户

# 添加用户
useradd -d /home/u1/ u1
echo "changeme" |passwd u1 --stdin

2 sftp连接

[root@localhost ~]# sftp u1@localhost
u1@localhost's password: 
Connected to localhost.
sftp> pwd
Remote working directory: /home/u1
sftp>

3 Subsystem

Centos 7 默认使用sftp-server, 但无法结合ChrootDirectory使用, 安全性不高

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

建议使用 internal-sftp

注意:

  • ChrootDirectory指定目录的所有者必须是root
  • %u表示用户名
Subsystem       sftp    internal-sftp

Match Group sftp
    ChrootDirectory /data/%u
    ForceCommand    internal-sftp

3.1 ERR1: Received message too long 1416128883

注意

  • subsystem使用默认的 sftp-server

  • 如果使用的 internal-sftp, 即使是nologin也能正常连接

创建用户时, shell指定nologin, 此时连接sftp抛出异常

[root@localhost ~]# useradd -d /home/u2 -s /sbin/nologin u2
[root@localhost ~]# echo "changeme" |passwd u2 --stdin

[root@localhost ~]# sftp u2@localhost
u2@localhost's password: 
Received message too long 1416128883

修改为bash后, 可正常使用; 从安全性考虑, 不允许sftp用户登录shell, 所以不建议修改

[root@localhost ~]# usermod -s /bin/bash u2
[root@localhost ~]# sftp u2@localhost
u2@localhost's password: 
Connected to localhost.
sftp> 

3.2 ERR2: Couldn't read packet: Connection reset by peer

当配置了ChrootDirectory时, 容易出现此错误

sshd_config配置如下:

Match User u3
        ChrootDirectory /data/sftp/%u
        ForceCommand    internal-sftp

u3用户目录

[root@localhost ~]# cat /etc/passwd |grep u3
u3:x:1002:1002::/data/sftp/u3:/bin/bash

咋一看正常, 因chroot修改了用户家目录的相对路径, 所以u3的家目录此时应修改为/

[root@localhost ~]# usermod -d / u3
[root@localhost sftp]# sftp u3@localhost
u3@localhost's password: 
Connected to localhost.
sftp> 

推荐阅读更多精彩内容