Debian SFTP常见问题排查与修复
一 快速定位与日志检查
sudo tail -f /var/log/auth.log 实时观察登录与 SFTP 子系统加载情况。sudo systemctl status ssh),端口 22 未被占用(ss -tlnp | grep :22)。sudo sshd -t 校验语法,再重启服务(sudo systemctl restart ssh)。sftp -vvv user@host。二 高频问题对照表
| 症状 | 典型原因 | 快速修复 |
|---|---|---|
| Connection timed out / Connection refused | 防火墙/安全组阻断、SSH 未运行、端口不对 | 放行 22/TCP,确认 sudo systemctl status ssh,必要时 `ss -tlnp |
| Permission denied / Authentication failed | 密码错误、密钥未部署、用户未在允许组、PAM/权限策略限制 | 核对密码/密钥;检查用户所属组与 sshd_config 的 Match 规则;查看 /var/log/auth.log 具体拒绝原因 |
| subsystem request failed on channel 0 | Subsystem sftp 配置错误或二进制不存在 | 在 /etc/ssh/sshd_config 正确设置 Subsystem sftp internal-sftp 或确认路径 /usr/lib/openssh/sftp-server 存在;sudo sshd -t && sudo systemctl restart ssh |
| remote readdir Permission denied | 目录缺少对 SFTP 用户的 r-x 权限、ACL/SELinux 限制 | 对目标目录执行 ls -ldZ 与 getfacl 检查;确保用户对上层目录具备执行权限;若启用 SELinux,查看 /var/log/audit/audit.log |
| Chroot 后无法登录或写入 | Chroot 根目录不属于 root:root 或权限非 755;可写目录未单独授权 | 将 Chroot 根设为 root:root 755;在根下为业务创建子目录并授权给业务用户(如 chown user:group uploads; chmod 755 uploads) |
| SFTP 正常但 SSH 也被允许/被禁止 | ForceCommand internal-sftp 未生效或配置放置位置不当 |
在 Match User/Group 段内设置 ForceCommand internal-sftp,并禁用 AllowTcpForwarding、X11Forwarding;确保该段位于文件末尾或正确使用 Match 范围 |
| 端口被占用 | 其他服务占用了 22 | 调整 SSH 端口或停用占用者,更新防火墙规则后重启 ssh |
三 权限与 Chroot 正确姿势
Subsystem sftp internal-sftp
Match Group sftp_users
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
说明:%h 表示用户主目录;ChrootDirectory 指定的目录及其父目录必须为 root:root 755,否则 chroot 会失败。sudo mkdir -p /home/sftpuser/uploads
sudo chown sftpuser:sftp_users /home/sftpuser/uploads
sudo chmod 755 /home/sftpuser/uploads
sudo usermod -s /usr/sbin/nologin sftpuser。sudo mkdir -p /sftp/www-data/website_files
sudo chown root:root /sftp/www-data
sudo chmod 755 /sftp/www-data
sudo chown www-data:www-data /sftp/www-data/website_files
然后在 sshd_config 中对指定用户使用 ChrootDirectory /sftp/www-data。四 安全加固与运维建议
Match 段统一设置 ForceCommand internal-sftp、AllowTcpForwarding no、X11Forwarding no、PermitTTY no。PasswordAuthentication no);为自动化任务配置专用密钥并限制权限(chmod 600)。SyslogFacility AUTHPRIV、LogLevel VERBOSE,便于审计与问题定位。sudo sshd -t,再 sudo systemctl restart ssh;变更窗口内保持一个备用连接以便回滚。