温馨提示×

ubuntu sftp权限错误如何处理

小樊
53
2026-09-17 11:40:50
栏目: 智能运维

在 Ubuntu 上使用 SFTP 时遇到权限错误(如 Permission denied、remote readdir permission denied 等),通常是目录权限、用户配置或 SSH/SFTP 服务设置问题。下面按常见场景逐步排查和解决。


一、最常见原因:目录权限不正确

1. 用户主目录权限要求

SFTP 用户的主目录(如 /home/user)通常要求:

  • 属主必须是该用户
  • 其他用户不能有写权限
chown user:user /home/user
chmod 755 /home/user

❌ 错误示例:

drwxrwxrwx  user user /home/user

SSH 会拒绝登录。


2. Chroot 目录权限(重要)

如果你使用了 ChrootDirectory(常见于 jail SFTP):

Match User sftpuser
    ChrootDirectory /sftp
    ForceCommand internal-sftp

那么:

  • /sftp 必须 root 拥有
  • 权限只能是 755 或更严格
chown root:root /sftp
chmod 755 /sftp

用户可写目录应放在里面:

/sftp/upload
chown sftpuser:sftpuser /sftp/upload

二、SFTP 用户无法写入目录

现象

permission denied
cannot create file

解决

确保目标目录对 SFTP 用户可写:

chown sftpuser:sftpuser /sftp/upload
chmod 755 /sftp/upload

如需更宽松:

chmod 775 /sftp/upload

三、SSH 配置导致 SFTP 失败

1. 确保启用了 SFTP

grep sftp /etc/ssh/sshd_config

应有:

Subsystem sftp internal-sftp

修改后重启:

sudo systemctl restart ssh

2. 检查 Match 块配置

示例(推荐安全配置):

Match Group sftpusers
    ChrootDirectory /sftp/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

注意:

  • %u 目录必须存在
  • 目录属主是 root

四、SELinux / AppArmor(少见但可能)

Ubuntu 默认是 AppArmor

查看日志:

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 相关配置
  • 目录结构

发给我,我可以帮你精确定位问题。

0 踩