温馨提示×

CentOS如何配置SFTP

小樊
39
2026-07-20 09:58:13
栏目: 智能运维

在 CentOS 上配置 SFTP(SSH File Transfer Protocol),通常使用 OpenSSH 自带的功能即可,不需要额外安装 FTP 服务。下面我从最常见、最安全的方式开始讲解。


一、基本环境说明

  • 系统:CentOS 7 / CentOS 8 / Rocky / Alma 通用
  • SFTP 基于 SSH(22 端口)
  • 使用 OpenSSH 内置的 SFTP 子系统

二、安装并确认 OpenSSH

rpm -qa | grep openssh

如果没有安装:

yum install -y openssh-server

启动并设置开机自启:

systemctl enable sshd
systemctl start sshd

三、最简单的 SFTP 配置(直接用系统用户)

1️⃣ 创建 SFTP 用户

useradd sftpuser
passwd sftpuser

2️⃣ 测试 SFTP

sftp sftpuser@服务器IP

✅ 此时 SFTP 已经可用
❗ 该用户 可以登录系统,也可以 SSH 登录(安全性较低)


四、推荐方式:限制 SFTP 用户只能使用 SFTP(最常用)

1️⃣ 创建 SFTP 专用用户

useradd -m -s /sbin/nologin sftpuser
passwd sftpuser

2️⃣ 修改 SSH 配置

编辑配置文件:

vi /etc/ssh/sshd_config

在文件末尾添加:

# 启用 SFTP 子系统
Subsystem sftp internal-sftp

# SFTP 用户限制
Match User sftpuser
    ChrootDirectory /home/sftpuser
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no

3️⃣ 设置目录权限(非常关键)

ChrootDirectory 必须属于 root,且不能被其他用户写

chown root:root /home/sftpuser
chmod 755 /home/sftpuser

创建可写目录:

mkdir /home/sftpuser/upload
chown sftpuser:sftpuser /home/sftpuser/upload
chmod 755 /home/sftpuser/upload

4️⃣ 重启 SSH

systemctl restart sshd

五、使用 SFTP 登录

Linux / macOS

sftp sftpuser@服务器IP

Windows

  • FileZilla
  • WinSCP
  • Xftp

六、多个 SFTP 用户(推荐组方式)

1️⃣ 创建 SFTP 用户组

groupadd sftpusers

2️⃣ 用户加入组

useradd -m -g sftpusers -s /sbin/nologin user1
useradd -m -g sftpusers -s /sbin/nologin user2
passwd user1
passwd user2

3️⃣ sshd_config 改为组匹配

Subsystem sftp internal-sftp

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

4️⃣ 设置目录权限

chown root:root /home/user1
chmod 755 /home/user1

mkdir /home/user1/upload
chown user1:sftpusers /home/user1/upload

七、常见问题排查

❌ 登录失败 / 死循环 / 闪退

检查:

  • ChrootDirectory 权限
  • 是否 root 拥有且不是 777
  • 是否使用 internal-sftp

❌ 无法上传文件

  • 上传目录不是用户可写
  • 父目录权限问题

八、安全建议 ✅

  • 修改 SSH 默认端口
  • 禁用 root SSH 登录
  • 使用密钥认证
  • 防火墙放行 22 端口
firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload

如果你愿意,我可以帮你: ✅ 写一份 生产环境 SFTP 规范配置
✅ 配置 只允许某个 IP 访问 SFTP
✅ 配置 日志审计
✅ CentOS 7 vs CentOS 8 差异说明

只要告诉我你的使用场景即可。

0