为sftp选择/新建一个工作目录,目录的所有上级目录属主必须为root,且不能为777的权限
mkdir -p /mnt/sftp/mysftp
chown root:root /mnt/sftp
chown 755 /mnt/sftp
chown mysftp:mysftp /mnt/ftp/mysftp
目录/mnt/sftp用于给用户进行chroot,而mysftp真正有权限写的目录是/mnt/sftp/mysftp,由于Linux的安全机制此处看起来有一些复杂
三、修改sshd配置文件
修改最好前先备份一下配置文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
将原有的sftp配置注释掉,然后在配置文件的最后加上下面的部分
#在配置文件中找到这一行注释掉
#Subsystem sftp /usr/lib/openssh/sftp-server
#文件最后加上下面这几行
Subsystem sftp internal-sftp
Match User mysftp
ChrootDirectory /mnt/ftp
AllowTcpForwarding no
X11Forwarding no
ForceCommand internal-sftp
四、重启sshd生效
systemctl restart sshd
五、遇到的一些问题和Tips
sftp登录不成功,如何排查?
查看检查sshd的日志,根据报错修复。根据sshd版本不同,日志可能存在下面几个文件中。
grep sshd /var/log/messages
less /var/log/journal/sshd.service.log
less /var/log/auth.log
由于sftp使用的sshd服务,默认使用22端口,想要换一个端口?
可以在sshd_config配置文件中增加一个端口监听,让sshd同时监听多个端口。记得将Port=22这行注释掉哦,这样就不会影响原来的ssh服务。
Port 22 #将原有的这一行注释取消,下面另外加一行
Port 38812
如果登录的时候还没有提示输入密码,就直接提示证书认证失败了
在sshd_config中针对mysftp用户增加一行配置(步骤三),允许使用密码登陆
PasswordAuthentication yes
上传的文件权限变少了?
原来上传的文件权限是755,上传后变成了750,可以通过设置sftp的umask来解决,增加一个-u参数指定,如下
Subsystem sftp internal-sftp -u 000
日志报错 bad ownership or modes for chroot directory
检查为sftp设置的工作目录(ChrootDirectory),目录本身及所有上级目录属主必须是root,所有不能有777的权限