具体配置步骤:
1. 创建一个专门的用户组和用户
#创建sftp组 groupadd sftp #创建一个sftp用户,用户名为ylh useradd -g sftp -s /bin/false ylh
#修改密码
passwd ylh
注意,这里将shell设置为/bin/false使其没有登陆shell的权限
2.指定目录
#sftp组的用户的home目录统一指定到/data/sftp下 mkdir -p /data/sftp/ylh #然后指定ylh的home为/data/sftp/ylh usermod -d /data/sftp/ylh ylh
3.编辑/etc/ssh/sshd_config
#编辑sshd_config vi /etc/ssh/sshd_config #输入/Subsystem搜索到下列内容,注释掉原有的 # Subsystem sftp /usr/libexec/openssh/sftp-server #改为internal-sftp Subsystem sftp internal-sftp
为什么使用 internal-sftp 而不用默认的 sftp-server,这是因为:
- 这是一个进程内的 sftp 服务,当用户 ChrootDirectory 的时候,将不请求任何文件;
- 更好的性能,不用为 sftp 再开一个进程。
4.设定属于用户组sftp的用户都只能访问他们自己的home文件夹
在sshd_config文件结尾添加:
# 匹配用户组,如果要匹配多个组,多个组之间用逗号分割 Match Group sftpusers # 指定登陆用户到自己的用户目录 ChrootDirectory /data/sftp/%u # 指定 sftp 命令 ForceCommand internal-sftp # 这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉 X11Forwarding no AllowTcpForwarding no
5.增加上传权限
chown ylh:sftp /data/sftp/ylh chmod 755 /data/sftp/ylh
6.重启sshd服务
service sshd restart
//systemctl restart sshd
7.参考链接
https://www.jianshu.com/p/8da79294a46f
https://segmentfault.com/a/1190000008578734