CentOS 下 SFTP 能登录但无法上传文件,常见原因和排查步骤如下:
SFTP 上传失败,大多不是 SSH 问题,而是 目录写权限 问题。
要求:
示例:
# 假设上传目录是 /data/sftp/upload
chown sftpuser:sftpuser /data/sftp/upload
chmod 755 /data/sftp
chmod 755 /data/sftp/upload
⚠️ 注意:
/data/sftp)不能被用户写如果你在 sshd_config 里用了:
Match User sftpuser
ChrootDirectory /data/sftp
ForceCommand internal-sftp
必须满足:
/data/sftp 属主是 rootchown root:root /data/sftp
chmod 755 /data/sftp
否则 SFTP 会直接断开或无法上传。
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
df -h
磁盘 100% 也会导致上传失败。
检查:
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
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)我可以帮你精准定位是哪一条原因。