在 CentOS 上 SFTP 上传失败 原因很多,下面按最常见 → 较少见帮你梳理,你可以对照排查。
现象:能登录,但上传报错 Permission denied
检查:
ls -ld /目标目录
确保:
w 权限解决示例:
chown user:user /data/sftp
chmod 755 /data/sftp
⚠️ 注意:父目录也要有执行权限(x)
即使权限正确,SELinux 也会拦
检查:
getenforce
如果是 Enforcing:
临时关闭测试:
setenforce 0
如果上传成功 → 就是 SELinux 问题
永久解决:
semanage fcontext -a -t public_content_rw_t "/data/sftp(/.*)?"
restorecon -Rv /data/sftp
setsebool -P ftpd_full_access on
df -h
如果 Use% = 100%,上传必失败
常见于:
Match User sftpuser
ChrootDirectory /data/sftp
ForceCommand internal-sftp
⚠️ 规则很严格:
ChrootDirectory 必须是 root 拥有755错误示例:
chown sftpuser /data/sftp # ❌
正确:
chown root:root /data/sftp
chmod 755 /data/sftp
mkdir /data/sftp/upload
chown sftpuser:sftpuser /data/sftp/upload
grep sftp /etc/ssh/sshd_config
应有:
Subsystem sftp internal-sftp
或
Subsystem sftp /usr/libexec/openssh/sftp-server
修改后:
systemctl restart sshd
grep 用户名 /etc/passwd
如果是 /sbin/nologin 是正常的
但某些配置可能禁止 SFTP 写
SFTP 走 22 端口
firewall-cmd --list-all
在服务器上看日志:
tail -f /var/log/secure
上传一次,看报错最直接
我可以精准判断,请贴出:
sshd_config 相关配置我可以一步一步帮你修 ✅