温馨提示×

CentOS SFTP如何排错

小樊
45
2026-07-20 10:36:04
栏目: 智能运维

在 CentOS 上排查 SFTP 无法连接或异常 的问题,一般可以按下面顺序一步一步来。这里假设你用的是 OpenSSH(默认 SFTP),而不是 vsftpd。


一、确认 SSH / SFTP 服务状态

SFTP 依赖 sshd,先确认服务是否正常运行。

systemctl status sshd

如果没启动:

systemctl start sshd
systemctl enable sshd

查看端口是否监听(默认 22):

ss -lntp | grep 22
# 或
netstat -lntp | grep 22

二、测试基础 SSH 连接

SFTP 本质上是 SSH,先排除 SSH 本身的问题:

ssh 用户名@服务器IP

如果 SSH 都连不上,重点检查:

  • 防火墙
  • SELinux
  • SSH 配置错误

三、防火墙是否拦截

1️⃣ firewalld(CentOS 7+ 常见)

firewall-cmd --list-all

确认 22 端口是否放行:

firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload

或直接放行端口:

firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --reload

2️⃣ iptables(老系统)

iptables -L -n

四、SELinux 是否阻止

SELinux 常被忽略,但非常常见。

查看状态:

getenforce

如果是 Enforcing,可临时关闭测试:

setenforce 0

如果关闭后 SFTP 正常,说明是 SELinux 问题。

常见修复方式:

setsebool -P ssh_chroot_rw_homedirs on
restorecon -Rv /home

五、检查 SSH / SFTP 配置

配置文件:

vim /etc/ssh/sshd_config

重点检查项:

1️⃣ SFTP 子系统是否启用

Subsystem sftp /usr/libexec/openssh/sftp-server

或(推荐):

Subsystem sftp internal-sftp

2️⃣ 是否限制了用户

常见限制:

AllowUsers user1 user2
DenyUsers user3

检查是否把你当前用户排除了。


六、目录权限问题(最常见)

SFTP 登录失败 很大概率是权限问题

1️⃣ 家目录权限

ls -ld /home/用户名

⚠️ 规则:

  • 属主必须是该用户
  • 不能有 group / other 写权限

✅ 正确示例:

drwxr-x--- 用户 用户组 /home/用户名

修复:

chown 用户名:用户名 /home/用户名
chmod 750 /home/用户名

2️⃣ 如果使用 ChrootDirectory

Match User sftpuser
    ChrootDirectory /data/sftp
    ForceCommand internal-sftp

⚠️ ChrootDirectory 必须满足:

  • 属主是 root
  • 权限 ≤ 755
  • 用户不能拥有该目录写权限
chown root:root /data/sftp
chmod 755 /data/sftp

用户上传目录单独建:

mkdir /data/sftp/upload
chown sftpuser:sftpuser /data/sftp/upload

七、查看日志(最关键)

1️⃣ 服务端日志

journalctl -u sshd -f

或:

tail -f /var/log/secure

常见错误示例:

  • bad ownership or modes for chroot directory
  • Authentication failed
  • Permission denied

2️⃣ 客户端调试

sftp -v 用户名@服务器IP

八、确认用户 shell 是否合法

如果用户被禁用 shell:

cat /etc/passwd | grep 用户名

如果是:

/bin/false
/sbin/nologin

✅ SFTP 可以正常用,不影响
❌ 但 SSH 登录会失败


九、快速排错清单(速查)

✅ sshd 是否运行
✅ 22 端口是否监听
✅ 防火墙是否放行
✅ SELinux 是否拦截
✅ sshd_config 是否正确
✅ 家目录 / Chroot 权限
✅ /var/log/secure 报错


十、如果你愿意,我可以直接帮你定位

你可以直接贴出以下信息(敏感信息可打码):

  1. /var/log/secure 报错
  2. sshd_config 相关配置
  3. 用户家目录权限
  4. 是否使用 Chroot

我可以 直接告诉你哪一行配置出错

0