1.sftp的配置
1) 查看ssh版本
sftp是基于ssh协议的子协议,首先查看ssh版本,openssh -server版本至少得失4.8p1, 因为配置权限需要版本添加的新配置项ChrootDirectory来完成
[root@izys605x4c311swvscc1y0z ~]# ssh -V
OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013
2) 创建用户和组
将用户的shell
设置为/bin/false使他没有登陆shell的权限
useradd sftp -s /bin/false
3) 给家目录更改属主并授权
家目录必须是root,权限可以是755或者750
chown root:sftp testsftp
chmod 700 -R testsftp
4) 编辑配置文件/etc/ssh/sshd_config
#Subsystem sftp /usr/libexec/openssh/sftp-server #注释掉这行
Subsystem sftp internal-sftp #增加以下6行
Match Group sftp
ChrootDirectory /%u #设定属于用户组sftp的用户访问的根文件夹
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no #设置不允许SSH的X转发
#UseDNS no #注释掉
#AddressFamily inet #注释掉
#SyslogFacility AUTHPRIV #注释掉
5) 重启sshd服务
[root@izys605x4c311swvscc1y0z ~]# systemctl restart sshd
[root@izys605x4c311swvscc1y0z ~]# systemctl status sshd | grep Active
Active: active (running) since Sun 2018-02-11 18:00:13 CST; 7s ago
6) 验证是否生效
在另一台客户机上,使用sftp 用户@IP进行连接
[root@izys605x4c311ss06lb63lz ~]# sftp root@192.168.2.183
root@192.168.2.183's password:
Connected to 192.168.2.183.
sftp> ls
testsftp
常见问题: 如果你链接服务器的时候出现下面的提示: Write failed: Broken pipe Couldn’t read packet: Connection reset by peer 这个问题的原因是ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755。