1、查看openssh版本
ssh -V //openssh版本必须大于4.8p1
2、创建sftp组
groupadd sftp
3、创建sftp用户
useradd -g sftp -s /sbin/nologin -M sftp
passwd sftp //设置密码
chage -M 99999 sftp //设置密码不过期
4、建立目录
mkdir -p /data/sftp/mysftp
usermod -d /data/sftp/mysftp sftp
5、修改sshd_config配置
vim /etc/ssh/sshd_config
注释掉
#Subsystem sftp /usr/libexec/openssh/sftp-server
后面再添加
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /data/sftp/mysftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
6、设置Chroot目录权限
chown root:sftp /data/sftp/mysftp
chmod 755 /data/sftp/mysftp
7、设置可以写入的目录
mkdir /data/sftp/mysftp/upload
chown sftp:sftp /data/sftp/mysftp/upload
chmod 755 /data/sftp/mysftp/upload
关闭selinux:
vim /etc/selinux/config
将文件中的SELINUX=enforcing修改为SELINUX=disabled,然后保存。
执行:
setenforce 0
8、重启sshd服务
systemctl restart sshd.service
如果连接sftp时出现下面的提示:
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer
这个问题的原因是ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755。注意以下两点原则:
目录开始一直往上到系统根目录为止的目录拥有者都只能是 root,用户组可以不是 root。
目录开始一直往上到系统根目录为止都不可以具有群组写入权限
上面2点一定注意,仔细检查。