温馨提示×

centos怎么修复sftp报错

小樊
45
2026-10-17 15:00:38
栏目: 智能运维

在 CentOS 上修复 SFTP 报错,通常要从 SSH 服务配置、权限、SELinux、防火墙、用户设置 这几方面排查。下面我按常见报错场景 + 修复方法给你一个系统性的指南。


一、先确认 SFTP 依赖的 SSH 是否正常

SFTP 本质是基于 SSH 的,SSH 不通 SFTP 一定不行。

systemctl status sshd
journalctl -u sshd -n 50

常见 SSH 问题修复

# 重启 SSH
systemctl restart sshd

# 检查端口
ss -lntp | grep ssh

二、最常见的 SFTP 报错及修复

1️⃣ Connection closed / broken pipe

原因

  • 用户 shell 不对
  • 用户家目录权限错误
  • 配置了 ChrootDirectory 但权限不对

修复

✅ 用户 shell 必须是合法的

grep sftpuser /etc/passwd

如果是:

/sbin/nologin

✅ 正常(推荐)

❌ 如果是:

/bin/false

有时候不行,建议:

usermod -s /sbin/nologin sftpuser

2️⃣ Chroot SFTP 报错(重点)

如果你在 sshd_config 里用了:

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

正确权限(非常关键)

chown root:root /data/sftp
chmod 755 /data/sftp

✅ Chroot 目录 必须属于 root,且其他用户不可写

然后再建上传目录:

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

3️⃣ Permission denied 上传失败

检查

ls -ld /data/sftp/upload

修复

chown sftpuser:sftpuser /data/sftp/upload
chmod 755 /data/sftp/upload

三、SELinux 导致的 SFTP 问题(CentOS 重灾区)

查看是否开启

getenforce

常见现象

  • SSH 能连
  • SFTP 连上后立刻断开
  • 日志里有 avc: denied

修复方法

# 临时
setenforce 0

# 永久
vi /etc/selinux/config
SELINUX=permissive

或只放行 SFTP:

setsebool -P ssh_chroot_rw_homedirs on
restorecon -Rv /data/sftp

四、防火墙 / 安全组

检查

firewall-cmd --list-all

开放 SSH

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

⚠️ SFTP 不需要单独开端口,只用 SSH 的 22


五、sshd_config 典型正确配置示例

Subsystem sftp internal-sftp

Match Group sftp
    ChrootDirectory /data/sftp/%u
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no

目录结构:

/data/sftp/user1   (root:root, 755)
/data/sftp/user1/upload (user1:user1)

六、快速排查 checklist(照着做)

# 1. sshd 状态
systemctl status sshd

# 2. 用户 shell
grep sftpuser /etc/passwd

# 3. 目录权限
namei -l /data/sftp

# 4. SELinux
getenforce

# 5. 日志
journalctl -u sshd -f

七、如果你愿意,我可以更精准帮你

你可以直接贴出:

  • 完整报错信息
  • sshd_config 相关配置
  • ls -ld 目录权限
  • CentOS 版本(cat /etc/redhat-release)

我可以一步一步帮你定位到具体哪一行配置错了。

0 踩