温馨提示×

怎么在centos配置sftp

小樊
41
2026-09-24 06:17:14
栏目: 智能运维

在 CentOS 上配置 SFTP(SSH File Transfer Protocol) 通常基于 OpenSSH,不需要额外安装 FTP 服务。下面以 CentOS 7 / 8 / Stream 为例,分步骤说明如何配置。


一、基本前提

  • 已安装并运行 openssh-server
  • 有 root 或 sudo 权限
  • 防火墙已放通 22 端口(SFTP 默认走 SSH)

检查 SSH 服务:

systemctl status sshd

若未安装:

yum install -y openssh-server
systemctl enable --now sshd

二、创建 SFTP 用户(推荐方式)

1. 创建用户

useradd sftpuser
passwd sftpuser

2. 禁止使用 SSH 登录(仅 SFTP)

usermod -s /sbin/nologin sftpuser

三、配置 SFTP 目录(Chroot 限制)

1. 创建目录结构

mkdir -p /data/sftp/sftpuser
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser

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

⚠️ 注意:

  • Chroot 目录必须由 root 拥有
  • 用户只能在其子目录中写文件

四、修改 SSH 配置(关键)

编辑配置文件:

vi /etc/ssh/sshd_config

1. 注释掉原有 Subsystem

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

2. 添加以下内容

Subsystem sftp internal-sftp

Match User sftpuser
    ChrootDirectory /data/sftp/sftpuser
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no

如果有多个用户,可改为:

Match Group sftpusers

五、重启 SSH 服务

systemctl restart sshd

六、防火墙与 SELinux

1. 防火墙

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

2. SELinux(很重要)

setsebool -P ssh_chroot_rw_homedirs on

如仍有问题:

restorecon -Rv /data/sftp

七、测试 SFTP 登录

Linux / macOS

sftp sftpuser@服务器IP

Windows

  • FileZilla
  • WinSCP
  • Xshell

连接类型选择 SFTP,端口 22


八、常见错误排查

问题 原因
broken pipe Chroot 目录权限不对
无法写入 写目录不是用户拥有
能 SSH 登录 没设置 nologin
登录失败 sshd 未重启

九、进阶(可选)

  • 多用户 SFTP(Group 方式)
  • 只读 / 只写用户
  • 日志审计
  • SFTP + 公钥认证
  • 限制 IP 登录

如果你需要 多用户配置 / 公匙登录 / 禁止密码 / Docker SFTP,可以继续问我。

0 踩