在 CentOS 上遇到 SFTP 权限拒绝(Permission denied),通常不是“密码错”,而是目录权限 / SELinux / SSH 配置的问题。下面按最常见原因一步步排查和解决。
Permission deniedsftp 命令或 FileZilla / WinSCP 都失败SFTP 用户家目录不能过于开放
✅ 正确权限示例(以用户 sftpuser 为例):
chown root:root /home/sftpuser
chmod 755 /home/sftpuser
mkdir /home/sftpuser/upload
chown sftpuser:sftpuser /home/sftpuser/upload
chmod 755 /home/sftpuser/upload
⚠️ 注意:
检查 /etc/ssh/sshd_config
grep sftp /etc/ssh/sshd_config
如果你用了:
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
✅ 要求:
ChrootDirectory 及其上级目录 必须是 root 所有修改后重启 SSH:
systemctl restart sshd
查看是否开启:
getenforce
如果是 Enforcing,执行:
setsebool -P ssh_chroot_rw_homedirs on
restorecon -Rv /home/sftpuser
或临时测试(不推荐生产):
setenforce 0
确认用户没被锁:
passwd -S sftpuser
如果是 L,解锁:
passwd -u sftpuser
确保 shell 不是 /sbin/nologin(SFTP 可保留 nologin,但有些配置需要 /bin/bash)
df -h
quota sftpuser
useradd -m sftpuser
passwd sftpuser
chown root:root /home/sftpuser
chmod 755 /home/sftpuser
mkdir /home/sftpuser/upload
chown sftpuser:sftpuser /home/sftpuser/upload
sshd_config:
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
如果你愿意,可以把 具体报错信息 + sshd_config 相关配置 发我,我可以直接帮你定位是哪一条。