在 CentOS 上遇到 SFTP 无法上传文件 的问题,通常可以从以下几个方面逐一排查和解决。
SFTP 依赖 SSH:
systemctl status sshd
如果没运行:
systemctl start sshd
systemctl enable sshd
sftp user@服务器IP
如果能登录但不能上传,说明是权限或配置问题。
SFTP 用户必须对目标目录有 写权限:
ls -ld /目标目录
正确示例:
drwxrwxr-x 2 user user 4096 ...
修复权限:
chown user:user /目标目录
chmod 755 /目标目录
如需可写:
chmod 775 /目标目录
⚠️ 注意:
/home/user 通常权限应为 700 或 755getenforce
如果是 Enforcing,很可能是 SELinux 限制。
setenforce 0
再试上传,如果成功,说明是 SELinux 问题。
为目录设置正确的 SELinux 上下文:
semanage fcontext -a -t public_content_rw_t "/目标目录(/.*)?"
restorecon -Rv /目标目录
或允许 FTP/SFTP 写:
setsebool -P allow_ftpd_full_access on
如果你在 /etc/ssh/sshd_config 中配置了:
Match User sftpuser
ChrootDirectory /sftp
ForceCommand internal-sftp
ChrootDirectory 及其所有上级目录:
root755chown root:root /sftp
chmod 755 /sftp
用户实际可写目录:
mkdir /sftp/upload
chown sftpuser:sftpuser /sftp/upload
df -h
df -i
如果满了,无法上传任何文件。
SFTP 使用 SSH 端口(默认 22):
firewall-cmd --list-all
确保 22 端口开放。
| 现象 | 原因 |
|---|---|
permission denied |
目录无写权限 |
| 能登录但不能上传 | SELinux |
| 登录直接断开 | chroot 配置错误 |
| 卡住不动 | 防火墙 / 网络 |
| 只能下不能上 | 目录权限 |
如果你愿意,可以把 报错信息 或 /etc/ssh/sshd_config 相关配置贴出来,我可以帮你精确定位问题。