温馨提示×

centos sftp上传失败啥原因

小樊
49
2026-09-11 21:41:10
栏目: 智能运维

在 CentOS 上 SFTP 上传失败 的原因比较多,下面按常见程度帮你梳理一下,你可以对照排查。


一、权限问题(最常见)

1. 目标目录没有写权限

ls -ld /path/to/upload

如果目录权限类似:

drwxr-xr-x root root

而你是普通用户,就会失败。

✅ 解决:

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

2. 用户被 chroot 限制但目录权限不对

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

ChrootDirectory /home/sftp

那么:

  • /home/sftp 必须属主为 root
  • 权限 最多 755
  • 真正可写目录要在里面再建一层

❌ 错误示例:

/home/sftp 属主 sftpuser

✅ 正确:

chown root:root /home/sftp
chmod 755 /home/sftp
mkdir /home/sftp/upload
chown sftpuser:sftpuser /home/sftp/upload

二、磁盘问题

3. 磁盘满了

df -h

如果 Use% 是 100%,上传必失败。

✅ 解决:清理日志、旧文件


4. inode 用完

df -i

即使磁盘没满,inode 满也不行。


三、SELinux(CentOS 特有坑)

5. SELinux 阻止写入

查看:

getenforce

如果是 Enforcing

查看审计:

ausearch -m avc -ts recent

✅ 临时解决:

setenforce 0

✅ 永久正确做法(示例):

semanage fcontext -a -t public_content_rw_t "/data/sftp(/.*)?"
restorecon -Rv /data/sftp
setsebool -P allow_sftpd_full_access on

四、SSH / SFTP 配置问题

6. 禁止了 SFTP 写操作

检查:

grep sftp /etc/ssh/sshd_config

常见:

Subsystem sftp internal-sftp

如果有 ForceCommand 或只读限制,也会失败。


7. 用户被限制 shell

cat /etc/passwd | grep sftpuser

如果是:

/bin/false

没问题(SFTP 可用)

但如果是被限制成 rbash 或自定义脚本,可能阻止上传。


五、网络 / 客户端问题

8. 文件太大 / 超时

  • 网络不稳定
  • 客户端超时设置太短

✅ 解决:

  • 换 FileZilla / WinSCP
  • 分卷上传

9. 防火墙 / 安全组

  • CentOS firewalld
  • 云服务器安全组

虽然 SFTP 走 22 端口,但异常 ACL 也可能影响。


六、快速自查清单 ✅

# 1. 看目录权限
ls -ld /upload/path

# 2. 看磁盘
df -h
df -i

# 3. 看 SELinux
getenforce

# 4. 看 sshd 配置
grep -i sftp /etc/ssh/sshd_config

# 5. 看日志
tail -f /var/log/secure

如果你愿意,可以把 具体报错信息(客户端提示 / /var/log/secure 日志)发出来,我可以直接帮你精准定位。

0 踩