温馨提示×

centos sftp权限拒绝为何

小樊
38
2026-09-30 03:32:15
栏目: 智能运维

在 CentOS 上遇到 SFTP 权限拒绝(Permission denied),通常不是“密码错”,而是系统权限或配置限制导致的。下面按最常见原因 → 排查方法 → 解决方式来说明。


一、最常见原因汇总

1️⃣ 用户家目录权限不正确(最常见)

SFTP(尤其是 Chroot 环境)对目录权限非常严格:

/ home / user

要求:

  • 属主:root
  • 权限:755 或更严格
  • 不能 group / other 可写

❌ 错误示例:

drwxrwxrwx  user user  /home/user

✅ 正确示例:

drwxr-xr-x  root root  /home/user

修复:

chown root:root /home/user
chmod 755 /home/user

2️⃣ 使用 Chroot 但子目录没权限

如果你配置了:

Match User sftpuser
    ChrootDirectory /home/sftp

那么:

  • /home/sftp 必须 root 拥有
  • 用户要上传,必须在其下建子目录并赋权
mkdir /home/sftp/upload
chown sftpuser:sftpuser /home/sftp/upload

3️⃣ SELinux 阻止(CentOS 特有)

CentOS 默认开启 SELinux,会悄悄拒绝 SFTP 写操作。

查看是否拒绝:

getsebool -a | grep sftp

常见修复:

setsebool -P ssh_chroot_rw_homedirs on

或临时关闭测试:

setenforce 0

4️⃣ SSH 配置限制 SFTP

检查:

/etc/ssh/sshd_config

常见问题:

Subsystem sftp internal-sftp
ForceCommand internal-sftp

如果用户被强制 internal-sftp,但目录不对,就会拒绝。


5️⃣ 用户被禁止登录

用户可能被设为不可登录:

usermod -s /sbin/nologin sftpuser

SFTP 允许,但 shell 不行。

检查:

grep sftpuser /etc/passwd

6️⃣ 家目录在 /home 但磁盘或挂载只读

mount | grep ' / '

或:

df -h

二、快速排查清单(推荐顺序)

# 1. 看错误日志
journalctl -u sshd -f

# 2. 检查目录权限
namei -l /home/sftpuser

# 3. 检查 SELinux
getenforce

# 4. 测试本地
sftp sftpuser@localhost

三、一个标准 SFTP 用户示例(CentOS)

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:

Match User sftpuser
    ChrootDirectory /home/sftpuser
    ForceCommand internal-sftp
    AllowTcpForwarding no

重启:

systemctl restart sshd

四、如果你愿意

你可以贴出:

  • 报错完整信息
  • sshd_config 相关配置
  • ls -ld /home/xxx

我可以直接帮你精准定位是哪一条原因。

0 踩