温馨提示×

centos sftp权限拒绝咋解决

小樊
74
2026-10-17 15:02:36
栏目: 智能运维

在 CentOS 上遇到 SFTP 权限拒绝(Permission denied),通常不是“密码错”,而是目录权限 / SELinux / SSH 配置的问题。下面按最常见原因一步步排查和解决。


一、先确认报错场景

  • 密码能输,但登录后马上断开 / 提示 Permission denied
  • 能登录,但无法上传 / 下载 / 进入目录
  • 使用 sftp 命令或 FileZilla / WinSCP 都失败

二、最常见原因 & 解决办法

✅ 1. SFTP 目录权限不对(最常见)

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

⚠️ 注意:

  • 家目录属主必须是 root
  • 用户只能对自己子目录有写权限

✅ 2. SSH 配置限制了 SFTP

检查 /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

✅ 3. SELinux 导致拒绝(CentOS 特有)

查看是否开启:

getenforce

如果是 Enforcing,执行:

setsebool -P ssh_chroot_rw_homedirs on
restorecon -Rv /home/sftpuser

或临时测试(不推荐生产):

setenforce 0

✅ 4. 用户被禁止登录

确认用户没被锁:

passwd -S sftpuser

如果是 L,解锁:

passwd -u sftpuser

确保 shell 不是 /sbin/nologin(SFTP 可保留 nologin,但有些配置需要 /bin/bash)


✅ 5. 磁盘或配额问题

df -h
quota sftpuser

三、快速自检清单 ✅

  • [ ] 家目录属主是 root
  • [ ] 家目录权限 ≤ 755
  • [ ] 上传目录属主是用户
  • [ ] sshd_config 配置正确
  • [ ] SELinux 已处理
  • [ ] sshd 已重启

四、最简可用示例(推荐)

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 相关配置 发我,我可以直接帮你定位是哪一条。

0 踩