在 Ubuntu 上使用 SFTP 时遇到权限错误(如 Permission denied、remote readdir permission denied 等),通常是目录权限、用户配置或 SSH/SFTP 服务设置问题。下面按常见场景逐步排查和解决。
SFTP 用户的主目录(如 /home/user)通常要求:
chown user:user /home/user
chmod 755 /home/user
❌ 错误示例:
drwxrwxrwx user user /home/user
SSH 会拒绝登录。
如果你使用了 ChrootDirectory(常见于 jail SFTP):
Match User sftpuser
ChrootDirectory /sftp
ForceCommand internal-sftp
那么:
/sftp 必须 root 拥有chown root:root /sftp
chmod 755 /sftp
用户可写目录应放在里面:
/sftp/upload
chown sftpuser:sftpuser /sftp/upload
permission denied
cannot create file
确保目标目录对 SFTP 用户可写:
chown sftpuser:sftpuser /sftp/upload
chmod 755 /sftp/upload
如需更宽松:
chmod 775 /sftp/upload
grep sftp /etc/ssh/sshd_config
应有:
Subsystem sftp internal-sftp
修改后重启:
sudo systemctl restart ssh
示例(推荐安全配置):
Match Group sftpusers
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
注意:
%u 目录必须存在查看日志:
sudo journalctl -u ssh
sudo dmesg | grep denied
如有拒绝,可临时测试:
sudo aa-complain /etc/apparmor.d/usr.sbin.sshd
| 错误信息 | 原因 |
|---|---|
| Permission denied | 目录权限不对 |
| remote readdir permission denied | Chroot 目录非 root |
| broken pipe | Chroot 配置错误 |
| write failed | 目标目录不可写 |
| connection closed | ForceCommand 配置错误 |
# 1. 查看 ssh 日志
sudo tail -f /var/log/auth.log
# 2. 测试连接
sftp user@ip
# 3. 检查权限
namei -l /sftp/user
如果你愿意,可以把:
sshd_config 相关配置发给我,我可以帮你精确定位问题。