温馨提示×

centos sftp上传报错怎么处理

小樊
57
2026-10-20 12:27:37
栏目: 智能运维

在 CentOS 上使用 SFTP 上传文件报错是很常见的问题,原因通常涉及 权限、SELinux、磁盘空间、配置或防火墙。下面我按「常见报错 → 原因 → 解决办法」给你一个系统排查指南。


一、先确认报错信息(非常重要)

请先看具体报错,例如:

  • Permission denied
  • No such file or directory
  • Write failed: Disk quota exceeded
  • Connection closed
  • remote readdir permission denied

不同报错对应不同原因。


二、最常见原因及处理方法

1️⃣ 权限问题(Permission denied)

原因

  • SFTP 用户对目标目录没有写权限
  • 目录属主不是该用户

排查

ls -ld /path/to/upload
id sftpuser

解决

chown sftpuser:sftpuser /path/to/upload
chmod 755 /path/to/upload

如果是子目录:

chown -R sftpuser:sftpuser /path/to/upload

2️⃣ SELinux 导致写入失败(CentOS 特有)

现象

  • 权限正常,但仍然无法上传
  • 日志中有 avc: denied

排查

getenforce

如果是 Enforcing

临时解决

setenforce 0

永久解决(推荐)

semanage fcontext -a -t public_content_rw_t "/path/to/upload(/.*)?"
restorecon -Rv /path/to/upload

或允许 SFTP 写:

setsebool -P sftp_home_dir on

3️⃣ 磁盘空间不足

报错示例

Write failed: Disk quota exceeded

排查

df -h
df -i

解决

  • 清理日志
  • 删除大文件
  • 扩容磁盘

4️⃣ SFTP 被 chroot 限制(最常见配置问题)

如果你在 /etc/ssh/sshd_config 中配置了:

Match User sftpuser
    ChrootDirectory /sftp
    ForceCommand internal-sftp

注意

  • ChrootDirectory 必须 root 拥有,且 755
  • 用户不能在 chroot 根目录直接写

正确结构

/sftp (root:root 755)
/sftp/upload (sftpuser:sftpuser 755)

5️⃣ SSH 配置错误

检查:

grep sftp /etc/ssh/sshd_config

正常应有:

Subsystem sftp internal-sftp

修改后重启:

systemctl restart sshd

6️⃣ 防火墙 / 安全组

SFTP 走 22 端口

ss -tnlp | grep :22
firewall-cmd --list-all

云服务器还要检查安全组是否放通 22。


三、快速自检清单 ✅

# 1. 用户是否登录成功
sftp sftpuser@IP

# 2. 是否能进目录
cd /path

# 3. 是否能写
put test.txt

四、如果你愿意,我可以直接帮你定位

你可以把下面信息发我:

  1. 完整报错信息
  2. sshd_config 中 SFTP 相关配置
  3. 上传目录权限(ls -ld)
  4. CentOS 版本(cat /etc/redhat-release)

我可以直接告诉你 改哪一行、执行哪条命令。

0 踩