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>
网友评论