1. 认证失败
原因:用户密码错误,或用户未被添加到SFTP专用组(如sftp_users)。
解决方法:① 确认用户密码正确性(可通过passwd命令重置密码);② 将用户添加到sftp_users组(sudo usermod -aG sftp_users 用户名);③ 检查用户是否属于正确组(groups 用户名)。
2. 权限不足
原因:用户家目录或上传目录权限设置不当(如家目录被其他用户写入,或上传目录所有者错误)。
解决方法:① 设置家目录权限为755,所有者为用户自身(sudo chown 用户名:用户名 /home/用户名;sudo chmod 755 /home/用户名);② 若存在单独上传目录(如/home/用户名/uploads),设置所有者为用户,权限为775(sudo chown 用户名:用户名 /home/用户名/uploads;sudo chmod 775 /home/用户名/uploads)。
3. 配置文件路径错误
原因:sshd_config中指定的sftp-server路径与实际路径不符(如系统版本不同导致路径变化)。
解决方法:① 使用find命令查找实际路径(sudo find / -name sftp-server);② 修改sshd_config中的Subsystem sftp行为正确路径(如Subsystem sftp /usr/lib/openssh/sftp-server或Subsystem sftp internal-sftp)。
4. SSH服务未运行或未重启
原因:修改sshd_config后未重启服务,或SSH服务未启动。
解决方法:① 启动/重启SSH服务(sudo systemctl restart ssh或sudo systemctl restart sshd);② 检查服务状态(sudo systemctl status ssh),确认服务处于active (running)状态。
5. 防火墙/SELinux/AppArmor限制
原因:防火墙阻止SFTP端口(默认22),或SELinux/AppArmor限制SFTP访问。
解决方法:① 开放防火墙端口(sudo ufw allow 22/tcp;sudo firewall-cmd --permanent --add-port=22/tcp;sudo firewall-cmd --reload);② 临时禁用SELinux测试(sudo setenforce 0),若解决问题则调整SELinux策略;③ 检查AppArmor日志(/var/log/syslog或/var/log/audit/audit.log),调整相关 profile 允许SFTP访问。
6. Chroot目录配置错误
原因:ChrootDirectory设置不当(如目录权限为777,或所有者非root)。
解决方法:① 确保ChrootDirectory(如%h或/home/用户名)的所有者为root(sudo chown root:root /home/用户名);② 设置目录权限为755(sudo chmod 755 /home/用户名);③ 避免在ChrootDirectory下存放用户可写的文件(上传目录需在ChrootDirectory外或单独设置权限)。
7. 日志分析困难
原因:未查看系统日志,无法定位具体错误原因。
解决方法:① 使用journalctl查看SSH日志(sudo journalctl -u ssh);② 查看/var/log/auth.log(Debian默认认证日志),根据错误信息(如“Permission denied”“Invalid user”)针对性解决。