温馨提示×

centos sftp无法上传为何

小樊
38
2026-10-03 00:57:19
栏目: 智能运维

CentOS 下 SFTP 能登录但无法上传文件,常见原因和排查步骤如下:


一、最常见原因

1️⃣ 目录权限不对(80% 的问题)

SFTP 上传失败,大多不是 SSH 问题,而是 目录写权限 问题。

要求:

  • 上传目录对 SFTP 用户可写
  • 父目录不能过于开放(尤其 Chroot 环境)

示例:

# 假设上传目录是 /data/sftp/upload
chown sftpuser:sftpuser /data/sftp/upload
chmod 755 /data/sftp
chmod 755 /data/sftp/upload

⚠️ 注意:

  • Chroot 目录(如 /data/sftp)不能被用户写
  • 真正可写的是子目录

2️⃣ 使用了 Chroot,但配置错误

如果你在 sshd_config 里用了:

Match User sftpuser
    ChrootDirectory /data/sftp
    ForceCommand internal-sftp

必须满足:

  • /data/sftp 属主是 root
  • 权限 ≤ 755
chown root:root /data/sftp
chmod 755 /data/sftp

否则 SFTP 会直接断开或无法上传。


3️⃣ SELinux 限制(CentOS 特有)

CentOS 默认开启 SELinux,可能阻止写入。

检查:

getenforce

如果是 Enforcing,试试:

setenforce 0

如果上传成功,说明是 SELinux 问题。

正确做法(不关闭 SELinux):

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

4️⃣ 磁盘满了

df -h

磁盘 100% 也会导致上传失败。


5️⃣ 用户被限制在某目录(只读)

检查:

grep sftpuser /etc/passwd

如果是:

/sbin/nologin

这是正常的(SFTP 用户常这样)

但确认不是:

/bin/false

且没有被 read only 限制。


二、快速排查流程(推荐)

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

# 2. 本地测试
sftp sftpuser@localhost

# 3. 尝试 put 文件,看具体报错

三、最小可用配置示例

创建用户

useradd -m sftpuser
passwd sftpuser

sshd_config

Subsystem sftp internal-sftp

Match User sftpuser
    ChrootDirectory /data/sftp
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no

目录

mkdir -p /data/sftp/upload
chown root:root /data/sftp
chown sftpuser:sftpuser /data/sftp/upload
chmod 755 /data/sftp
chmod 755 /data/sftp/upload

四、如果你愿意

你可以直接贴:

  • sshd_config 相关配置
  • 报错信息(客户端 + /var/log/secure)
  • 用户和目录权限

我可以帮你精准定位是哪一条原因。

0 踩